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/

IchigoSodaから複数の測定値を同時送信!β版ファームウェアを試してみた

β版ファームウェアを使って、IchigoSodaから複数の測定値を同時送信する実験を行ってみました。

IchigoSodaから複数値の同時送信

IchigoJamの開発者のブログに、β版のファームウェアで最大128バイトのデータをsakura.ioモジュールで送信する記事が掲載されていました。

(参考文献)福野泰介の一日一創
sakura.ioの4G格安IoTで拡充オープンデータ! 128byteまとめて送信、新IOT.OUTコマンド対応 IchigoJam 1.3β10
https://fukuno.jig.jp/2490

そのファームウェアを使って、送信データをRaspberry Piで受信する実験を行ってみました。

ダウンロードするもの

まずは、上記の記事で使用しているichigojam-1.3b10.zipをダウンロードし、IchigoSodaへ書き込みます。
https://ichigojam.github.io/ichigojam-1.3b10.zip

また、筆者が作成したRaspberry Pi側で動作する受信用ソフトウェアもダウンロードします(ダウンロード方法は後述)。
https://raw.githubusercontent.com/bokunimowakaru/iot/master/server/ws_logger_sakura.py

sakura.ioモジュールの設定などは下記をご覧ください。
https://bokunimo.net/ichigojam/sakura.html

なんと、ありがたいことに、IchigoJamの開発者のブログ「福野泰介の一日一創 」の当該ページに当方ウェブサイトのリンクを掲載していただきました。

動かしてみよう①複数の変数を送信する

それでは、早速、動かしてみましょう。まずは、Raspberry Pi側からです。起動するには、sakura.ioで取得したToken(トークン)が必要です。

《Raspberry Pi》
$ cd
$ git clone http://github.com/bokunimowakaru/iot
$ cd ~/iot/server
$ ./ws_logger_sakura.py sakura.ioのトークン

起動後に「CONNECTED」が表示されたら準備完了です。


こんどは、IchigoSoda(ファームウェアはIchigoJam 1.3β10 )から以下のコマンドを送ってみます。

《IchigoSoda》
[0]=1:[1]=-1:[2]=32767:[3]=-32768
IoT.out #800,8

これで、4つの変数の数値(8バイト)が、sakura.ioから LTE送信されます。


Raspberry Pi側を見てみると、以下のように表示されていると思います。下から2行目のvalueの部分に受信した数値が表示されました。

2019/05/19 22:47, {"module":"uXXXXXXXXXXX","type":"channels","datetime":"2019-05-19T13:47:02.71463767Z","payload":{"channels":[{"channel":1,"type":"b","value":"0100ffffff7f0080","datetime":"2019-05-19T13:47:02.713638539Z"}]}}
from = uXXXXXXXXXXX
datetime = 2019-05-19T13:47:02.713638539Z
channel = 1
type = Binary
value = [1, -1, 32767, -32768]
Message = yyy€

動かしてみよう②少し長め、文字列「Message from IchigoSoda!」の送信

今度は文字列です。福野さんのブログと同じ文字列を送信するために、IchigoSodaで「IoT.out “Message from IchigoSoda!”,24」と入力すると、Raspberry Pi側(下図)の最下行に同じメッセージが表示されました。

2019/05/19 22:44, {"module":"uXXXXXXXXXXX","type":"channels","datetime":"2019-05-19T13:44:13.121625999Z","payload":{"channels":[{"channel":1,"type":"b","value":"4d65737361676520","datetime":"2019-05-19T13:44:13.120626868Z"},{"channel":1,"type":"b","value":"66726f6d20496368","datetime":"2019-05-19T13:44:13.120626868Z"},{"channel":1,"type":"b","value":"69676f536f646121","datetime":"2019-05-19T13:44:13.121626868Z"}]}}
from = uXXXXXXXXXXX
datetime = 2019-05-19T13:44:13.120626868Z
channel = 1
type = Binary
value = [25933, 29555, 26465, 8293]
datetime = 2019-05-19T13:44:13.120626868Z
channel = 1
type = Binary
value = [29286, 28015, 18720, 26723]
datetime = 2019-05-19T13:44:13.121626868Z
channel = 1
type = Binary
value = [26473, 21359, 25711, 8545]
Message = Message from IchigoSoda!

動かしてみよう③いよいよ本命。変数64値、128バイトを送信

最大128バイト、変数[0]~[63]を送信するには、「IoT.out #800,128」と入力します。
datetime、channel、type、valueが16回、表示され、全64値を受信することが出来ました。
(同じような結果画面につき、valueのみを抽出)

《IchigoSoda》
for I=0 to 63:[I]=i:next
IoT.out #800,128

《Raspberry Pi》
value = [0, 1, 2, 3]
value = [4, 5, 6, 7]
value = [8, 9, 10, 11]
value = [12, 13, 14, 15]
value = [16, 17, 18, 19]
value = [20, 21, 22, 23]
value = [24, 25, 26, 27]
value = [28, 29, 30, 31]
value = [32, 33, 34, 35]
value = [36, 37, 38, 39]
value = [40, 41, 42, 43]
value = [44, 45, 46, 47]
value = [48, 49, 50, 51]
value = [52, 53, 54, 55]
value = [56, 57, 58, 59]
value = [60, 61, 62, 63]
Message = 123456789:;<=>?

受信側プログラム(抜粋)

以下は、今回、作成したRaspberry Pi用の受信側のPythonブログラムの抜粋です。データタイプ(data_type)が’i’なら整数、’b’ならバイナリとして処理します。
複数の変数は’b’のバイナリとして送られてくるので、2バイトごとに数値変数valへ代入し、配列変数data_valueへ蓄積します。

data_text=''
for data in res_payload_dict:
data_type = data['type']
data_ch = data['channel']
data_time = data['datetime']
data_type_s= 'Unknown'
if data_type.lower() == 'i':
data_type_s= 'Integer'
data_value = data['value']
if data_type == 'b':
data_type_s= 'Binary'
data_str = data['value']
i=0
data_value=[]
while i < len(data_str):
if i % 4 == 0:
val = int(data_str[i+2:i+4] + data_str[i:i+2],16)
if val >= 32768:
val -= 65536
data_value.append(val)
c = chr(int(data_str[i:i+2],16))
if ord(c) >= 16 and ord(c) < 256:
data_text += c
i += 2
print('datetime =', data_time)
print('channel =', data_ch)
print('type =', data_type_s)
print('value =', data_value)
print('Message =', data_text)

100回目の投稿

今回、IchigoJamに関連したブログの投稿記事数が、100記事に達しました。
このところ、Yahoo!ジオシティーズのサービス終了とYahoo!ブログのサービス終了予定にともない、引っ越し作業に時間がとられていました(実は、まだ古いリンクが残っている)。
本来の記事を書く作業も、ぼちぼちと進めてゆこうと思います。
本日、下記のIchigoJamに関連したページの更新を行いましたので、お時間がありましたら、お立ち寄りください。

IchigoSoda / sakura.io の接続方法
https://bokunimo.net/ichigojam/sakura.html

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