SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

MixJuiceで無線トランシーバー

IchigoJamWi-fiが使える拡張ボード「MixJuice」。
hello002.stores.jp
先日、ファームウェア1.4が公開されて、サーバー機能が追加されました。
それを使って、1対1の無線トランシーバーをやってみました。
f:id:shiro0922:20191110140609j:plain
新学習指導要領で、2021年から中学校技術科のプログラミングが拡充され、「ネットワークを介した双方向のプログラミング」をやることになっています。それをちょっと先取りするイメージで作ってみました。

初期設定

(1)IchigoJam+MixJuiceを2セット用意します。片方がサーバー、もう片方がクライアントになります。

(2)サーバーにするMixJuiceで、ソケットCN4のIO16端子をGND端子とつなげます。これでサーバーモードで起動するようになります。
f:id:shiro0922:20191111181041j:plain

(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"

f:id:shiro0922:20191110133022j:plain
「'Connection established.」と表示されれば通信成功で、サーバー側と双方向にTCP通信を開始します。
TX,RX同士をケーブルでつないだ時と基本的に同じで、キー入力してEnterすると、その文字列がそのまま相手方へ送信されます。
2台でキーボードから文字を入力すると、Syntax Errorの嵐になります(笑)
「UART0」を入力すると送信が止まるので、嵐が止まります。
通信をやめる時は、CLOSEコマンドを送ります。

?"MJ TCP CLOSE"

プログラム

同時に双方向で通信すると嵐になるので、文字列を交互に送受信する「トランシーバー」のプログラムを作ってみました。
f:id:shiro0922:20191110140639j:plain

  • サーバー側・クライアント側で、それぞれのプログラムを実行します。
  • 最初はサーバー側が送信する番です。「?」と表示されるので、キーボードで文字列を入力して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"