从ESP8266(NodeMCU)通过UART向Arduino发送数据

4
我想通过UART从我的ESP8266设备向Arduino Uno板发送数据。
ESP8266已经刷入了NodeMCU固件(构建版本的时间戳为:nodemcu-master-8-modules-2017-05-30-19-21-49-integer)。该固件仅使用以下模块进行构建:file, gpio, net, node, tmr, uart, websocket, wifi。ESP8266开发板本身是Adafruit Huzzah板。
ESP开发板通过我的笔记本电脑USB串行电缆供电。我正在使用 this one 这个,它为我提供5V以给我的板子供电,并且我知道我的Mac上的USB可以提供所需的500mA。
Arduino也通过我的电脑上的另一个USB端口供电。
ESP板和Arduino连接如下:
ESP8266
TX        RX    GND
|         |     |
|         |     |
10        11    |
RX        TX    GND
Arduino

Adafruit Huzzah板块声称:

TX引脚是模块的输出,为3.3V逻辑电平。RX引脚是模块的输入,兼容5V(该引脚上有电平转换器)。

因此这两者之间不需要电平转换器。

我在ESP8266板上运行的代码,名为init.lua

uart.setup(0,115200,8,0,1)

tmr.alarm(0, 5000, 0, function()
  uart.write(0, "A", 19)
end)

我在Arduino上运行的代码是:
#include <SoftwareSerial.h>

#define rxPin 10
#define txPin 11

MeetAndroid meetAndroid;
SoftwareSerial sSerial(rxPin, txPin);
uint8_t lastByte;
uint8_t serialBuffer[64];
int count = 0;
int onboardLed = 13;


void setup() {
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  Serial.begin(115200);
  sSerial.begin(115200);
  pinMode(onboardLed, OUTPUT);
  digitalWrite(onboardLed, HIGH);

}

void loop() {
  while (sSerial.available() > 0) {
    serialBuffer[count] = sSerial.read();
    count++;
  }
  for (int i = 0; i < count; i++) {
    Serial.println(serialBuffer[i]);
  }
}

当我重置我的ESP板时,在Arduino串行监视器上看到的是垃圾信息。
⸮⸮⸮⸮⸮⸮Z,⸮}⸮߿⸮ߏ⸮\⸮⸮LYLYLYLYL⸮L⸮L⸮L⸮L⸮L (((((⸮$⸮$⸮$⸮$⸮$⸮$⸮40⸮@⸮@⸮@⸮@⸮@⸮@⸮@⸮@⸮@⸮@⸮@⸮@ ((((⸮$:⸮&i(⸮⸮

稍有延迟后,它开始打印出一行又一行的垃圾文字。很明显,在某个地方存在不匹配的问题。

我已经查找了此事的先前问题,但我找到的唯一一个与我的用途最接近的问题仅简单声明应该阅读文档,这并没有什么帮助。

有人知道这里出了什么问题吗?


你好,我正在处理一个与你类似的项目。你找到解决方案了吗?我认为软件串口在115200波特率下无法正常工作? - Lorensius W. L. T
2个回答

1

您需要设置适当的波特率。您可以在串行监视器右下角设置波特率。

我更喜欢使用标准的调试波特率9600。


1
@catileptic 我唯一要补充的是你的波特率是115200,所以如果要使用9600,你需要在两个设备上都进行更改。 - nikhil patil
是的,我没有提到,抱歉。谢谢Nikhil! - x3l51

0

我相信这是两个不同的问题。 启动后的第一行垃圾信息实际上属于esp8266的固件,它的默认波特率是74880,如果你在该波特率下打开串口监视器,你会看到类似于这样的东西:

ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1384, room 16 
tail 8
chksum 0x2d
csum 0x2d

第二个问题与 softwareSerial 库有关。 根据 this(以及我的经验),最大可靠波特率似乎是约 28800,而您已经设置得太高了。 我建议降低波特率或切换到其他库,例如 AltSoftSerial

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接