IchigoJamでWi-fiが使える拡張ボード「MixJuice」。
hello002.stores.jp
先日、ファームウェア1.4が公開されて、サーバー機能が追加されました。
それを使って、1対1の無線トランシーバーをやってみました。
新学習指導要領で、2021年から中学校技術科のプログラミングが拡充され、「ネットワークを介した双方向のプログラミング」をやることになっています。それをちょっと先取りするイメージで作ってみました。
初期設定
(1)IchigoJam+MixJuiceを2セット用意します。片方がサーバー、もう片方がクライアントになります。
(2)サーバーにするMixJuiceで、ソケットCN4のIO16端子をGND端子とつなげます。これでサーバーモードで起動するようになります。
(3)2台を起動します。
(MixJuiceの説明書にも書いてありますが、MixJuiceのCN6にジャンパーを挿して、MixJuice側のmicro USBに電源を挿してください)
クライアント側のIchigoJamで、サーバーへの接続を設定します。
?"MJ APC MJ-XXXXXXXXXXXX"
「XXXXXXXXXXXX」はサーバー側のMixJuiceのMacアドレス12桁です。
一度接続できればその設定が記憶されるので、次回からは電源ONで自動接続するようになります(この手順が不要になります)。
なおサーバー側のIPアドレスは「192.168.20.1」、クライアント側は「192.168.20.100」になります。
(2台目以降のクライアントは「~.101」「~.102」…になる)
通信
再び2台の電源ONの後、クライアント側のIchigoJamで、サーバーとのTCP通信を開始します。
?"MJ TCP 192.168.20.1 20001"
「'Connection established.」と表示されれば通信成功で、サーバー側と双方向にTCP通信を開始します。
TX,RX同士をケーブルでつないだ時と基本的に同じで、キー入力してEnterすると、その文字列がそのまま相手方へ送信されます。
2台でキーボードから文字を入力すると、Syntax Errorの嵐になります(笑)
「UART0
通信をやめる時は、CLOSEコマンドを送ります。
?"MJ TCP CLOSE"
プログラム
同時に双方向で通信すると嵐になるので、文字列を交互に送受信する「トランシーバー」のプログラムを作ってみました。
- サーバー側・クライアント側で、それぞれのプログラムを実行します。
- 最初はサーバー側が送信する番です。「?」と表示されるので、キーボードで文字列を入力してEnterキーを押してください。クライアント側へ送信されます。クライアント側では、受信した文字列が「>」の後に表示されます。
- 次はクライアント側の番です。「?」と表示されるので、キーボードで文字列を入力してEnterキーを押してください。サーバー側へ送信されます。
- 以下、交互に文字列を入力して送信してください。
サーバー側プログラム
10 'TR-SERVER 20 ?:?"?"; 30 UART 1,0 40 GSB 100 50 UART 0,1 60 ?:?">"; 70 GSB 100 80 BEEP 90 GOTO 20 100 C=INKEY():IF !C CONT 110 ?CHR$(C); 120 IF C!=10 GOTO 100 130 RTN
クライアント側プログラム
10 'TR-CLIENT 20 UART 0,1 30 ?:?">"; 40 GSB 100 50 BEEP 60 ?:?"?"; 70 UART 1,0 80 GSB 100 90 GOTO 20 100 C=INKEY():IF !C CONT 110 ?CHR$(C); 120 IF C!=10 GOTO 100 130 RTN
サーバー側とクライアント側は、送信処理と受信処理の順番が違うだけです。
サーバー→クライアントの下り方向は、送信した文字列が受信されるまでに3~5秒ほどタイムラグがあります。クライアント→サーバーの上り方向は1秒くらいです。
UDPを使って送信するとタイムラグが小さいのですが、相手方のIPアドレスとポート番号を毎回指定しないといけないので、面倒です。
?"MJ UDP 192.168.20.1 20001 msg"