ESP32服务器和PC客户端的Wi-Fi通信

ESP32客户端-服务器Wi-Fi通信

本指南将向您展示如何设置ESP32板作为服务端,PC作为客户端,通过HTTP通信,以通过Wi-Fi(无需路由器或互联网连接)交换数据。简而言之,您将学习如何使用HTTP请求将一个板的数据发送到访问该服务器的设备。ESP32板将充当服务器。

概述

如果一个ESP32板作为服务器,那么客户端可以通过在服务器IP地址后分别添加/temperature、/humidity等路径来请求温度、湿度等数据。使用的ESP32S3微处理器和BHT20传感器。

设置服务器ESP32

  1. 配置为接入点:首先,您需要将ESP32设置为接入点(AP),并定义SSID和密码。
  2. 处理路由:然后,处理ESP32将监听的路由。例如,当ESP32服务器收到/temperature URL的请求时,它会发送由readTemp()函数返回的温度值。

为了测试服务器是否工作正常,您可以在智能手机的Wi-Fi设置中连接到ESP32-Access-Point(密码为123456789),然后在浏览器中输入192.168.4.1/temperature、192.168.4.1/humidity等URL来查看相应的数据。

设置客户端

  1. 连接到服务器网络:客户端(PC或者手机)将作为Wi-Fi站连接到服务器ESP32的网络。
  2. 发送HTTP请求:客户端将向服务器发送HTTP GET请求以获取温度、湿度等数据。

代码实现

在服务器上传相应的代码,代码见下。服务器代码负责创建接入点、处理路由并发送数据,而客户端代码负责连接到服务器网络、发送HTTP请求并显示数据。

c 复制代码
// 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 purposes
  Serial.begin(115200);
  Serial.println();
  Wire.begin(); // 初始化I2C通信, D4, D5
  dht.begin();
  // Setting the ESP as an access point
  Serial.print("Setting AP (Access Point)...");

  // Remove the password parameter, if you want the AP (Access Point) to be open
  WiFi.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 server
  server.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参考指南

相关推荐
大阳1238 小时前
51单片机4(温度传感器DS18B20)
开发语言·单片机·嵌入式硬件·算法·51单片机
应用市场10 小时前
深入理解STM32运行原理:从上电到主程序执行的完整过程
stm32·单片机·嵌入式硬件
空管电小二10 小时前
【开关电源篇】整流及其滤波电路的工作原理和设计指南-超简单解读
经验分享·单片机·嵌入式硬件·社交电子·学习方法
逼子格11 小时前
Altium Designer(AD)原理图更新PCB后所有器件变绿解决方案
单片机·嵌入式硬件·硬件工程·问题解决·ad·pcb·altium designer
wei-dong-1837975400812 小时前
嵌入式硬件工程师的每日提问
嵌入式硬件
文火冰糖的硅基工坊13 小时前
[硬件电路-180]:集成运放,在同向放大和反向放大电路中,失调电压与信号一起被等比例放大;但在跨阻运放中,失调电压不会与电流信号等比例放大。
嵌入式硬件·系统架构·电路·跨学科融合
三佛科技-1341638421213 小时前
迷你取暖器MCU方案,迷你暖风机方案分析
单片机·嵌入式硬件·智能家居·pcb工艺
国科安芯13 小时前
前沿探索:RISC-V 架构 MCU 在航天级辐射环境下的可靠性测试
网络·单片机·嵌入式硬件·fpga开发·硬件架构·risc-v
小莞尔14 小时前
【51单片机】【protues仿真】基于51单片机多功能电子秤系统
单片机·嵌入式硬件
范纹杉想快点毕业14 小时前
请创建一个视觉精美、交互流畅的进阶版贪吃蛇游戏
数据库·嵌入式硬件·算法·mongodb·游戏·fpga开发·交互