如何在同一局域网内实现两台ESP32之间的数据传输?
同一局域网内两台ESP32的HTTP数据传输方案(无需AP模式)
核心思路
两台ESP32均连接到家庭现有路由器(同一局域网),其中作为HomeKit设备的ESP32开启HTTP服务器接收数据,另一台ESP32作为HTTP客户端主动发送传感器数据。
一、HomeKit ESP32(服务器端)代码片段
在你已有的HomeKit代码基础上,添加HTTP服务器逻辑即可:
#include <WiFi.h> #include <WebServer.h> // WiFi配置 const char* ssid = "你的WiFi名称"; const char* password = "你的WiFi密码"; WebServer server(80); // 监听80端口 // 处理传感器数据接收的接口 void handleSensorData() { // 接收温度参数 if (server.hasArg("temp")) { String temp = server.arg("temp"); // 此处可将数据同步到HomeKit设备逻辑(比如更新HomeKit温度传感器值) Serial.print("收到温度: "); Serial.println(temp); } // 接收湿度参数 if (server.hasArg("humid")) { String humid = server.arg("humid"); Serial.print("收到湿度: "); Serial.println(humid); } server.send(200, "text/plain", "数据接收成功"); } void setup() { Serial.begin(115200); // 连接WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nHomeKit设备IP: " + WiFi.localIP().toString()); // 注册HTTP路由 server.on("/sensor", HTTP_POST, handleSensorData); server.begin(); Serial.println("HTTP服务器已启动"); // 这里保留你原有的HomeKit初始化代码 // ... } void loop() { server.handleClient(); // 处理HTTP请求 // 这里保留你原有的HomeKit循环代码 // ... }
二、客户端ESP32(数据发送端)代码
#include <WiFi.h> #include <HTTPClient.h> // WiFi配置(与服务器端同一网络) const char* ssid = "你的WiFi名称"; const char* password = "你的WiFi密码"; // HomeKit设备的固定IP(建议在路由器后台绑定MAC到固定IP) const char* serverIP = "192.168.1.100"; const int serverPort = 80; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\n客户端已连接WiFi"); } void loop() { if (WiFi.status() == WL_CONNECTED) { HTTPClient http; // 构建请求链接(替换为实际传感器读数) String requestUrl = "http://" + String(serverIP) + ":" + String(serverPort) + "/sensor?temp=25.3&humid=58"; http.begin(requestUrl); // 发送GET请求(也可改用POST发送JSON格式数据) int httpCode = http.GET(); if (httpCode > 0) { Serial.print("服务器响应: "); Serial.println(http.getString()); } else { Serial.print("请求失败,错误码: "); Serial.println(httpCode); } http.end(); } delay(5000); // 每5秒发送一次数据 }
关键注意事项
- 给两台ESP32设置固定IP:可通过路由器后台绑定MAC地址到固定IP,或在代码中用
WiFi.config()设置静态IP,避免IP变化导致通信中断。 - 检查路由器设置:确保未开启AP隔离功能,否则同局域网设备无法互相通信。
- 复杂数据传输:若需发送多维度数据,可改用POST请求发送JSON格式内容,服务器端通过
server.arg("plain")获取并解析JSON。
内容的提问来源于stack exchange,提问作者Zhekich
相关产品推荐
相关产品推荐

