2台のMixJuiceを乗せたIchigoJamをつなぐ
MixJuiceを乗せたIchigoJam2台を、ネット経由でつなげてみました。片方が送信専用、片方を受信専用です。
送信側は、光センサーで明るいか暗いかを調べてネットに送信します。
受信側は、ネット経由でデータを受け取って、暗かったら寝て、明るかったら起きるように顔表示します。
送信側
光センサーの値がある値より大きければ1(明るい)、そうでなければ0(暗い)のどちらかの情報をサーバに送り続けるしくみです。
離れたところから単体でセンサーとして動くように、バッテリーだけをつないで動かします。
IchigoJamのタクトスイッチを押しながら電源を入れると、SAVE 0で保存したプログラムを読み込んで動き始めるので、プログラムはSAVE 0で保存しておけばいいのです。
ただし、MixJuiceは電源を入れるとWiFiと接続を開始して、しばらく経ってからでないと通信ができません。また、USBでキーボードをつないでいると起動時にゴミデータが入ったりすることもあるようです。
そこで、10行目でタクトスイッチを押すのを止めるまで待つようにしました。タクトスイッチを押しながら電源を入れると、SAVE0で保存したこのプログラムが始まり、MixJuiceでは緑のLEDがチカチカさせながらWiFiとの接続が始まります。チカチカ中はタクトスイッチは押しっぱなしで、チカチカが点灯に変わったら準備OKなので、タクトスイッチを離すと次の行を実行していきます。
ただ、USBキーボードをつないでいるときは(はずしたらいいだけですが)、ゴミデータが乗ることがあったので、25行目でもう一回タクトスイッチを押して時間差をつけたらわりとうまくいくようになりました。
30〜40行目でWiFiがつながったことを確認したら、プログラム開始です。
50行目以降で、IN2につないだ光センサーの値を受け取って、ある値以上なら1、そうでないなら0をサーバーに送信し、1秒おきにくりかえします。
5 ' PUSHTEST.BAS 10 IF BTN()=1 GOTO 10 20 CLS:UART 1:?"START" 25 IF BTN()=0 GOTO 25 30 ?"MJ APS" 40 INPUT B:IF B<>1 GOTO 30 50 CLS 60 A=ANA(2) 70 IF A>500 B=1 ELSE B=0 80 LC 0,5:?"MJ GET ymori.com/ij/pushtest.php?data=";B 90 WAIT 60:GOTO 60
サーバー側で受け取るプログラムはPHP。
受け取った値をpushtest.txtに改行付きで書き込みます。これは、IchigoJamで受け取るときINPUTで受け取るのでデータの終わりに改行が必要なためです。
<?php $filepath = "pushtest.txt"; $fp = fopen($filepath, "w"); if($_GET["data"] == "1"){ fputs($fp, "1\n"); }else{ fputs($fp, "0\n"); } fclose($fp); ?>
受信側
受信側は、サーバのデータを見て、表示を切り替えるだけです。
20行目でデータのリクエストをして、30行目のINPUT文でデータを受け取ります。
40行目でその値をみて、寝た顔か、起きた顔かどちらかの表示にジャンプしています。
5 ' PUSHFACE.BAS 10 CLS 20 LC 0,0:?"MJ GET ymori.com/ij/pushtest.txt" 30 INPUT A 40 IF A=0 GOTO 100 ELSE GOTO 150 100 LC 15,10:?CHR$(#91,0,0,#91) 110 LC 15,13:?CHR$(#91,#91,#91,#91) 120 WAIT 60:GOTO 10 150 LC 15,10:?CHR$(#E8,0,0,#E8) 160 LC 15,12:?CHR$(#98,#91,#91,#99) 170 LC 15,13:?CHR$(#92,0,0,#92) 180 LC 15,14:?CHR$(#92,0,0,#92) 190 LC 15,15:?CHR$(#9A,#91,#91,#9B) 200 WAIT 60:GOTO 10
動作確認
あとは、2台のIchigoJamをそれぞれ動かすだけでつながりました。
送信側のIchigoJamの光センサーに手をかざすと、受信側のIchigoJamのディスプレイが寝顔になり、