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

时间:2017-06-11 18:44:38

标签: arduino esp8266 nodemcu

我想通过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 (((((⸮$⸮$⸮$⸮$⸮$⸮$⸮4⸮0⸮@⸮@⸮@⸮@⸮@⸮@⸮@⸮@⸮@⸮@⸮@⸮@ ((((⸮$:⸮&i(⸮⸮

在短暂的延迟之后,它开始在这条初始线之后逐行打印出垃圾。我很清楚,在某个地方,有一个不匹配。

我已经找到了关于此问题的先前问题,但我能找到的唯一一个与我的使用最接近的问题仅仅是one ought to read the docs,这不是很有帮助。

有谁知道这里有什么不妥吗?

2 个答案:

答案 0 :(得分:1)

您必须设置正确的波特率。您可以在串行监视器的右下角设置波特率。

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

答案 1 :(得分: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 库。 根据{{​​3}}(和我自己的经验),最大可靠波特率似乎约为28800,您已将其设置为很高。 我建议降低波特率或切换到其他库,例如this