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/

コメントを残す

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