「LoRa 無線モジュール LRA1 を動作確認」
https://qiita.com/nanbuwks/items/c1f8f5f2f71748f16715
では、以下のようにして通信をしていまいた。
RECV -1
待受状態にします。
通信してみる
送信機側で以下のようにタイプしてエンターします。
>SEND "HOGEHOGE"
とすると、受信機側に以下のように表示されました。
@-26,5,HOGEHOGE
「@RSSI, 送信側 ID, 受信 Data」の形式で表示されます。
受信機側には RaspberryPi の GPIO 上の UART0 信号線をつないでいます。
LRA1 ピン番号 | LRA1 GPIO | Raspberry Pi ピン番号 | Raspberry Pi GPIO |
---|---|---|---|
2 | PA05 UART RX | 8 | UART0 TX |
3 | PA04 UART TX | 10 | UART0 RX |
この待受状態にて、Break キャラクタを入力すると、
Break
OK
>
という表示がなされてコマンド入力待ちに戻ります。
しかしながら Break キャラクタ/信号を入力しない限り、受信動作を継続するはずです。
問題
しかしながら、数時間〜数十時間通信していると、受信機側で
>
という表示になって待受が止まるという現象が発生することがありました。
はてな?
環境
- i2-ele LRA1 Ver 1.08.d+
対策を考える
「LoRa 無線モジュール LRA1 を動作確認」
https://qiita.com/nanbuwks/items/c1f8f5f2f71748f16715
では、
電池駆動でRXのノイズ入力を抑制する
において
RXD(PA05)がハイインピーダンスなので、ばたついてCtrl+C入力とみなされプログラムが停止したりします。
ということがありました。しかしながら今回は RaspberryPi に接続しているので Ctrl+C などではないはず?
通信内容の文字化け
さて、LRA1 の子機からの通信電文は以下のような内容を送っています。
7 210 400 10225 491 13 3704 70b3d559e01d25a3\r\n
受診時には、RSSI と送信元ID を付加して、
@-77,8,7 210 400 10225 491 13 3704 70b3d559e01d25a3\r\n
というようになっています。
しかしながら時々、以下のように文字化けして受信することがあります。
\xf8\xd2W"wA\xd1\x04Q\x9aGd:]g`\xbaG`\xba\x1dWe:\x1d\xf7\xe4z\xa7d\xba\xa7\xe4:]g\xe8\xf9\x0e\xff\xe8\x02U:VQ\xd1\x05W\x8bG\xe4:]\xc7\xe0\x1d\xc7\xe09\x07e9w\xe0\x1d\x97\xe5\xb4\x9dGx\xba\x9dCd\xbe\x9dn\xff@-76,8,7 210 401 10226 491 13 3706 70b3d559e01d25a3\r\n
そして、先の待受が止まるという現象は、文字化けが多い時によく起こっている気がします。
推測する
文字化けしていても、待受が止まるということは無いはずなのですが、ちょっと内部的になにか影響している可能性があります。
さて、
Break キャラクタ/信号を入力しない限り、受信動作を継続するはずです。
と書きましたが、通常は Break キャラクタのみ反応します。Break キャラクタは内部 BRKCH によって決められ、通常は0x03(Ctrl+C) となっています。そして BRKCH が 0 に設定している場合は Break 信号で Break されます。
ところがこれについてはバグがあったらしく、最近のアップデートでの修正がアナウンスされていました。
①アップデート種類:LRA1ファームウェア
■変更内容
1.13f 2022/10/25*
・BRKCH変数が0以外でもBREAK信号が有効だったバグを修正し、
マニュアルどおりの動作にしました。(BRKCH=0のみBREAK信号が有効)
現在使っているのは Ver 1.08.d+ だったので、関係するかな?
ファームウェアのアップデート
2022/12/15 に公開された、Ver 1.15a アップデートしてみたました。
アップデートに伴い、挙動が変化しました。
親機側で変なデータが来たら RECV -1 を再送するようなプログラムにしています。それが Ver 1.08d+ では予期した挙動をせず、RECV -1 を受け付けていないような挙動をしていました。
それがちゃんと RECV -1 を受けるようになっているみたいです。
ひとまずこれで動作テストしてみます(結果どうなったかは折を見て追記します)。