ESP32客户端-服务器Wi-Fi通信
本指南将向您展示如何设置ESP32板作为服务端,PC作为客户端,通过HTTP通信,以通过Wi-Fi(无需路由器或互联网连接)交换数据。简而言之,您将学习如何使用HTTP请求将一个板的数据发送到访问该服务器的设备。ESP32板将充当服务器。
概述
如果一个ESP32板作为服务器,那么客户端可以通过在服务器IP地址后分别添加/temperature、/humidity等路径来请求温度、湿度等数据。使用的ESP32S3微处理器和BHT20传感器。
设置服务器ESP32
- 配置为接入点:首先,您需要将ESP32设置为接入点(AP),并定义SSID和密码。
- 处理路由:然后,处理ESP32将监听的路由。例如,当ESP32服务器收到/temperature URL的请求时,它会发送由readTemp()函数返回的温度值。
为了测试服务器是否工作正常,您可以在智能手机的Wi-Fi设置中连接到ESP32-Access-Point(密码为123456789),然后在浏览器中输入192.168.4.1/temperature、192.168.4.1/humidity等URL来查看相应的数据。
设置客户端
- 连接到服务器网络:客户端(PC或者手机)将作为Wi-Fi站连接到服务器ESP32的网络。
- 发送HTTP请求:客户端将向服务器发送HTTP GET请求以获取温度、湿度等数据。
代码实现
在服务器上传相应的代码,代码见下。服务器代码负责创建接入点、处理路由并发送数据,而客户端代码负责连接到服务器网络、发送HTTP请求并显示数据。
// Import required libraries
#include "WiFi.h"
#include "Grove_Temperature_And_Humidity_Sensor.h"
#include "ESPAsyncWebServer.h"
#include <Wire.h>#define DHTTYPE DHT20 // DHT 20
DHT dht(DHTTYPE); // DHT10 DHT20 don't need to define Pin// Set your access point network credentials
const char* ssid = "ESP32-Access-Point";
const char* password = "123456789";// Create AsyncWebServer object on port 80
AsyncWebServer server(80);
float temp_hum_val[2] = {0};
char buffer_hum_0[10];
char buffer_hum_1[10];
const char* str1;
const char* str2;void setup(){// Serial port for debugging purposesSerial.begin(115200);Serial.println();Wire.begin(); // 初始化I2C通信, D4, D5dht.begin();// Setting the ESP as an access pointSerial.print("Setting AP (Access Point)…");// Remove the password parameter, if you want the AP (Access Point) to be openWiFi.softAP(ssid, password);IPAddress IP = WiFi.softAPIP();Serial.print("AP IP address: ");Serial.println(IP);//路由在服务器启动时设置一次server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){request->send_P(200, "text/plain", str1);});server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){request->send_P(200, "text/plain", str2);});// Start serverserver.begin();
}void loop(){// 实时更改温湿度信息if (!dht.readTempAndHumidity(temp_hum_val)) {Serial.print("Humidity: ");Serial.print(temp_hum_val[0]);Serial.print(" %\t");Serial.print("Temperature: ");Serial.print(temp_hum_val[1]);Serial.println(" *C");// trans float to const char*sprintf(buffer_hum_0, "%.2f", temp_hum_val[0]);sprintf(buffer_hum_1, "%.2f", temp_hum_val[1]);str1 = buffer_hum_0;str2 = buffer_hum_1;} else {Serial.println("Failed to get temprature and humidity value.");}delay(1000);
}
测试
在ESP32板正确连接和供电的情况下,PC接入WIFI发送请求192.168.4.1/temperature、192.168.4.1/humidity,您应该能够在客户端显示屏上看到从服务器ESP32获取到的温度、湿度数据。
PC端:
手机端:
总结
通过本教程,您已经学会了如何使用ESP32和HTTP请求通过Wi-Fi在两个板之间发送数据,而无需连接到互联网。虽然本教程中演示的是发送BHT20传感器的读数,但您可以使用任何其他传感器或发送任何其他数据。
ESP32参考指南