BASICコマンドをLTE送信!PCやスマホからIchiogoSodaを遠隔制御

LTEモバイル通信機能を搭載したIchigoSodaへBASICコマンドを送る実験をしてみました。

PCやスマホから「LED 1」「BEEP」「?”こんにちわ”」といったIchigoJam BASICのコマンドを送信する(上図)と、IchigoSoda上で実行することが出来ます。※ただし8文字まで

β版IchigoJam BASICで8文字受信

ベータ版のIchigoJam BASIC 1.3.2 bata 11で、8文字までの文字列の受信に対応していただけたので、対応プログラムを作ってみました。

IchigoSoda用プログラム

以下にIchigoSoda側のプログラムを示します。sakura.ioモジュールがBASICコマンドを受信すると、キーバッファへBASICコマンドを取込み、IchigoSoda上で実行します。

new
 1 cls:?"SAKURA IoT RX
 2 ?"CC BY Wataru Kunino
 3 T=1:?" シュウキ=";T;" ビョウ
 9 M=#114E :'Ver. 1.3.2

 100 ?"== RX マチウケ ==
 110 ?".";:wait T*60

 200 '== RX ==
 210 poke M,0
 220 I=IoT.in()
 230 if peek(M)!=1 goto 110
 260 cls:?"Ch=";peek(M+2)
 270 if peek(M+3)=98 goto 300
 280 ? I
 290 goto 200

 300 '== String ==
 310 I=0
 320 C=peek(M+4+I)
 330 poke #1004+I,C
 340 I=I+1
 350 if C AND I<8 goto 320
 360 P="/goto 200/"
 370 poke P,10:poke P+9,10
 380 copy #1004+I,P,I+10
 390 poke #1003,I+10
 400 end
 999 ?"MJ GET bokunimowakaru.github.io/MJ/803.txt

行番号100番台は、1秒ごとに「.」を表示するだけです。何か他の処理をさせたいときのために確保しました。

行番号200番台は、sakura.ioからの受信の待ち受け部です。行番号220のIoT.inコマンドが、sakura.ioから受信データを取得します。文字列(バイナリ)の受信に成功したら、行番号300番台へgotoします。数値を受信した時は、行番号280で数値を表示します。

行番号300番台は、受信したバイナリデータをキーバッファへ取り込む部分です。行番号330で、キーバッファへ書き込みます。また、行番号360で「goto 200」の命令をキーバッファへ入れておきます。これで、プログラムを終了後、受信した命令を実行し、goto 200で再び、プログラムに戻ります。

キーバッファへの操作コマンドは、あまり自信がありません。誤っていたら、コメント欄などから教えてくださいますよう、お願いします。

WebSocket 確認ツール Message IoT からBASICコマンドを送信する

BASICコマンドの送信には「WebSocket 確認ツール Message IoT 」を使用しました。
冒頭の画面のように、Tokenを入力し、sakura.ioへの接続に成功したら、Module IDを入力し、Message欄へBASICコマンドを入力し、実行してください。

https://bokunimowakaru.github.io/IchigoJam/message_iot/index.html

以上で、8文字までのBASICコマンドをIchigoSodaへ送ることが出来ます。

ただし、コマンドに誤りがあるとSyntax Errorが発生し、プログラムが停止してしまいます。

試しに

on error goto 200

と、入れてみましたが、動きませんでした。

セキュリティに関するご注意
sakura.ioモジュールのtokenやモジュールIDが流出すると、攻撃者にIchigoSodaを乗っ取られる可能性が考えられます。また、攻撃などに要した通信料が課金されます。十分に注意して下さい。

by ボクにもわかるIchigoJam用マイコンボード
https://bokunimo.net/ichigojam/

「BASICコマンドをLTE送信!PCやスマホからIchiogoSodaを遠隔制御」への3件のフィードバック

  1. はじめまして。福井県鯖江市にあるHana道場の中村と申します。
    国野様の「IchigoJamのIoTコマンド×sakura.ioモジュールでAmbientへ送信」というブログを拝見いたしまして、非常に参考になりました。ありがとうございます。
    ここでは、IchigoSodaからIOT.OUTで数値をd1としてAmbientへ送信していると思いますが、d1に加えて2つ目のパラメータd2を1つのチャネルに送る手段を教えていただきたいです。
    現在河川の水位と雨量の2つの数値(d1とd2)を1つのチャネルに送り、棒グラフ化することを理想にしております。ご教示いただけると幸いです。

    1. 当方ブログを訪問していただき、ありがとうございます。
      複数値を送るには、バイナリデータに変換してsakura.ioに渡す必要があります。
      また、バイナリデータをNode-REDやRaspberry Pi上のプログラムでAbmientへ転送する際に、バイナリデータを数値に変換してから、各値をJSON形式でd1と、d2として渡す必要があります。
      手間がかかるのと教材として考えたときに、分かりやすいものでも無いです。
      より簡単には、8ビットの2値を16ピットの整数値として送信する方法も考えられます。これだと数値として送れます。
      他の方からも、似たようなご質問をいただいていますので、そのうちブログなどで紹介させていただこうと思います。

      あと、下記にバイナリの送信方法とRaspberry Piでの処理方法を記載しておりますので、合わせて参考にしていただければと思います。
      https://bokunimo.net/blog/ichigojam/491/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です