【发布时间】:2016-11-10 23:59:40
【问题描述】:
我最近买了一个 Arduino UNO 来读取我的 Smart Meter 输出的数据。仪表使用串行通信,我想在我的笔记本电脑屏幕上看到输出的值。我想我需要使用 SoftwareSerial 库来读取传入的数据,并使用 Arduino IDE 中的硬件串行和串行监视器在我的屏幕上打印该数据。为了熟悉 Arduino 上的(软件)串行通信,我查看了 SoftwareSerial 库的文档。问题是,我无法让最基本的例子起作用,而且我已经坚持了很长一段时间了。示例代码如下,示例can be found here
#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 引脚。
- 首先将结果存储在char 中,而不是Serial.write(mySerial.read());。
我可能遗漏了一些明显的东西。如果有人能对此有所了解或提供另一种方法让我从智能仪表中读取数据,我将不胜感激。
编辑
我没有接线,因为示例指定“此示例没有电路”。我尝试了@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。
【问题讨论】:
-
“智能电表”?哪一个?
-
火星382,手册可以是found here。我想收集有关能源使用的信息并将这些数据存储在我自己服务器上的数据库中。
-
您是否将 Arduino UNO 上的地线连接到智能电表的地线?如果您忘记了这一点,您可能会看到这种行为:)
-
@ErwinJanssen,在下面编辑
标签: arduino arduino-uno software-serial