■名古屋から横浜のPCを遠隔操作するようになって数ヶ月。操作といってもPC本体の起動・停止と特定アプリケーションの起動・停止ぐらい。それなりにうまく動いているのだけど、時々うまくいかなくなる時がある。PCの停止・起動操作に失敗することがあって、ありがちなのがPCの起動で、BIOS初期化で引っかかることがある。ASUSのマザーボードを使っているのだけど、ケース開放エラーでブートシーケンスが停止してしまう。
ケース開放の検出なんてしていないけど、マザーボード的にはパーツのがたつきでも検知してしまう。それはいいんだけど、問題は誤検知することと、一旦検知してしまうと、電源をオンオフ操作しないと回復できないこと。
PC本体の起動はNICのWOLを使い、他の操作はPC上で動かすWEBサーバ経由に行っているから、ブートでひっかかってしまうともうどうにもならない。何らかの手段をもって電源スイッチ操作を行う必要があり、現在、その対応として横浜に帰って電源ボタンを押下する操作を行っている。
これはなんとかしたい。
一番いいのはBIOSのケース開放エラーを無効化することなんだけど、どういうわけだかそれができない。一昔前のバージョンだとこの手のエラーは無視する設定もできたような気がするのだけど、今は駄目らしい。
では、ネットワーク経由で電源スイッチ操作を行うようにすればいいわけだ。
例えば今のPCとは別にウェブサーバからコントロールするとか。メインのウェブサーバからRS232Cを引き出して制御に使うという案もアリなんだけど、物理的にだいぶ離れて配置されているので、それは却下。それに動作テストはLinux環境で行わなければならないけど、名古屋でその環境はおいそれと確保できないのでそういう点でも難しい。
それじゃあ、組み込み系でウェブサーバ機能を持ったデバイスを作ればいいわけだ。
イーサ機能を持った石としてはPICもあるけれど、手元にはAVRが多いので、これを活用したい。というわけで、定番通りMicrochip社のENC28J60を使うことにする。これをATmega128のインターフェースに使う。利用可能メモリが最大4kだから大したサーバにはならないけど、HTTP経由のコマンド受信なら十分だろう。
HTTPでコマンドを受け付けて、PCのマザーボード上の電源とリセットボタン回路に割り込む。スイッチと並列してATmega制御のスイッチ回路を追加する。
ただ、いきなり作るのは無謀なので、例によってバラックから。全開GPSを作るとき、フルスクラッチで再利用できないバラックを作ってしまった反省から、もうちょっと汎用性の高いなんでも実験ボードを作り、ブレッドボード経由で接続する。今のところENC28J60の実験ボードとSPIインターフェースレベルでの接続ができていて、ENC28J60のレジスタ読み書きの動作確認をしている。ETHレジスタは読み書きできているっぽいのだけど、MAC/MIIレジスタが読めていないみたい。