ネット経由でIchigoJamとIchigoJamをつなぐ

2台のMixJuiceを乗せたIchigoJamをつなぐ

MixJuiceを乗せたIchigoJam2台を、ネット経由でつなげてみました。片方が送信専用、片方を受信専用です。

送信側は、光センサーで明るいか暗いかを調べてネットに送信します。

受信側は、ネット経由でデータを受け取って、暗かったら寝て、明るかったら起きるように顔表示します。

送信側

光センサーの値がある値より大きければ1(明るい)、そうでなければ0(暗い)のどちらかの情報をサーバに送り続けるしくみです。IMG_2774

離れたところから単体でセンサーとして動くように、バッテリーだけをつないで動かします。

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);
?>

受信側

受信側は、サーバのデータを見て、表示を切り替えるだけです。

IMG_2780

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のディスプレイが寝顔になり、

送信側の手を離すと、受信側のディスプレイの顔が起きました。
IMG_2781