当前位置: 首页 > article >正文

用ESP32和Arduino的WebServer库,5分钟搭建一个能远程控制LED的网页

用ESP32和Arduino的WebServer库5分钟搭建一个能远程控制LED的网页想象一下躺在沙发上用手机就能控制客厅的灯光——这种酷炫的物联网体验其实用一块不到50元的ESP32开发板就能实现。今天我们就来手把手教你如何用最简单的代码搭建一个可通过网页远程控制LED的智能系统。无需复杂的网络知识跟着做就能在咖啡凉透前完成这个神奇的小项目。1. 准备工作硬件与环境的快速配置首先确保你手头有以下材料ESP32开发板任何型号均可一颗LED灯建议选用5mm直径的普通发光二极管220欧姆电阻用于保护LED面包板和杜邦线若干安装了Arduino IDE的电脑硬件连接非常简单将LED长脚正极通过220欧姆电阻连接到ESP32的GPIO2引脚LED短脚负极连接到ESP32的GND引脚用USB线将ESP32与电脑连接开发环境配置关键步骤// 在Arduino IDE中添加ESP32支持 1. 文件 → 首选项 → 附加开发板管理器网址中添加 https://dl.espressif.com/dl/package_esp32_index.json 2. 工具 → 开发板 → 开发板管理器 → 搜索esp32 → 安装 3. 选择开发板型号如ESP32 Dev Module提示如果遇到端口识别问题可能需要安装CP210x或CH340驱动这些在开发板卖家提供的资料包里通常都能找到。2. 构建基础Web服务器从零到Hello World让我们先建立一个能响应基础请求的Web服务器。创建新项目并粘贴以下代码#include WiFi.h #include WebServer.h const char* ssid 你的WiFi名称; const char* password 你的WiFi密码; WebServer server(80); // 使用80端口 void handleRoot() { String html !DOCTYPE htmlhtmlheadtitleESP32控制台/title/head; html bodyh1欢迎来到ESP32控制中心!/h1; html p当前系统运行时间: String(millis()/1000) 秒/p; html /body/html; server.send(200, text/html, html); } void setup() { Serial.begin(115200); // 连接WiFi WiFi.begin(ssid, password); while (WiFi.status() ! WL_CONNECTED) { delay(500); Serial.print(.); } Serial.println(\nWiFi连接成功); Serial.print(IP地址: ); Serial.println(WiFi.localIP()); // 设置路由 server.on(/, handleRoot); server.begin(); Serial.println(HTTP服务器已启动); } void loop() { server.handleClient(); }上传代码后打开串口监视器波特率115200你将看到类似这样的输出...... WiFi连接成功 IP地址: 192.168.1.123 HTTP服务器已启动在浏览器中输入这个IP地址就能看到你的第一个ESP32网页了这个基础框架包含了WiFi连接功能简单的HTML页面生成实时系统状态显示完整的HTTP请求处理流程3. 添加LED控制功能让网页变得可交互现在我们来升级这个网页添加控制LED的功能。修改代码如下// 在文件开头添加LED引脚定义 const int ledPin 2; // 对应我们之前连接的GPIO2 // 在setup()函数中添加 pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); // 新增LED控制处理函数 void handleLED() { String state server.arg(state); if(state on) { digitalWrite(ledPin, HIGH); server.send(200, text/plain, LED已开启); } else if(state off) { digitalWrite(ledPin, LOW); server.send(200, text/plain, LED已关闭); } else { server.send(400, text/plain, 无效参数); } } // 在setup()中注册新路由 server.on(/led, handleLED); // 修改handleRoot()函数添加控制按钮 html form action/led methodGET; html button typesubmit namestate valueon开灯/button; html button typesubmit namestate valueoff关灯/button; html /form;这个升级版实现了通过GET请求控制LED状态简单的表单按钮交互状态反馈机制关键点解析server.arg(state)获取URL参数值digitalWrite()实际控制GPIO输出send()方法返回操作结果给客户端4. 界面美化与功能增强打造专业级控制面板基础功能已经实现现在让我们提升用户体验。我们将添加LED状态实时显示使用CSS美化界面增加AJAX实现无刷新控制更新后的handleRoot函数void handleRoot() { String html R( !DOCTYPE html html head titleESP32 LED控制器/title style body { font-family: Arial; text-align: center; margin-top: 50px; } .btn { padding: 12px 24px; margin: 10px; font-size: 18px; cursor: pointer; background-color: #4CAF50; color: white; border: none; border-radius: 4px; } .btn-off { background-color: #f44336; } .status { font-size: 24px; margin: 20px; padding: 10px; display: inline-block; } /style /head body h1远程LED控制面板/h1 div idstatus classstatusLED状态: 加载中.../div button classbtn onclickcontrolLED(on)开灯/button button classbtn btn-off onclickcontrolLED(off)关灯/button script function controlLED(state) { fetch(/led?state state) .then(response response.text()) .then(data { updateStatus(state); }); } function updateStatus(state) { const statusDiv document.getElementById(status); statusDiv.innerHTML LED状态: (state on ? 开启 : 关闭); statusDiv.style.color state on ? green : red; } // 初始加载时获取状态 fetch(/led-status) .then(response response.text()) .then(updateStatus); /script /body /html ); server.send(200, text/html, html); } // 新增LED状态查询接口 void handleLEDStatus() { String state digitalRead(ledPin) ? on : off; server.send(200, text/plain, state); } // 在setup()中注册新路由 server.on(/led-status, handleLEDStatus);这个专业版实现了现代化的UI设计实时状态反馈无页面刷新的异步控制响应式按钮样式状态颜色指示5. 安全加固与高级功能扩展基本功能完成后我们需要考虑一些实际应用中的问题WiFi连接可靠性增强// 在loop()函数中添加 void loop() { if (WiFi.status() ! WL_CONNECTED) { WiFi.reconnect(); while (WiFi.status() ! WL_CONNECTED) { delay(500); Serial.print(.); } Serial.println(WiFi重新连接成功); } server.handleClient(); }添加简单密码保护// 在handleRoot()开头添加 if(!server.authenticate(admin, 123456)) { return server.requestAuthentication(); }多语言支持示例String getText(String key) { if(server.header(Accept-Language).indexOf(zh) 0) { return key welcome ? 欢迎使用 : key ledControl ? LED控制 : key; } return key; } // 在HTML中使用 html h1 getText(welcome) /h1;能耗优化技巧// 在setup()中添加 WiFi.setSleep(true); // 启用WiFi节能模式这些增强功能使项目更加实用自动重连机制保障长期稳定运行基础认证防止未授权访问多语言支持提升用户体验节能配置延长设备续航6. 项目打包与部署建议完成开发后这里有一些实用建议帮助你将项目投入实际使用代码优化技巧将HTML内容移入PROGMEM节省RAMconst char MAIN_page[] PROGMEM R( !DOCTYPE html html ... /html ); // 使用时 server.send(200, text/html, FPSTR(MAIN_page));常见问题排查表问题现象可能原因解决方案无法连接WiFi密码错误/信号弱检查密码强度靠近路由器网页加载慢HTML过大压缩HTML使用PROGMEMLED不响应接线错误检查GPIO引脚和LED极性频繁断开电源不足使用质量好的USB线或独立供电扩展思路添加更多GPIO设备控制集成传感器数据展示开发移动端专用界面加入OTA远程更新功能连接MQTT实现云端控制性能对比数据功能内存占用响应时间基础版15KB50ms美化版25KB70ms优化版18KB55ms最后分享一个实际部署的小技巧将ESP32固定在86型开关盒内配合继电器模块就能直接控制真实灯具。我自己的书房灯就是这样改造的用了半年多从没出过问题而且客人来访时用手机控制灯光总能收获一片惊叹。

相关文章:

用ESP32和Arduino的WebServer库,5分钟搭建一个能远程控制LED的网页

用ESP32和Arduino的WebServer库,5分钟搭建一个能远程控制LED的网页 想象一下,躺在沙发上用手机就能控制客厅的灯光——这种酷炫的物联网体验,其实用一块不到50元的ESP32开发板就能实现。今天我们就来手把手教你,如何用最简单的代…...

当心爱的网络小说突然消失:如何用一款开源工具打造你的永久数字图书馆

当心爱的网络小说突然消失:如何用一款开源工具打造你的永久数字图书馆 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 你是否曾经有过这样的经历?深夜追更的小…...

使用 Node.js 和 Taotoken 为你的 Web 应用集成大模型能力

使用 Node.js 和 Taotoken 为你的 Web 应用集成大模型能力 1. 智能客服场景的技术选型 在构建智能客服系统时,开发者通常需要平衡响应质量、成本控制和系统稳定性。Taotoken 提供的多模型聚合能力允许开发者通过单一 API 接入不同厂商的大模型服务,无需…...

FROST:高效稀疏Transformer优化技术解析

1. 项目概述FROST(Fast and Robust Optimized Sparse Transformer)是一种针对Transformer架构中注意力机制的创新优化方法。作为一名长期从事深度学习优化的工程师,我在实际项目中发现传统注意力机制存在两大痛点:一是计算复杂度随…...

Arm Morello平台DMC-Bing内存控制器架构与ECC机制解析

1. Arm Morello平台DMC-Bing内存控制器架构解析 DMC-Bing是Arm Morello系统开发平台中的动态内存控制器核心组件,基于成熟的DMC-620架构进行功能扩展。与标准DMC-620相比,Bing版本在内存安全监控和性能分析方面进行了专项增强,主要体现在三个…...

MSI技术如何优化中断处理性能与实时系统响应

1. MSI技术如何重塑中断处理性能格局 中断处理机制如同计算机系统的神经系统,其响应速度直接决定了整个系统的实时性能。在嵌入式系统和实时计算领域,毫秒级的延迟差异可能意味着工业控制系统的成败或自动驾驶汽车的生死抉择。传统中断架构在应对现代高性…...

保姆级教程:在YOLOv9中集成CARAFE模块,从代码修改到配置文件详解

深度解析:YOLOv9集成CARAFE上采样模块的完整实践指南 在目标检测领域,YOLO系列算法一直以其高效的检测速度和良好的精度平衡著称。YOLOv9作为该系列的最新成员,在保持实时性的同时进一步提升了检测精度。然而,对于追求极致性能的…...

别再为uni-app多端样式头疼了!手把手教你搞定H5、小程序、App的CSS兼容(附实战代码)

深度解析uni-app多端样式兼容:从原理到实战的完整方案 每次打开调试工具,看到H5和小程序上截然不同的布局效果,作为开发者的你是否感到一阵无力?uni-app的多端开发能力确实强大,但样式兼容问题却像幽灵般困扰着每个追…...

代码化简历:用Git与自动化构建打造动态个人品牌

1. 项目概述:一份简历的数字化重构 在技术圈子里,我们常常把“简历”看作一份静态的PDF文档,一份罗列了技能和经历的清单。但今天要聊的这个项目 rebecamendez/cv ,却提供了一个截然不同的视角。它本质上是一个托管在GitHub上的…...

Python调用国密SDK总失败?深度解析OpenSSL 3.0+国密引擎加载失败的7类底层原因(附GDB调试实录)

更多请点击: https://intelliparadigm.com 第一章:Python调用国密SDK的典型失败现象与排查全景图 在金融、政务等强合规场景中,Python应用集成国密SM2/SM3/SM4算法时,常因环境、依赖或接口适配问题导致静默失败。典型现象包括&am…...

阴阳师自动化脚本OAS完全指南:从零开始解放双手的终极方案

阴阳师自动化脚本OAS完全指南:从零开始解放双手的终极方案 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 阴阳师自动化脚本OAS是一款专为《阴阳师》游戏设计的智能辅…...

告别CNN!用BERT的思路搞定加密流量分类:PERT实战教程与代码解析

告别CNN!用BERT的思路搞定加密流量分类:PERT实战教程与代码解析 在网络安全领域,加密流量分类一直是个棘手的问题。传统的基于CNN的方法虽然取得了一定成效,但面对日益复杂的加密技术,其局限性逐渐显现。本文将带你探…...

Python类型检查到底值不值得上?3大真实项目对比数据揭示类型系统带来的57%维护成本下降

更多请点击: https://intelliparadigm.com 第一章:Python类型检查的价值重估与工程现实 在动态语言生态中,Python 的灵活性长期被视为核心优势,但随着项目规模膨胀、团队协作深化及交付节奏加快,运行时类型错误正成为…...

SpringBoot项目里,poi-tl和EasyExcel到底怎么选?一个案例讲清区别

SpringBoot项目中poi-tl与EasyExcel的技术选型实战指南 在Java生态系统中处理Office文档时,开发者常面临工具选择的困境。当项目需要同时生成结构复杂的Word报告和包含海量数据的Excel报表时,poi-tl和EasyExcel这两个专精不同领域的库便成为了关键考量。…...

终极免费SSTV解码教程:用手机将无线电波变成清晰图像的完整指南

终极免费SSTV解码教程:用手机将无线电波变成清晰图像的完整指南 【免费下载链接】robot36 Decode SSTV encoded audio signals to images 项目地址: https://gitcode.com/gh_mirrors/ro/robot36 你是否曾经想过,那些在无线电波中传输的神秘声音其…...

终极指南:如何用XInputTest精准测量Xbox控制器轮询性能

终极指南:如何用XInputTest精准测量Xbox控制器轮询性能 【免费下载链接】XInputTest Xbox 360 Controller (XInput) Polling Rate Checker 项目地址: https://gitcode.com/gh_mirrors/xin/XInputTest XInputTest是一款专业的Xbox 360控制器轮询率检测工具&am…...

Java车载IVI系统开发避坑手册:90%工程师忽略的ASIL-B合规性陷阱及修复方案

更多请点击: https://intelliparadigm.com 第一章:Java车载IVI系统开发避坑手册:90%工程师忽略的ASIL-B合规性陷阱及修复方案 在基于Java构建的车载信息娱乐(IVI)系统中,开发者常误将JVM抽象层等同于功能安…...

FontForge终极指南:免费开源字体编辑器的完整手册

FontForge终极指南:免费开源字体编辑器的完整手册 【免费下载链接】fontforge Free (libre) font editor for Windows, Mac OS X and GNULinux 项目地址: https://gitcode.com/gh_mirrors/fo/fontforge 想象一下,你正在设计一款独特的字体&#x…...

PyTorch3D安装后别急着跑Demo:先试试这几个必跑的基础3D操作

PyTorch3D安装后别急着跑Demo:先试试这几个必跑的基础3D操作 刚装好PyTorch3D的你,是不是已经迫不及待想跑个炫酷的3D渲染Demo?别急,在深入复杂应用前,先通过几个基础操作摸清这个框架的脾气。就像学吉他先练爬格子&a…...

一文详解8个Python自动化脚本让你告别重复劳动

AI的发展越来越厉害,所以很多人也习惯把任务直接丢给AI。但 AI 在处理自动化任务时有时候还会不稳定,有些还要收费。对于需要每天定时运行、处理大量文件或监控系统状态的任务,依靠 AI 每次生成结果容易出现幻觉偏差。 AI很好,但…...

别再只会调LED亮度了!用STM32 HAL库的PWM驱动舵机,做个会摇头的小风扇(附完整代码)

从LED到智能风扇:STM32 HAL库PWM驱动舵机全实战 在嵌入式开发中,PWM(脉宽调制)技术常被用于LED亮度调节这类基础应用。但PWM的真正魅力远不止于此——它能驱动舵机、控制电机、甚至构建智能家居的核心部件。本文将带你突破LED调光…...

别再只用普通用户了!详解在Ubuntu Server 22.04中安全启用并远程登录Root账户的全流程

深度解锁Ubuntu Server 22.04的Root权限:安全实践与远程管理全指南 在Linux系统管理中,Root账户如同掌控系统命脉的钥匙。Ubuntu基于安全考虑默认禁用Root直接登录,但某些场景下——比如批量部署服务、调试内核模块或管理多台服务器时&#x…...

管理团队 API Key 与设置访问权限保障调用安全

管理团队 API Key 与设置访问权限保障调用安全 1. 创建团队 API Key 在 Taotoken 控制台中创建 API Key 是团队管理的第一步。登录控制台后,导航至「API 密钥」页面,点击「新建密钥」按钮。系统会生成一个以 sk- 开头的密钥字符串,这是调用…...

扩散模型轻量适配器MONKEY:原理与实战指南

1. 项目背景与核心价值在生成式AI领域,扩散模型已经成为图像生成的主流技术框架。然而在实际应用中,如何让预训练好的通用模型快速适配到特定用户需求,一直是个棘手问题。传统微调方法需要大量计算资源,而提示词工程又难以实现精准…...

LocAtViT:局部注意力增强的视觉Transformer在图像分割中的应用

1. 项目背景与核心价值 视觉Transformer(ViT)在计算机视觉领域掀起了一场革命,但标准的全局自注意力机制在处理密集预测任务(如语义分割)时存在明显短板。LocAtViT正是针对这一痛点提出的创新解决方案,它通…...

告别电流畸变:在GaN图腾柱PFC中,我是如何用重复控制搞定PI相位超前的

告别电流畸变:在GaN图腾柱PFC中,我是如何用重复控制搞定PI相位超前的 调试GaN图腾柱无桥PFC时,最让人头疼的莫过于电流波形畸变。上周连续熬了三个通宵,就为了解决一个诡异的现象——电感电流总是比输入电压超前几度,导…...

保姆级教程:在AUTOSAR架构中手把手配置SecOC模块(基于CAN总线)

AUTOSAR SecOC实战:从零配置CAN总线安全通信模块 在汽车电子开发领域,信息安全已经从"可有可无"变成了"不可或缺"的核心需求。想象一下这样的场景:你的ECU正在处理来自CAN总线的油门位置信号,如何确保这个关…...

如何用5分钟为.NET应用添加免费金融数据支持

如何用5分钟为.NET应用添加免费金融数据支持 【免费下载链接】YahooFinanceApi A handy Yahoo! Finance api wrapper, based on .NET Standard 2.0 项目地址: https://gitcode.com/gh_mirrors/ya/YahooFinanceApi 你是否曾经想要为自己的.NET应用添加股票行情功能&#…...

扩散模型加速:HybridStitch技术解析与实践

1. 项目背景与核心价值 在生成式AI领域,扩散模型已经成为图像合成的中流砥柱,但其计算成本始终是落地应用的瓶颈。传统扩散模型需要数百次迭代才能生成高质量图像,这种"时间换质量"的模式严重制约了实时应用场景。HybridStitch通过…...

多模态离散扩散模型Lumina-DiMOO核心技术解析

1. 项目背景与核心价值 去年在CVPR上第一次看到扩散模型在图像生成领域的惊艳表现时,我就意识到这将是继GAN之后又一个改变游戏规则的技术。但当时所有模型都局限于单一模态,直到我们团队开始探索多模态场景下的离散扩散模型(DiMOO&#xff0…...