Arduino UNO 和 ESP8266 HUZZAH breakout 之间的软件序列

Software serial between Arduino UNO and ESP8266 HUZZAH breakout

我正在执行一项任务,通过 WIFI 将传感器数据从 esp 发送到 PC 应用程序以将其可视化。这个项目的所有部分都完成了,除了通过软件串行将传感器数据从 UNO 发送到 ESP 的部分。

接线:

代码:

Attached 两个代码来测试这个过程是否有效。一个在 ESP 上,另一个在 arduino

构建后我发现根据下面的屏幕显示,由于 while 循环的条件和我设置的延迟,正在发送一些东西但是输出被转换为数字而不是字符串,随机数!

  • V+ of ESP. to 3v3 of UNO.

标准 Uno 上的 3v3 引脚无法为 ESP8266 可靠工作提供足够的电流。

Uno 上的串行连接到 Arduino 引脚 0 和 1,您正在使用它们输出到计算机上的串行监视器(以及上传草图)。您还使用引脚 0 和 1 通过软件串行与 ESP8266 通信。您不能同时将相同的引脚用于这两个目的。您需要为您的软件序列号使用不同的引脚,或者,由于您目前没有对序列号做任何有用的事情,您可以切换到使用 Uno 上的序列号与 ESP8266 通信并删除软件序列号。

如果您打算继续在 Uno 上使用软件串行,那么您应该使用低于 115200 的波特率,因为 Arduino 软件串行库在该速度下不可靠。

我不知道你认为这段代码在做什么:

char x = "ahmad,54,54,45";
while ( ESPserial.available() ) {
ESPserial.write( x );

但肯定不行。

行:

char x = "ahmad,54,54,45";

相当于:

char x = 16;

也许您打算使用字符数组:

char x[] = "ahmad,54,54,45";

但是这与

不兼容
ESPserial.write( x );

因此您需要将其更改为:

ESPserial.print( x );

这将一次打印完整的字符串,或者您可以一次处理一个字符的数组:

ESPserial.write( x[i] );

行:

while ( ESPserial.available() ) {

检查是否有来自 ESP8266 的可用传入数据,但这永远不会是真的,因为您永远不会通过软件串行从 ESP8266 发送任何数据。如果它确实接收到任何数据,那么它将永久卡在 while 循环中,因为您永远不会读取接收到的数据。然后将数字 16 写入 ESP8266,而不是读取不存在的传入数据:

ESPserial.write( x );

我建议您花时间阅读有关 ESP8266 的 documentation for the Arduino SoftwareSerial library. The same information should also apply to the ESP8266 SoftwareSerial library you're using