首页 文章

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

提问于
浏览
0

我正在执行一项任务,通过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循环的条件和我设置的延迟,有一些东西被发送,但输出转换为数字而不是字符串,随机数!

enter image description here

1 回答

  • 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 .

相关问题