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

相关推荐
最后一个bug2 小时前
PCI与PCIe接口的通信架构是主从模式吗?
linux·开发语言·arm开发·stm32·嵌入式硬件
古希腊掌握嵌入式的神3 小时前
[CH32] RISC-V汇编指令解释
单片机·嵌入式硬件
XINVRY-FPGA3 小时前
Xilinx FPGA XCVC1902-2MSEVSVA2197 Versal AI Core系列芯片的详细介绍
人工智能·嵌入式硬件·5g·ai·fpga开发·云计算·fpga
学渣676564 小时前
正点原子 迷你 miniSTM32用ST link烧录后程序不运行(已解决)
stm32·单片机·嵌入式硬件
逆鱼_044 小时前
ARM-外部中断,ADC模数转换器
arm开发·单片机·嵌入式硬件
【云轩】5 小时前
青铜与信隼的史诗——TCP与UDP的千年博弈
嵌入式硬件
niuTaylor5 小时前
大学生机器人比赛实战(二)软件篇
单片机·嵌入式硬件·机器人
天天爱吃肉82185 小时前
TSMaster在新能源汽车研发测试中的硬核应用指南
单片机·嵌入式硬件·汽车·学习方法
番茄老夫子6 小时前
小动物多导生理记录仪产品需求定义
单片机·嵌入式硬件
微信153237942431 天前
离线语音识别 ( 小语种国家都支持)可定制词组
嵌入式硬件