标题: 基于 Arduino IDE 搭建一个轻量的 ESP32 Web 服务器 [打印本页] 作者: 缠丝猫 时间: 2025-1-13 21:15 标题: 基于 Arduino IDE 搭建一个轻量的 ESP32 Web 服务器
ESP32 是乐鑫公司继 ESP8266 后新发布的 MCU,集成了 WiFi 模块和低功耗蓝牙模块,经常应用于物联网相关的项目。本教程将基于 Arduino IDE2.0 以上版本的软件中,搭建一个轻量的 ESP32 Web 服务器。
[!NOTE] Web 服务器到底是什么,它是怎样工作的?
Web 服务器是用于存储和处置处罚网页,并将其提供给 Web 客户端的装备。Web 客户端就是我们在盘算机和手机上使用的 Web 浏览器。Web 客户端和 Web 服务器使用称为超文本传输协议 (HTTP) 的特殊协议进行通讯。
[!NOTE]
ESP32 只是一个芯片,这个教程适用于任何基于 ESP32 计划的开发板,乃至可以用在 ESP8266 的开发板上。
示例 1 – 在 AP 模式下搭建 ESP32 Web 服务器
本示例代码是基于 Arduino 框架编写的 ESP32 步伐,步伐中创建了一个无线接入点(Access Point, AP),并在该 AP 模式下运行一个简朴的 Web 服务器。用户可以通过毗连到 ESP32 创建的 WiFi 网络,并在浏览器中输入 IP 地点来访问 Web 页面,以控制两个 GPIO 引脚上的 LED 状态。
完备的代码已经推送至我的代码堆栈,链接在文章末端,必要的小伙伴可以自取(不会 git 命令的小伙伴,也可以在找我的小助理要代码)。以下是对代码的分段分析:
包含库和定义常量
#include <WiFi.h>
#include <WebServer.h>
const char* ssid = "ESP32";
const char* password = "12345678";
IPAddress local_ip(192,168,1,1);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
WebServer server(80);
uint8_t led_1_pin = 4;
bool led_1_status = LOW;
uint8_t led_2_pin = 5;
bool led_2_status = LOW;
复制代码
引入了 WiFi 和 WebServer 库,用于处置处罚 Wi-Fi 毗连和 HTTP 哀求。
定义了 SSID、暗码以及静态 IP 设置信息,用来设置 ESP32 作为无线接入点时的网络参数。
创建了一个 WebServer 对象,监听端口 80,这是 HTTP 协议默认使用的端口。
定义了两个 LED 所毗连的 GPIO 引脚编号以及它们的初始状态。
setup() 函数
void setup()
{
Serial.begin(115200);
pinMode(led_1_pin, OUTPUT);
pinMode(led_2_pin, OUTPUT);
WiFi.softAP(ssid, password);
WiFi.softAPConfig(local_ip, gateway, subnet);
delay(100);
server.on("/", handle_on_connect);
server.on("/LED1On", handle_led_1_turn_on);
server.on("/LED1Off", handle_led_1_turn_off);
server.on("/LED2On", handle_led_2_turn_on);
server.on("/LED2Off", handle_led_2_turn_off);
server.onNotFound(handle_not_found);
server.begin();
Serial.println("HTTP server started");
}
复制代码
初始化串行通讯,设置 LED 引脚为输出模式。
设置 ESP32 进入软 AP 模式,并设置了静态 IP 设置。
设置了 Web 服务器的路由及其对应的处置处罚函数。
启动 Web 服务器,并打印一条消息表明服务器已启动。
loop() 函数
void loop()
{
server.handleClient();
if (led_1_status)
digitalWrite(led_1_pin, HIGH);
else
digitalWrite(led_1_pin, LOW);
if (led_2_status)
digitalWrite(led_2_pin, HIGH);
else
digitalWrite(led_2_pin, LOW);
}
复制代码
连续调用 handleClient 方法处置处罚客户端哀求。
根据 led_1_status 和 led_2_status 变量的状态更新 LED 的实际物理状态。
HTTP 哀求处置处罚器
void handle_on_connect()
{
led_1_status = LOW;
led_2_status = LOW;
Serial.println("GPIO4 Status: OFF | GPIO5 Status: OFF");