実現したいこと
- Arduino Nano Everyと、ZIGBEE無線モジュールを使って、下記のような構成での状態監視を実現したいです。
Arduino Nano Every
↓(シリアル通信)
ZIGBEE無線子機
↓
ZIGBEE無線親機
↓
PC(モニタリング用)
質問の概要
Arduino Nano Every → ZIGBEE無線子機 のシリアル通信にて、
初回の通信のみ、データの一部が文字化けしてしまいます。
これを、初回も文字化けせずに送信できるようにしたいです。
(例)String型の"abcdefg"を送ると、初回のみ"X宴defg"となってしまう
なお、全く同じプログラムを、Arduinoファミリーである、
Arduino NANO、Arduino MEGA、Arduino UNOに書き込むと、
初回の通信でも文字化けは起こらず、正しく通信できるため、解決策がわからず、悩んでいます。
該当のソースコード
#include <SoftwareSerial.h> // ソフトウェアシリアルのライブラリ SoftwareSerial softwareSerialForZIGBEE(4,5); // ZIGBEE用に、IO4をRX, IO5をTXとして割り当て void setup() { } void loop() { String str = "abcdefg"; softwareSerialForZIGBEE.begin(38400); // ソフトウェアシリアル開始 softwareSerialForZIGBEE.println(str + str); softwareSerialForZIGBEE.end(); // ソフトウェアシリアル終了 delay(1000); }
モニタリング用PCで表示されるもの
X宴defgabcdefg abcdefgabcdefg abcdefgabcdefg ・ ・ ・ (Nano Everyをリセット) X宴defgabcdefg abcdefgabcdefg abcdefgabcdefg ・ ・ ・
初心者なりの考察
ソフトウェアシリアルによる、無線子機への書き込みは、
ソースコードの通り、文字列strを、「str+str」という形式としております。
同じ文字列strを使っているにも関わらず、初回roopの、前半のstrだけで、文字化けが起こっています。
また、roop毎に、ソフトウェアシリアルのbeginとendを入れていますが、
初回のroop以降は文字化けしません。
これらのことから、Nano Everyを起動した際、
ソフトウェアシリアルのバッファーに、既に余分なデータが入っており、
それが初回通信にて送信されてしまうのではないかと予想しています。
気になっていること
質問の概要の項目に記載しましたように、手元にあるArduinoファミリーでは、
Nano Everyのみで発生します。
また、Nano Everyにプログラムを書き込んだときのみ、
「avrdude: jtagmkII_initialize(): Cannot locate "flash" and "boot" memories in description」
という警告文が出ます。
Arduinoの公式サポートサイトには、この警告文について、
コンパイルと書き込みが正常に成功していれば、無視しても問題ないという旨の記載がされておりますが、
このエラーが出ないArduinoファミリーでは、通信に不具合が発生しないため、
気になっています。
https://support.arduino.cc/hc/en-us/articles/4405239282578-avrdude-jtagmkII-initialize-Cannot-locate-flash-and-boot-memories-in-description
補足情報
・PC側ではTera Termを使い、ボーレートを38400に設定
・使用しているArduino Nano Everyは、正規品かつ新品
・ZIGBEE無線機は、MONO WIRELESS社の製品を使用

回答1件
あなたの回答
tips
プレビュー