Arduino UNO与ESP8266 NODE MCU进行串口通信,UNO收集的传感器数据发送到MCU
因为NodeMCU的模拟接口只有一个,所以使用多个传感器时没引脚可以接,这个问题困扰了我几天了,之前看别人说可以利用MEGA 2560或UNO板连接NODEMCU一起用,于是开始研究,试了好几天,一直不成功,各种各样的问题,今天终于把这个问题解决了,虽然对于大神门来说这很容易,但对于像我这样的新手来说,真的不容易,下面把我的经验介绍给大家,希望能帮助到像我一样的新手。
一、硬件准备:
1、Arduino UNO板一块
2、MQ_6传感器一个(其他传感器也行)
3、ESP8266 NODEMCU板一块
4、电源模块一个
5、杜邦线若干条
二、硬件连线
—————————
MQ_6 UNO
VCC +5V
GND GND
A0 A1
—————————
UNO NODE MCU
RX D6
TX D5
—————————-
三、代码部分
1、UNO端代码:先把UNO板连接电脑编译上传代码到UNO板子里。
int MQ_6;
void setup() {
Serial.begin(9600);
pinMode(A1,INPUT);
}
void loop() {
char s[200];
MQ_6 = analogRead(A1);
sprintf(s,"{\"years\":%d}",MQ_6); //每隔1s发送一次字符数组s
Serial.println(s);
delay(1000);
}
2、NODEMCU端代码:再把电脑连接NODEMCU板,译上传代码到NODEMCU板子里。
SoftwareSerial uart1(14,12);//RX=d5,TX=d6
String UART_String="";
int MQ_6;
void setup() {
Serial.begin(115200);
uart1.listen();
uart1.begin(9600);
}
void loop() {
if(uart1.available()>0)
{
if(uart1.peek()!='\n')//在收到换行符前软串口接受数据并链接为字符串
{
UART_String+=(char)uart1.read();
}
else
{
uart1.read();
const size_t capacity = JSON_OBJECT_SIZE(2) + 30;
DynamicJsonDocument doc(capacity);
deserializeJson(doc, UART_String);
MQ_6 = doc["years"].as<int>();
Serial.print("UART_String = ");Serial.println(UART_String);
Serial.print("years = ");Serial.println(MQ_6);
UART_String="";
while (Serial.read() >= 0) {} //清除串口缓存
}
}
}
3、运行效果图:
UNO板硬串口连接NODE MCU板软串口,把UNO板接收到的MQ_6传感器的数据通过JSON格式传到MCU板,然后再解析出相应数据