我最近买了一个 Arduino UNO 来读取我的 Smart Meter 输出的数据。仪表使用串行通信,我想在我的笔记本电脑屏幕上看到输出的值。我想我需要使用 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 建议的所有三个选项,但没有一个具有预期的行为:
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
。