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参考指南

相关推荐
单片机社区1 小时前
随笔十七、eth0单网卡绑定双ip的问题
网络·嵌入式硬件·网络协议·udp·智能路由器
LS_learner2 小时前
0.91英寸OLED显示屏一种具有小尺寸、高分辨率、低功耗特性的显示器件
嵌入式硬件
漫无目的行走的月亮2 小时前
51单片机开发:独立键盘实验
嵌入式硬件·51单片机
年轮不改8 小时前
STM32——KEY按键
stm32·单片机·嵌入式硬件
2401_843785239 小时前
STM32 中断系统
stm32·单片机·嵌入式硬件
Aughts9 小时前
TVS选型设计
单片机·嵌入式硬件
豆包公子10 小时前
9.中断系统、EXTI外部中断
单片机·嵌入式硬件
2401_8437852310 小时前
STM32 OLED屏配置
stm32·单片机·嵌入式硬件
热爱嵌入式的小许11 小时前
基于STM32的阿里云智能农业大棚
stm32·单片机·嵌入式硬件·阿里云智能农业大棚·32单片机项目·阿里云连接
charlie11451419111 小时前
嵌入式MCU面试笔记2
笔记·单片机·嵌入式硬件·面试·串口通信·uart