arduinoのチップにアップロードするスケッチと呼ばれるプログラムを作成します。 POWERピンを0.5秒短絡させる。 RESETピンを0.5秒短絡させる。 POWERピンを5秒短絡させる。 PCの電源状態を取得する。 WEBインタフェースでは(POWERピンの入力は電源状態に応じてTrunOnとTrunOffを切り替える。)必要があるかな・・・。 WEBからコントロール可能にする。 今回の目的では、EtherShieldというシールドを使ってarduino側にWEBサーバーを構築しなければなりません。IDEにWEBサーバーのサンプルプログラムがあったのでそれを修正して使いました。もっとも、メモリーも限られたハードなので、非常に単純なWEBサーバーになっています。コードを見ると、リクエストやレスポンスはキャラクター単位で処理していますから、あまり大量のデータをやりとりすることは現実的ではありません。DHCPも実装したいところですが、習作なので本番用に組み込むことにしてスケッチはできるだけ単純にします。 さて、arduinoはデータをネットワークにむけて「発信」するのは簡単なのですが、ネットワークからデータを受信して処理することはあまり得意ではないようです。arduino側のWEBサーバーでPHPとかperlとかが動作すれば、それに越したことはないのですが、そんな高度なWEBサーバーはハードウェアの制約上からも自分の実力からも構築できそうにありません。 よって、データというか諸々のパラメータをどうやって渡すかと言うことで、ちょっと悩みました。 結局、URLに乗せて渡すという方法が単純でarduino側の処理も簡単であると考えました。 いきなり実機のPCの電源をコントロールするというのも何だし、なにより周辺回路をまだ制作していないので、各ピンに送る信号をLEDで確認するというデバック用の回路をブレッドボード上に構築しました。そんなたいそうな物ではなく、LEDとarduinoのデジタルI/Oをジャンパ線でつないだだけです。 EtherShieldがデジタルI/Oの11,12,13ピンを占有するようなので、空いたポートを出力に設定して3ポート確保します。実際は、マザーボードのPOWERピンとRESETピンの二つに入力するだけなので、2ポートでいいのですが、1ポートは別の何かをコントロールするためのリザーブポートとしておきます。 あと、PCの電源状態を取得するために、デジタルI/Oポートを入力に設定して1ポート確保しました。ディスクドライブの電源ライン当たりから5Vを得れば、PCが稼働状態かどうかを判別できますね。 arduinoへアップロードしたスケッチ /* * Sketch to control the MotherBord switches. */ #include <SPI.h> //Will be required from EthernetLibrary Ver.0019. #include <Ethernet.h> #define POWER 7 //power:red #define RESET 6 //reset:blue #define RESERVED 5 //reserved:green #define STATUS 4 //alive byte mac[] = { 0x##, [...]