我正在执行一项任务,通过WIFI将传感器数据从esp发送到PC应用程序以进行可视化。除了通过软件序列将传感器数据从UNO发送到ESP之外,该项目的所有部分都已完成。
接线:
将UNO的Rx(0)连接到ESP中的引脚(12)。如Tx
将UNO的Tx(1)连接到分压器,将3.3 V连接到ESP。 pin(14)为Rx。
代码:
Attached两个代码来测试此过程是否有效。一个在ESP上,另一个在arduino上
根据下面的屏幕显示我发现构建后,由于while循环的条件和我设置的延迟,但是输出被转换为数字而不是字符串,随机数!
答案 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。