arduino uno r3 与esp01s互传数据的代码
时间: 2024-05-01 13:19:06 浏览: 164
arduino+esp01s+onenet+edp方式.rar
以下是 Arduino Uno R3 与 ESP01S 互传数据的示例代码:
Arduino Uno R3 代码:
```
#include <SoftwareSerial.h>
SoftwareSerial espSerial(2, 3); // 将软串口实例化为espSerial,分别连接到Arduino的2和3引脚
String message = ""; // 存储从ESP-01S接收到的消息
void setup() {
Serial.begin(9600);
espSerial.begin(9600); // 初始化ESP-01S串口通信
espSerial.println("AT+RST"); // 重置ESP-01S
delay(1000);
espSerial.println("AT+CWMODE=1"); // 设置ESP-01S为STA模式
delay(1000);
espSerial.println("AT+CWJAP=\"your_SSID\",\"your_PASSWORD\""); // 连接到Wi-Fi网络
delay(1000);
}
void loop() {
while (espSerial.available()) { // 当espSerial有可用数据时
char c = espSerial.read(); // 从espSerial读取一个字符
message += c; // 将读取的字符添加到message字符串中
if (c == '\n') { // 当读取到换行符时
Serial.println(message); // 将message字符串打印到串口监视器
message = ""; // 清空message字符串
}
}
espSerial.println("AT+CIPMUX=1"); // 开启多路连接模式
delay(1000);
espSerial.println("AT+CIPSERVER=1,80"); // 开启HTTP服务器
delay(1000);
if (Serial.available()) { // 当串口监视器有可用数据时
String data = Serial.readString(); // 从串口监视器读取字符串
espSerial.print("AT+CIPSEND=0,"); // 设置发送数据的连接ID和数据长度
espSerial.println(data.length());
delay(100);
espSerial.println(data); // 发送数据
}
delay(1000);
}
```
ESP-01S 代码:
```
#define ledPin 2 // 将GPIO2引脚连接到LED
#include <SoftwareSerial.h>
SoftwareSerial arduinoSerial(2, 3); // 将软串口实例化为arduinoSerial,分别连接到ESP-01S的TX和RX引脚
String message = ""; // 存储从Arduino接收到的消息
void setup() {
pinMode(ledPin, OUTPUT); // 将GPIO2引脚设为输出模式
digitalWrite(ledPin, LOW); // 关闭LED
Serial.begin(9600);
arduinoSerial.begin(9600); // 初始化Arduino串口通信
arduinoSerial.println("AT+CWMODE=2"); // 设置ESP-01S为AP模式
delay(1000);
arduinoSerial.println("AT+CIPMUX=1"); // 开启多路连接模式
delay(1000);
arduinoSerial.println("AT+CIPSERVER=1,80"); // 开启HTTP服务器
delay(1000);
}
void loop() {
while (arduinoSerial.available()) { // 当arduinoSerial有可用数据时
char c = arduinoSerial.read(); // 从arduinoSerial读取一个字符
message += c; // 将读取的字符添加到message字符串中
if (c == '\n') { // 当读取到换行符时
Serial.println(message); // 将message字符串打印到串口监视器
message = ""; // 清空message字符串
}
}
if (Serial.available()) { // 当串口监视器有可用数据时
String data = Serial.readString(); // 从串口监视器读取字符串
arduinoSerial.print("AT+CIPSEND=0,"); // 设置发送数据的连接ID和数据长度
arduinoSerial.println(data.length());
delay(100);
arduinoSerial.println(data); // 发送数据
}
if (message.indexOf("LED=ON") >= 0) { // 当收到“LED=ON”时
digitalWrite(ledPin, HIGH); // 打开LED
arduinoSerial.println("LED is ON"); // 发送回复消息
}
if (message.indexOf("LED=OFF") >= 0) { // 当收到“LED=OFF”时
digitalWrite(ledPin, LOW); // 关闭LED
arduinoSerial.println("LED is OFF"); // 发送回复消息
}
delay(1000);
}
```
在上述代码中,Arduino Uno R3 通过 SoftwareSerial 库模拟了一个软串口,将其连接到 ESP-01S 的 TX 和 RX 引脚上,并通过与 ESP-01S 通信,实现了互传数据的功能。同时,ESP-01S 也通过 SoftwareSerial 库模拟了一个软串口,将其连接到 Arduino Uno R3 的 TX 和 RX 引脚上,通过与 Arduino Uno R3 通信,实现了互传数据的功能。在这个示例代码中,Arduino Uno R3 监听串口监视器的输入,而 ESP-01S 监听 Arduino Uno R3 的输入。当 Arduino Uno R3 收到串口监视器的输入时,它将该数据发送到 ESP-01S;当 ESP-01S 收到 Arduino Uno R3 的输入时,它将该数据发送回 Arduino Uno R3。同时,当 ESP-01S 收到“LED=ON”时,它将打开 GPIO2 引脚上的 LED;当收到“LED=OFF”时,它将关闭 GPIO2 引脚上的 LED,并发送回复消息。
阅读全文