目次
IchigoJam+MixJuiceからワイヤレスLチカとボタンの状態情報取得
MixJuiceからワイヤレスで、IchigoJam上のLEDを制御したり、ボタン状態を取得するプログラムを作成しました。プログラムは、IchigoJam BASICで記述しました。前回との違いは、(なんちゃって)HTTPサーバをIchigoJam BASICで実装したことです。
親機側(左):IchigoJam + MixJuice
子機側(右):IchigoJAM用マイコンボードの互換機 + ESP-WROOM-02モジュール(ATコマンド)
最新のIchigoJam BASIC Ver. 1.2.0 を使用することで、TELNETサーバとして動作するBASICプログラムが簡単に作成できることは、分かっていました(https://bokunimo.net/blog/esp/138/)。したがって、HTTPの実装も簡単だと思っていたのですが、実際には、IchigoJamの動作速度やメモリーの問題などで、若干の工夫が必要でした。初期バージョン(https://bokunimo.net/bokunimowakaru/diy/ichigojam/esp.html#hard1.0 )のようなフロー制御は不要です。
使い方:
(1) LEDを点灯する
?"MJ GET 192.168.0.3/L=1"
'LED=1 (応答)
(2) LEDを消灯する
?"MJ GET 192.168.0.3/L=0"
'LED=0 (応答)
(3) BTN状態を取得する
?"MJ GET 192.168.0.3/"
'BTN=0 (応答)
ハードウェアの製作方法:
下記の Ver 1.2用の作成方法を参照してください。
今のところ、CQ出版社のオリジナルの基板でしか動作確認を行っておりませんが、今後、発売される純正の新IchigoJamにも、ちょっとした工夫で接続が可能になると思います(そのうち検証して回路を公開する予定です)。
なお、純正IchigoJam Uを使用する場合は、ブレッドボード側のESPモジュールに別電源を供給してください。
BASICプログラム
簡易的な(なんちゃって)HTTPプロトコルをBASICプログラムで実装しました。IEと、MixJuice 1.0.1で動作確認済です。プログラムの著作権は放棄しません。CC BY での公開とします(改造して再配布可能です)。
cls:new
rem Espressif ESP8266 ESP-WROOM-02 ヨウ
rem Wireless LED for IchigoJam Version 1.2
rem Copyright (c) 2015-2016 Wataru KUNINO
rem https://bokunimo.net/ichigojam/1 'ESP Example
2 uart 3,2:?"AT":wait 30
10 ?"AT+RESTORE":gosub 800
20 ?"AT+CWMODE=1":gosub 800
30 ?"AT+CWJAP=";chr$(34);
40 ?"ココ ニ SSID ヲ キニュウ";
50 ?chr$(34);",";chr$(34);
60 ?"ココ ニ パスワード ヲ キニュウ";
70 ?chr$(34):wait 400:gosub 800
80 ?"AT+CIFSR":gosub 800
100 'Serv
110 ?"AT+CIPMUX=1":gosub 800
120 ?"AT+CIPSERVER=1,80":gosub 800
200 'LED
210 gosub 850:if K<>asc(":") goto 200
220 I=0:G="GET /L=":L=-1
230 gosub 850:if K<>PEEK(G+I) goto 200
240 I=I+1:if I<5 goto 230
250 gosub 850:if K<>PEEK(G+I) goto 300
260 I=I+1:if I<7 goto 250
270 gosub 850
280 if K=asc("0") let L,0 else let L,1
290 led L:beep
300 gosub 800
310 ?"AT+CIPSEND=0,46":gosub 800
320 ?"HTTP/1.1 200 OK"
330 ?"Content-Length: 6":?
340 if L>=0 ?"'LED=";L else ?"'BTN=";btn()
350 gosub 800:goto 200
800 'Rx
810 wait 30:uart 0,2
820 K=inkey():if K=0 goto 840
830 ?chr$(K);:goto 820
840 uart 3,2:return
850 'Rx0
860 K=inkey():if K=0 goto 860
870 uart 0,2:?chr$(K);
880 uart 3,2:return
その他①IchigoJam BASIC 1.2.0
最新のIchigoJam BASIC 1.2.0が、この実験にもたらした効用は以下のとおりです。
- 受信バッファの拡大:
128バイトにまで拡大されました。これにより、多少、大きなHTMLデータも取りこぼさずに受信することができるようになりました。とくにフロー制御が不要になったことは、大きな寄与です。 - 速度アップ:
一定の速度が無ければ、IchigoJam、ESPモジュールのどちらもが、受信したデータを保持できません。 - 文字列変数:
HTTPリクエストデータを文字列変数で保持するようにしました。見やすさや読みやすさを考慮してもプログラムを短く書けるようになりました。
不便なのは、asc(str$(G,1))が使えないことです。「$」のつく関数はPRINT文でしか使えない仕様のためです。まだまだ文字列は特殊な扱いなのでしょう。ここでは、代わりにPEEK(K)を使用しています。
その他②広告です
こういった実験を行っていると、オリジナルのマイコンボードに実装した「UARTの切り替えスイッチ」がとても重宝します。ESPモジュールと、USBシリアル変換IC(マイコンボードの裏面に実装)を、簡単に切り替えれるので、シリアル経由でプログラミングを行い、「RUN」後にスイッチを切り替えることが出来ます。SyntaxErrorの無限ループが出ても、すぐに断ち切れます。
この機会に、お買い求めいただければ嬉しいです。
IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)
by ボクにもわかるIchigoJam用マイコンボード