イーサネット シールド付きの arduino があり、ネットワーク接続の切断 (つまり、誰かが arduino からイーサネット ケーブルを切断した場合) を検出できるようにしたいと考えています。私はオンラインで見回しましたが、何も見つかりませんでした。イーサネット グローバル オブジェクトの IP アドレスは、ケーブルを抜いた後でも変わりません。どんなアドバイスでも大歓迎です!
2 に答える
2 つの大雑把な方法と 1 つの難しい方法を考えることができます。まず大雑把な方法:
DHCP リクエスト
新しい DHCP アドレスを要求し、失敗を確認します (IP アドレスが動的に割り当てられると仮定します)。失敗は、ケーブルが切断されていることを意味する場合があります(またはDHCPサーバーがホースで接続されていることを意味する場合があります:)
if (Ethernet.maintain() % 2 == 1) {
// Cable disconnected or DHCP server hosed
}
ping/接続
既知のアドレス (おそらくルーター) に ping を実行します。失敗した場合は、ケーブルが抜かれているか、他の多くの理由 (ルーターのダウン、ネットワークのダウンなど) が原因で、接続されていません。
ケーブルの取り外しを検出する間隔でサービスに接続していない場合は、ping または DHCP 更新メソッドのいずれかを実行できます。
リンク
W5100 (イーサネット シールドのこのコア) にはLINKLED
信号がありますが、レジスタを介してプロセッサがこれを利用できるようにはなっていません。ワイヤーをシールドにはんだ付けしたい場合は、断線検出器を自作することができます。明らかな選択肢は ですが、LINKLED
TX/RX アクティビティ中に点滅します。したがって、100Mbps ネットワークを使用していることがわかっている場合は、ワイヤをSPDLED
(RJ45 コネクタのすぐ下) にはんだ付けできますが、どちら側にはんだ付けする必要があるかはわかりません。はSPDLED
アクティブ ローなので、マルチメーターをつかんで、LED がオフのときに 0V に最も近い側を見つけることができます。次に、このワイヤを Arduino に接続し、それを実行できますdigitalRead()
。