Arduino环境下两台ESP32通过wifi -tcp互相通讯如何判断对方发来的变量
时间: 2024-03-10 07:50:48 浏览: 142
在Arduino环境下,两个ESP32通过WiFi-TCP互相通讯,可以使用TCP/IP协议进行数据传输。可以使用WiFiServer和WiFiClient库来实现TCP/IP通信。在发送和接收数据时,可以将数据打包成特定的格式,以便在接收端解析和识别。
例如,可以使用JSON格式来打包数据。发送端将变量打包成JSON格式的字符串,并通过WiFi-TCP发送到接收端。接收端接收到数据后,可以将数据解析成JSON格式,并从中提取所需的变量值。
以下是一个使用JSON格式进行TCP/IP数据通信的示例代码:
发送端代码:
```
#include <WiFi.h>
#include <ArduinoJson.h>
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
const char* host = "192.168.1.2"; // 接收端的IP地址
const uint16_t port = 80; // 接收端的端口号
void setup() {
Serial.begin(9600);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
}
}
void loop() {
// 将变量打包成JSON格式的字符串
DynamicJsonDocument doc(1024);
doc["data"] = 123;
String jsonString;
serializeJson(doc, jsonString);
// 发送数据
WiFiClient client;
if (client.connect(host, port)) {
client.println("POST /data HTTP/1.1");
client.println("Host: " + String(host));
client.println("Content-Type: application/json");
client.println("Content-Length: " + String(jsonString.length()));
client.println();
client.println(jsonString);
}
delay(1000);
}
```
接收端代码:
```
#include <WiFi.h>
#include <ArduinoJson.h>
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
const uint16_t port = 80;
WiFiServer server(port);
void setup() {
Serial.begin(9600);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
}
server.begin();
}
void loop() {
WiFiClient client = server.available();
if (client) {
while (client.connected()) {
// 接收数据
String request = client.readStringUntil('\r');
if (request.indexOf("POST /data") != -1) {
String jsonString = client.readStringUntil('\r');
// 解析JSON格式的数据
DynamicJsonDocument doc(1024);
deserializeJson(doc, jsonString);
int data = doc["data"];
Serial.println(data);
}
client.stop();
}
}
delay(1000);
}
```
在这个例子中,发送端将变量"data"的值设为123,并将其打包成JSON格式的字符串。发送端通过WiFi-TCP将数据发送到接收端的IP地址和端口号,并使用POST请求发送数据。接收端接收到数据后,从JSON字符串中解析出"data"的值,并将其打印到串口上。
你可以根据自己的需求修改这个例子,打包和解析的数据可以是任何格式,只要发送端和接收端约定好即可。
阅读全文