【问题标题】:Software serial between Arduino UNO and ESP8266 HUZZAH breakoutArduino UNO 和 ESP8266 HUZZAH 突破之间的软件序列
【发布时间】:2016-11-09 11:05:49
【问题描述】:

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

接线:

  • 将 UNO 的 Rx (0) 连接到 ESP 中的引脚 (12)。作为Tx

  • 将 UNO 的 Tx (1) 连接到分压器,以将 3.3 v 连接到 ESP。引脚 (14) 作为 Rx。

  • ESP 接地。到 UNO 的地面。
  • ESP 的 V+。到 UNO 的 3v3。

代码:

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

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

【问题讨论】:

  • 我使用的软件序列号:github.com/plerup/espsoftwareserial
  • 串口监视器输出是来自 Uno 还是 ESP8266?您应该编辑您的帖子以在 stackoverflow 上包含您的草图。
  • 来自 ESP8266。最近我认为这个过程会有一个代码,没有两个单独的代码。我的主要问题是如何使用 ESP8266 作为 arduino UNO 的模块?!
  • "最近我认为这个过程会有一个代码,没有两个单独的代码" 这是什么意思。您发布了两个“代码”的链接,一个显然是 ESP8266,一个是 Uno,现在您试图声称只有一个?

标签: arduino esp8266


【解决方案1】:
  • ESP 的 V+。到 UNO 的 3v3。

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

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

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

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

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

但它肯定行不通。

行:

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

相当于:

char x = 16;

也许您打算使用 char 数组:

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 );

我建议您花时间阅读documentation for the Arduino SoftwareSerial library。同样的信息也应该适用于 ESP8266 上的ESP8266 SoftwareSerial library you're using

【讨论】:

    猜你喜欢
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多