跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

基于 ESP32 与 Arduino 的 Web 控制 LED 入门教程

介绍如何使用 ESP32-C3 SuperMini 开发板配合 Arduino IDE 实现通过 Web 页面控制 LED 灯。内容包括硬件环境准备、软件安装配置、代码编写与上传,以及底层原理分析。ESP32 作为 WiFi 客户端连接路由器并启动 TCP 80 端口 Web 服务器,浏览器访问 IP 地址后发送 HTTP 请求控制引脚电平,从而实现远程开关 LED。

路由之心发布于 2026/4/5更新于 2026/9/384 浏览
基于 ESP32 与 Arduino 的 Web 控制 LED 入门教程

ESP32-C3 是一款 32 位 RISC-V CPU,包含 FPU(浮点单元),支持 IEEE 802.11 b/g/n WiFi 和蓝牙 5 (LE) 协议。ESP32C3SuperMini 是一款基于该芯片的 IoT 迷你开发板,附带外部天线以增强无线信号强度,拥有 11 个数字 I/O 引脚和 4 个模拟 I/O 引脚,支持 UART、I2C 和 SPI 等接口。

一、快速开始

(1)硬件环境:

  • 1 个 ESP32C3SuperMini
  • 1 台电脑
  • 1 根 USB Type-C 数据线

(2)软件环境:

Arduino IDE 下载安装

访问 arduino 官方网站下载对应操作系统的版本。 https://www.arduino.cc/en/software/

文章配图

在 Arduino IDE 中查找 esp32,选择 esp32 by Espressif Systems,推荐使用 2.0.17-cn 版本(3.x.x 版本可能存在安装问题):

文章配图

设置开发板型号与端口

在工具栏中选择对应的开发板型号及端口。 首先在 Windows 系统中查找对应的设备串口号(例如 COM14)。如果系统未显示串口设备,请检查数据线或安装串口驱动。

文章配图

在 文件 > 工具 中选中对应的开发板及端口。

文章配图

二、编程与下载运行

(1)控制 LED 灯

新建项目并将以下代码复制到 Arduino IDE:

// 设置 LED 使用的 GPIO 引脚
int led = 8;

void setup() {
  // 初始化 GPIO 为输出模式
  (led, OUTPUT);
}

{
  (led, HIGH); 
  ();             
  (led, LOW);  
  ();             
}
pinMode
void loop()
digitalWrite
// 打开 LED
delay
1000
// 延时 1000ms
digitalWrite
// 关闭 LED
delay
1000
// 延时 1000ms

保存后点击编译并上传图标。上传成功后,板载 LED 将每秒闪烁一次。

(2)Web 控制 LED 灯

#include <WiFi.h>
const char* ssid = "wifi";      // 设置 WiFi 名称
const char* password = "1234";  // 设置 WiFi 密码
WiFiServer server(80);          // WiFi 服务器对象初始化
String currentLine = "";

void setup() {
  Serial.begin(115200);
  pinMode(8, OUTPUT);
  delay(10);
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();
}

void loop(){
  WiFiClient client = server.available();
  if (client) {
    Serial.println("New Client.");
    String currentLine = "";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        if (c == '\n') {
          if (currentLine.length() == 0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html; charset=utf-8");
            client.println();
            client.print("<div>");
            client.print("Click <a href=\"/L\">打开 LED</a><br><br>");
            client.print("Click <a href=\"/H\">关闭 LED</a>");
            client.print("</div>");
            client.println();
            break;
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
        }
        if (currentLine.endsWith("GET /H")) {
          digitalWrite(8, HIGH);
        }
        if (currentLine.endsWith("GET /L")) {
          digitalWrite(8, LOW);
        }
      }
    }
    client.stop();
    Serial.println("Client Disconnected.");
  }
}

注意: 若网络连接异常,可尝试按下 Boot 键重启开发板。

浏览器中输入串口打印的开发板 IP 地址,即可看到控制页面并操作 LED。

三、实现原理分析

(1)实现原理

1、代码整体功能
  1. ESP32 作为 WiFi 客户端连接路由器,获取局域网 IP;
  2. 启动 TCP 80 端口的简易 Web 服务器,浏览器访问 IP 时显示链接,点击 /H 打开 LED,点击 /L 关闭 LED。
2、Web 服务原理

基于 HTTP 协议 + TCP 80 端口 的请求 - 响应模型:

  1. ESP32 监听 80 端口;
  2. 浏览器发送 HTTP 请求(如 GET /L);
  3. ESP32 解析请求并执行操作,返回 HTML 响应;
  4. 交互完成后关闭连接。
3、核心工作流程
  1. WiFi 连网:WiFi.begin() 发起连接,WiFi.status() 等待成功,WiFi.localIP() 获取地址;
  2. Web 服务:WiFiServer 监听端口,server.available() 检测连接,client.read() 解析请求;
  3. 业务逻辑:判断请求路径调用 digitalWrite() 控制电平。

(2)关键函数分析

1、WiFi 连网相关
代码 / 函数作用与使用说明
WiFi.begin(ssid, password)核心连网函数:传入 WiFi 名称和密码,触发连接请求。注意调用后需等待状态确认。
WiFi.status()检测连接状态,关注 WL_CONNECTED(已连接)。其他值包括 WL_DISCONNECTED(未连接)、WL_CONNECT_FAILED(密码错误)等。
WiFi.localIP()获取 ESP32 在局域网中的 IP 地址,供浏览器访问使用。
while (WiFi.status() != WL_CONNECTED)循环等待连网,通常需 1~3 秒,期间通过延时避免阻塞后续代码。
2、Web 服务相关
核心对象与启动函数
代码 / 函数作用与使用说明
WiFiServer server(80)创建 TCP 服务器对象,指定监听 80 端口(HTTP 默认端口)。
server.begin()启动 Web 服务器,开始监听客户端连接请求。
WiFiClient client = server.available()检测是否有客户端连接。无请求返回空,有请求返回客户端对象用于读写数据。
客户端交互核心逻辑
if (client) { // 有客户端连接
  while (client.connected()) { // 只要客户端未断开
    if (client.available()) { // 检测是否有数据发送过来
      char c = client.read(); // 读取字节数据
      // ... 解析数据、处理请求 ...
    }
  }
  client.stop(); // 处理完请求后关闭连接
}
代码 / 函数作用与使用说明
client.connected()判断当前客户端是否处于连接状态。
client.available()检测客户端是否有可读取的字节数,非 0 表示有数据。
client.read()读取一个字节数据,用于逐字节解析 HTTP 请求文本。
client.println() / client.print()向客户端发送响应数据,前者含换行符,后者不含。
client.stop()关闭与客户端的连接,释放资源。
HTTP 请求解析逻辑

浏览器发送的 HTTP 请求示例(点击 /H 时):

GET /H HTTP/1.1
Host: 192.168.1.100
...

代码通过逐字节读取拼接成 currentLine,再通过以下逻辑解析:

代码逻辑作用与使用说明
if (c == '\n')检测换行符,代表一行结束。连续两个 `
` 说明请求头解析完成。
currentLine += c (c != '\r')拼接请求行内容,跳过回车符,得到如 GET /H HTTP/1.1 的字符串。
currentLine.endsWith("GET /H")解析请求路径,判断是否为'打开 LED',执行对应 digitalWrite。
client.println("HTTP/1.1 200 OK")返回响应状态码及类型,响应头结束后必须加空行。
3、硬件控制相关
代码 / 函数作用与使用说明
pinMode(8, OUTPUT)将引脚 8 设置为输出模式。
digitalWrite(8, HIGH/LOW)控制引脚电平:HIGH 亮,LOW 灭。

目录

  1. 一、快速开始
  2. (1)硬件环境:
  3. (2)软件环境:
  4. Arduino IDE 下载安装
  5. 设置开发板型号与端口
  6. 二、编程与下载运行
  7. (1)控制 LED 灯
  8. (2)Web 控制 LED 灯
  9. 三、实现原理分析
  10. (1)实现原理
  11. 1、代码整体功能
  12. 2、Web 服务原理
  13. 3、核心工作流程
  14. (2)关键函数分析
  15. 1、WiFi 连网相关
  16. 2、Web 服务相关
  17. 核心对象与启动函数
  18. 客户端交互核心逻辑
  19. HTTP 请求解析逻辑
  20. 3、硬件控制相关

更多推荐文章

查看全部
  • 10 分钟部署大模型:本地知识库搭建指南(Ollama + Dify + Docker)
  • 通过 GitHub 仓库下载微信 Mac 与 Windows 历史版本
  • Go2 机器人 ROS2 仿真环境搭建指南
  • 使用 Python 进行 RFM 分析
  • PlotDigitizer 图表数据自动化工具实战指南
  • Copy Web 工具实战:利用 AI 将网页 URL 转化为 Tailwind CSS 代码
  • 二级 Python 考试基础操作题真题与参考代码汇总
  • GitLab 个人访问令牌(Token)获取方法
  • Ubuntu 24.04 LTS 安装 NVIDIA 显卡驱动、CUDA 12.5 及 Docker 容器工具包
  • MySQL 数据导入导出与表结构管理核心操作指南
  • Ubuntu 安装 OpenClaw 并接入飞书机器人
  • Java Compiler API 核心原理与应用场景
  • Python 驱动浏览器自动化:Playwright 与 AI 集成实战
  • AI Coding 工具解析:Claude Code、OpenAI Codex、OpenClaw
  • C++ stack 与 queue 的使用与模拟实现
  • 2026 年 AI IDE 白嫖大全:这些工具还能免费
  • 本地部署 Stable Diffusion 3.5 完整指南
  • C++ 算法实战:数字变换、矩阵优化与前缀和技巧
  • 要成为AI的主人,而不是被它所绑架
  • 大模型 API 实战:打造带 RAG 的电商客服机器人

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online