用ESP-01S和Arduino Uno做个无线开关:手机控制LED灯保姆级教程(附完整代码)

张开发
2026/4/15 2:58:12 15 分钟阅读

分享文章

用ESP-01S和Arduino Uno做个无线开关:手机控制LED灯保姆级教程(附完整代码)
用ESP-01S和Arduino Uno打造智能无线开关从零实现手机控灯周末在家折腾智能家居时发现市面上成品的智能开关动辄上百元而手头正好有闲置的ESP-01S和Arduino Uno开发板。于是萌生了一个想法能否用这些低成本硬件自己搭建一个无线开关系统经过两天摸索终于实现了用手机APP控制LED灯的效果整套成本不到30元。下面就把这个项目的完整实现过程分享给大家特别适合刚接触物联网的DIY爱好者。1. 项目准备与硬件连接1.1 所需材料清单在开始前请确保准备好以下硬件ESP-01S WiFi模块注意是带金属屏蔽罩的S版本Arduino Uno开发板及数据线面包板及杜邦线建议准备10根LED灯及220Ω限流电阻手机Android/iOS均可3.3V稳压模块可选保护ESP-01S关键点说明ESP-01S相比普通ESP-01有更好的稳定性Arduino Uno的3.3V输出电流有限建议外接稳压模块杜邦线最好使用不同颜色区分功能1.2 硬件连接示意图将各组件按以下方式连接ESP-01S引脚Arduino Uno引脚VCC3.3VGNDGNDTXRX (Pin 0)RXTX (Pin 1)GPIO0悬空RST悬空CH_PD3.3VLED连接方式正极 → Arduino Pin 3负极 → 220Ω电阻 → GND注意烧录代码时需要暂时断开ESP-01S的TX/RX与Arduino的连接完成后需重新接回。2. ESP-01S固件烧录与配置2.1 搭建开发环境首先需要为Arduino IDE添加ESP8266支持打开Arduino IDE → 文件 → 首选项在附加开发板管理器网址中添加http://arduino.esp8266.com/stable/package_esp8266com_index.json工具 → 开发板 → 开发板管理器 → 搜索安装esp82662.2 烧录主控代码ESP-01S将作为WiFi热点和UDP服务器运行完整代码如下#include ESP8266WiFi.h #include WiFiUdp.h const char* ssid SmartSwitch; // 自定义热点名称 const char* password 12345678; // 至少8位密码 WiFiUDP udp; unsigned int localPort 8888; // 本地监听端口 void setup() { Serial.begin(115200); // 配置为AP模式 WiFi.mode(WIFI_AP); // 设置静态IP IPAddress local_ip(192,168,4,1); IPAddress gateway(192,168,4,1); IPAddress subnet(255,255,255,0); WiFi.softAPConfig(local_ip, gateway, subnet); // 启动热点 WiFi.softAP(ssid, password); // 启动UDP服务 udp.begin(localPort); Serial.println(AP模式已启动); Serial.print(IP地址: ); Serial.println(WiFi.softAPIP()); } void loop() { // 处理UDP数据包 int packetSize udp.parsePacket(); if(packetSize) { String command udp.readStringUntil(\n); command.trim(); // 转发给Arduino Serial.println(command); // 示例收到ON开灯OFF关灯 if(command ON) { digitalWrite(2, HIGH); // ESP-01S内置LED } else if(command OFF) { digitalWrite(2, LOW); } } }烧录步骤选择开发板Generic ESP8266 Module设置Flash Mode为DOUT设置Flash Size为1MB(FS:none)波特率115200点击上传2.3 常见问题排查烧录失败检查GPIO0是否已接地进入烧录模式无法启动热点尝试更换SSID名称连接不稳定确保电源供应充足建议外接3.3V稳压3. Arduino Uno控制程序3.1 主控代码实现Arduino负责接收ESP-01S的指令并控制LED#define LED_PIN 3 void setup() { pinMode(LED_PIN, OUTPUT); Serial.begin(115200); // 与ESP-01S通信 } void loop() { if(Serial.available() 0) { String command Serial.readStringUntil(\n); command.trim(); if(command ON) { digitalWrite(LED_PIN, HIGH); } else if(command OFF) { digitalWrite(LED_PIN, LOW); } } }3.2 串口通信优化为提高可靠性可以添加简单的通信协议// 在loop()中添加 if(command.startsWith(LED:)) { String state command.substring(4); if(state 1) { digitalWrite(LED_PIN, HIGH); } else { digitalWrite(LED_PIN, LOW); } }4. 手机端控制实现4.1 Android控制方案推荐使用UDP Tool应用iOS类似连接ESP-01S创建的热点SmartSwitch打开APP → 设置目标IP为192.168.4.1端口设置为8888发送ON/OFF测试4.2 进阶开发简易控制界面使用MIT App Inventor可以快速制作专用控制APP添加按钮组件设置按钮点击事件当 开灯按钮 被点击 调用 UDP客户端1.发送文本 参数 ON 到 192.168.4.1 端口 8888同理添加关灯按钮4.3 跨网络控制方案如需通过家庭路由器控制修改ESP-01S为STA模式WiFi.mode(WIFI_STA); WiFi.begin(你家WiFi, 密码);在路由器中为ESP-01S分配固定IP手机APP改为连接家庭WiFi5. 项目优化与扩展5.1 电源管理改进长期使用时建议添加AMS1117 3.3V稳压模块使用5V/2A电源适配器考虑添加电容滤波100μF电解电容5.2 功能扩展思路多路控制用继电器模块替代LED状态反馈添加光敏电阻检测实际状态定时功能在ESP代码中添加NTP客户端语音控制集成Blinker等物联网平台5.3 安全增强措施// 在setup()中添加 WiFi.softAPdisconnect(true); // 禁用AP广播 WiFi.setSleepMode(WIFI_LIGHT_SLEEP); // 启用节能模式实际部署中发现使用优质电源和缩短控制指令可以显著提高响应速度。比如将ON/OFF简化为1/0响应时间能从200ms降低到80ms左右。

更多文章