最近、スマート メーターから出力されたデータを読み取るために Arduino UNO を購入しました。メーターはシリアル通信を使用しており、ラップトップの画面に出力される値を確認したいと考えています。SoftwareSerial ライブラリを使用して着信データを読み取り、そのデータをハードウェア シリアルと Arduino IDE のシリアル モニターを使用して画面に出力する必要があると考えました。Arduino での (ソフトウェア) シリアル通信に慣れるために、SoftwareSerial ライブラリのドキュメントを確認しました。問題は、最も基本的な例を機能させることができず、かなり長い間これに固執していることです。サンプル コードは以下のとおりです。例はここにあります。
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(57600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(4800);
mySerial.println("Hello, world?");
}
void loop() { // run over and over
if (mySerial.available()) {
Serial.write(mySerial.read());
}
if (Serial.available()) {
mySerial.write(Serial.read());
}
}
私が理解している限りでは、次のことが起こるはずです: - シリアル モニタ ウィンドウにテキストを入力します。-Serial.read()
このデータを読み取り、ソフトウェア シリアルに書き込みます。- ソフトウェア シリアルはこのデータを読み取り、シリアルに書き戻します。- 書いたものが画面に表示されます。
しかし、私が何をしようとしても、何も起こりません。私が従おうとしたものの中で: - ソフトウェアとハードウェアの両方のシリアルのボーレートを変更します (たとえば 9600)。- 別の SoftwareSerial ライブラリ (AltSoftSerial) を試しました。- SoftwareSerial の異なる RX および TX ピンを試しました。- の代わりにSerial.write(mySerial.read());
、char
最初に結果を格納します。
私はおそらく明らかな何かを見逃しています。これに光を当てることができる人、またはスマートメーターからデータを読み取る別の方法を提供できる人に感謝します.
編集
例では「この例には回路がありません」と指定されていたため、配線はありませんでした。@slash-dev によって提案された 3 つのオプションをすべて試しましたが、期待どおりの動作をするものはありませんでした。
SoftwareSerial
ピン 1 をピン 10 に、ピン 0 をピン 11 に接続するワイヤを使用します。奇妙な文字が出力されます。
Goodnight moon!
Ùniÿhtÿmoÿn!ÿ
nihtmoÿttt
AltSoftSerial
1-8 と 0-9 を接続するワイヤー付き。最初に印刷Goodnight moon!
し、次に印刷を続けますÔ당¥�¡Ñ�moon!
。
NeoSWSerial
1-10 と 0-11 を接続するワイヤー付き。と同じですAltSoftSerial
が、印刷を続けますÔë‹–+ë¡Ñ�j½½¹…j
。