web版コントロールパネルで指定したポイントの切り替え、信号の表示切替はraspberry pi上に構築したプログラム群が配下のマイコンとI2CやUSARTによって通信し、実際の動作を行います。
以下の手順は実際に動作させるための備忘録として記述したものです。
ここにあるプログラム類のソース、マイコンのソース等は公開していません。
悪しからず
m(__)m
・RaspberryPi常駐プログラムとマイコン間で通信する部分は、c言語+wiringPiで構築
・RaspberryPi常駐プログラムとwebサーバ用phpプログラム間で通信する部分はメッセージキューを使用
・RaspberryPi常駐プログラムとwebクライアント間でリロードを指示する部分はソケット通信を使用
サーバ側の準備
RaspberryPi常駐プログラム起動
その1
I2Cでマイコンと通信するAPを起動する
(/var/www/html/i2c/i2cserverをサーバー上で起動して常駐させておく)
RaspberryPiがI2Cマスター、PICマイコンがI2Cクライアントとなる。
RaspberryPiが直接通信するI2Cクライアントマイコンは、2chのI2Cをもち、もう1chのI2Cではマスターとなって配下のマイコンを制御する。
最下層のマイコンには、ポイントマシンを転換するマイコン、信号、入換標識を現示させるマイコン、踏切を鳴動させるマイコン、構内アナウンスを行うマイコン等々がある。
起動
pi@raspberrypi-1:~ $ cd /var/www/html/ngauge/i2c/
pi@raspberrypi-1:/var/www/html/ngauge/i2c $ ./i2cserver
停止
プログラムの終了は、"exit(return)" の⼊⼒で終了する。
尚、ctrl-C で終了した場合等、メッセージキューが残ったままになる。
メッセージキュー の状態はコマンドラインから、
ipcs
で確認できる。
メッセージキューの削除は、
sudo ipcrm -q [msqid]
で行う。
( msqid は、ipcs コマンドで確認できる )
その2
webクライアント側にデータのリロードを指示するトリガーをソケット通信で中継するAPを起動する
(/var/www/html/ngauge/php-emitter.jsをサーバー上で起動して常駐させておく)
web版コントロールパネルではなく、ハード的なコントロールパネルで進路の構成を行った場合に、web版コントロールパネルが表示されていれば再描画させて、実際の状態とweb版コントロールパネルの状態の同期をとる必要がある。
このため、webサーバ側からwebクライアント側にソケット通信でデータのリロードを指示するトリガーを送出する。
参考: socket.io-php-emitter で PHP から emit する方法
起動
pi@raspberrypi-1:~ $ cd /var/www/html/ngauge/
pi@raspberrypi-1:/var/www/html/ngauge $ node php-emitter.js
listening on *:6739
nodeをデバックモードで起動する場合
pi@raspberrypi-1:/var/www/html/ngauge $ DEBUG=* node php-emitter.js