- 参考代码:
- esp8266服务器端的代码:
- esp8266客户端的代码:
- 参考文章及错误:
- 我的修改代码:
//服务器 //载入所需的库 #includeesp8266客户端的代码:#include "ESPAsyncWebServer.h" // 设置接入点网络凭据 const char* ssid = "adan"; const char* password = "88888888"; // 在端口80上创建AsyncWebServer(异步服务器)对象 AsyncWebServer server(80); String readTemp() { return String(123); } String readHumi() { return String(321); } String readPres() { return String(123); } void setup() { //用于调试的串口 Serial.begin(115200); Serial.println(); // 设置ESP为接入点 Serial.print("Setting AP (Access Point)…"); // 如果您想要AP(接入点)打开,请删除密码参数 WiFi.softAP(ssid, password); IPAddress IP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(IP); //服务器打开 服务器地址 + 根号 + temperature ,并且是获取请求时,异步服务器创建返回指针,返回指针指向一个发送函数,发送信息回去 server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest * request) { request->send_P(200, "text/plain", readTemp().c_str()); Serial.println("/temperature" + readTemp()); }); server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest * request) { request->send_P(200, "text/plain", readHumi().c_str()); Serial.println("/humidity" + readHumi()); }); server.on("/pressure", HTTP_GET, [](AsyncWebServerRequest * request) { request->send_P(200, "text/plain", readPres().c_str()); Serial.println("/pressure" + readPres()); }); // 启动服务器 server.begin(); } void loop() {}
//客户端 #include#include #include #include ESP8266WiFiMulti WiFiMulti; const char* ssid = "adan"; const char* password = "88888888"; //您的IP地址或域名与URL路径 const char* serverNameTemp = "http://192.168.4.1/temperature"; const char* serverNameHumi = "http://192.168.4.1/humidity"; const char* serverNamePres = "http://192.168.4.1/pressure"; String temperature; String humidity; String pressure; unsigned long previousMillis = 0; const long interval = 5000; void setup() { Serial.begin(115200); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("Connected to WiFi"); WiFi.mode(WIFI_STA); } void loop() { unsigned long currentMillis = millis(); if(currentMillis - previousMillis >= interval) { //检查WiFi连接状态 if ((WiFiMulti.run() == WL_CONNECTED)) { temperature = httpGETRequest(serverNameTemp); humidity = httpGETRequest(serverNameHumi); pressure = httpGETRequest(serverNamePres); Serial.println("Temperature: " + temperature + " *C - Humidity: " + humidity + " % - Pressure: " + pressure + " hPa"); // 保存最后一个HTTP GET请求 previousMillis = currentMillis; } else { Serial.println("WiFi Disconnected"); } } } String httpGETRequest(const char* serverName) { WiFiClient client; HTTPClient http; //您的IP地址与路径或域名与URL路径 http.begin(client, serverName); //发送HTTP POST请求 int httpResponseCode = http.GET(); String payload = "--"; if (httpResponseCode>0) { Serial.print("HTTP Response code: "); Serial.println(httpResponseCode); payload = http.getString(); }else { Serial.print("Error code: "); Serial.println(httpResponseCode); } //免费资源 http.end(); return payload; }
实验效果:
参考文章及错误:偶尔得错误我没找到原因,有空再研究,或者有人找到告诉我一下
原先参考文章
参考了几篇文章,都有错误,后面在评论区找到了解决方法:
参看文章
在接入得设备输入:
WiFi.mode(WIFI_STA);我的修改代码:
我只是想用wifi进行板间通讯而已,所以越简单越好,后面可能会封装成一个库,但是前提是我c++大成。。。
搞了很久,还是没有解决数据接收延时得问题,可能是异步通讯的通病吧。。。。本来想加多一个数据位来做判断,但是这样子延时更大了,无线通信真是头疼。。
接收端:
//客户端 #include#include #include #include ESP8266WiFiMulti WiFiMulti; WiFiClient client; HTTPClient http; const char* ssid = "adan"; const char* password = "88888888"; //您的IP地址或域名与URL路径 const char* data = "http://192.168.4.1/data"; String shuju; String payload; unsigned long previousMillis = 0; //延时,因为程序可以都在中断运行,所以需要延时,这样子时间会更好 const long interval = 50; //五秒钟响应一次 void setup() { Serial.begin(115200); Serial.println(); pinMode(2,OUTPUT); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("Connected to WiFi"); WiFi.mode(WIFI_STA); } void loop() { //计时{} unsigned long currentMillis = millis(); // while (currentMillis - previousMillis >= interval); //检查WiFi连接状态 if ((WiFiMulti.run() == WL_CONNECTED)) { shuju = httpGETRequest(data); Serial.println("data:" + shuju); // 保存最后一个HTTP GET请求 previousMillis = currentMillis; //保存时间 unsigned long currentMillis = millis(); //用delay不行,因为是在中断中运行的 while(millis() - currentMillis <= 150) digitalWrite(2,0); currentMillis = millis(); while(millis() - currentMillis <= 150) digitalWrite(2,1); } else { //没连接让他重新连接 Serial.println("WiFi Disconnected"); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { unsigned long currentMillis = millis(); //用delay不行,因为是在中断中运行的 while(millis() - currentMillis <= 500) digitalWrite(2,0); currentMillis = millis(); while(millis() - currentMillis <= 500) digitalWrite(2,1); Serial.print("."); } Serial.println(""); Serial.println("Connected to WiFi"); } } String httpGETRequest(const char* serverName) { //您的IP地址与路径或域名与URL路径 http.begin(client, serverName); //发送HTTP POST请求 int httpResponseCode = http.GET(); int b=10; while(httpResponseCode !=1000 && b!=0) { http.begin(client, serverName); //发送HTTP POST请求 httpResponseCode = http.GET(); unsigned long currentMillis = millis(); //用delay不行,因为是在中断中运行的 while(millis() - currentMillis <= 15) digitalWrite(2,0); currentMillis = millis(); while(millis() - currentMillis <= 15) digitalWrite(2,1); b--; Serial.println(b); } unsigned long currentMillis = millis(); //用delay不行,因为是在中断中运行的 while(millis() - currentMillis <= 15) digitalWrite(2,0); currentMillis = millis(); while(millis() - currentMillis <= 15) digitalWrite(2,1); // payload= "--"; if (httpResponseCode > 0) { // Serial.print("HTTP Response code:"); // Serial.println(httpResponseCode); //响应速度或者错误代码之类的 ,修改send_P(1000,“”, data().c_str());1000可以调整 payload = http.getString(); } else { Serial.print("Error code: "); Serial.println(httpResponseCode); Serial.println(http.connected()); } //释放资源 //http.end(); return payload; }
发送端:
//服务器 //载入所需的库 #include#include "ESPAsyncWebServer.h" // 设置接入点网络凭据 const char* ssid = "adan"; const char* password = "88888888"; // 在端口80上创建AsyncWebServer(异步服务器)对象 AsyncWebServer server(80); long shuju; //做一个变量,名字为数据 String data() { return String(shuju); } void setup() { //用于调试的串口 Serial.begin(115200); Serial.println(); pinMode(2,OUTPUT); // 设置ESP为接入点 Serial.print("Setting AP (Access Point)…"); // 如果您想要AP(接入点)打开,请删除密码参数 WiFi.softAP(ssid, password); IPAddress IP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(IP); //服务器打开 服务器地址 + 根号 + temperature ,并且是获取请求时,异步服务器创建返回指针,返回指针指向一个发送函数,发送信息回去 server.on("/data", HTTP_GET, [](AsyncWebServerRequest * request) { shuju++; request->send_P(1000, "text/plain", data().c_str()); Serial.println("/data:" + data()); unsigned long currentMillis = millis(); //用delay不行,因为是在中断中运行的 while(millis() - currentMillis <= 15) digitalWrite(2,0); currentMillis = millis(); while(millis() - currentMillis <= 15) digitalWrite(2,1); }); // 启动服务器 server.begin(); } void loop() { }
这个代码能用是能用,但是多少带点问题,懒得改了…
做物联网参考我这个



