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

时间:2016-11-09 11:05:49

标签: arduino esp8266

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

接线:

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

  • 将UNO的Tx(1)连接到分压器,将3.3 V连接到ESP。 pin(14)为Rx。

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

代码:

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

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

enter image description here

1 个答案:

答案 0 :(得分:1)

  
      
  • ESP的V +。到UNO的3v3。
  •   

标准Uno上的3v3引脚无法提供足够的电流,ESP8266无法正常工作。

Uno上的串行连接到Arduino引脚0和1,您将其用于输出到计算机上的串行监视器(以及上载草图)。您还使用引脚0和1使用软件序列与ESP8266进行通信。您不能同时使用相同的引脚用于这两个目的。您需要为软件序列使用不同的引脚,或者由于您目前没有对Serial执行任何有用的操作,您可以切换到使用Uno上的Serial与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