2020/09/11

Ichigojam x sakura.io(パリティ値の演算式)

 Ichigojamから、sakura.ioモジュールを使って、sakura.ioへ送信電文を作る場合、電文の最後にパリティ値が必要となる。

たとえば、

要素種別引数データ長引数データ1引数データ2パリティ値
chtypeD0D1D2D3D4D5D6D7chtypeD0D1D2D3D4D5D6D7
#21201#69TT>>80000002#69HH>>8000000P

の場合、パリティ値は、要素種別~引数データ2D7までの値の全ての排他的論理和となる。

この時のパリティ値の演算式は次のとおり。ちなみにデータが[0]は、省略できるため、

P=(H>>8)^(T>>8)^H^T^#21^20^1^#69^2^#69

となる。

ここで気を付けたいのは、右シフト演算を先に計算させるように()カッコを用いていること。C言語などの演算式は、右シフト演算は、排他的論理和より優先順位が上位なのだが、Ichigojamは、シフト演算と論理演算が同位らしく、()がないと、左から順に演算されてしまって、正しい値が計算できなくなる。(わたしはこれでずいぶんハマった…)

Ichigojam x sakura.io(複数値の通信電文の作り方)

 Ichigojamとsakura.ioモジュールを使って、複数の値をsakura.ioへ送信したい場合、チャンネル番号(ch)ごとに、値(D(value))を送ることが出来る。

コマンドリファレンス」P28に記載があるが、引数データ(N)ごとにチャンネル番号を指定して、値を設定してあげるとこで対応できる。

たとえば、

{
  "channels": [
    {
      "channel": 1,
      "type": "i",
      "value": 249,
      "datetime": "2020-09-11T05:12:13.061983501Z"
    },
    {
      "channel": 2,
      "type": "i",
      "value": 729,
      "datetime": "2020-09-11T05:12:13.061983501Z"
    }
  ]
}

と、送信したい場合は、下記のような電文を作成する。

要素種別引数データ長引数データ1引数データ2パリティ値
chtypeD0D1D2D3D4D5D6D7chtypeD0D1D2D3D4D5D6D7
#21201#69TT>>80000002#69HH>>8000000P

引数データ長は、引数データ1(10byte)+引数データ2(10byte)なので、[20]となる。

チャンネル番号の指定自体は、#00(0)~#7F(127)まで可能みたいだが、データは最大16個まで送信できるようなので、まあ、普通はch(0)~ch(15)かな。

ちなみにこの場合のプログラムは、

200 'LTE

210 P=(H>>8)^(T>>8)^H^T^#21^20^1^#69^2^#69

220 POKE #800,#21,20,1,#69,T,T>>8,0,0,0,0,0,0,2,#69,H,H>>8,0,0,0,0,0,0,P

230 ?I2CR(79,#800,23,#830,1)

こんな感じ。 

Ichigojam x ブレイクアウトボード(SCO-BB-01) x sakura.ioモジュール(SCM-LTE-01)

 sakura.io側で通信を受ける際に、gpio形式(GPIOモード)する場合は、下図の赤丸のジャンパーピンをショートさせる。

逆に言うと、connection形式(json)にしたいときは、ジャンパーピンをショートさせない。

赤丸ジャンパーピンをショートさせない(connection)