news 2026/4/16 14:01:01

Arduino ESP32红外遥控家电:图解说明实现步骤

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Arduino ESP32红外遥控家电:图解说明实现步骤

让老家电秒变智能:用 Arduino ESP32 实现红外遥控全解析

你有没有这样的烦恼?家里的空调、电视、风扇明明还能用,却因为没有联网功能,被排除在“智能家居”之外。每次回家还得翻箱倒柜找遥控器?别急——一块 ESP32 开发板 + 两个红外模块,就能让你的老设备“听懂”手机指令

这不仅是极客玩家的玩具,更是物联网初学者理解嵌入式系统与无线通信的理想入口。本文将带你从零开始,手把手搭建一个可学习、可发送、可远程控制的红外中枢系统,不依赖任何商业网关,完全开源可控。


为什么是 ESP32?它凭什么能接管你的遥控器?

在众多微控制器中,ESP32 几乎是目前性价比最高的选择。它不只是“能连 Wi-Fi 的 Arduino”,更拥有专为红外设计的硬件外设——RMT(Remote Control Peripheral),这才是我们实现高精度信号再生的关键。

想象一下:普通 GPIO 模拟 38kHz 脉冲就像用手快速开关电灯;而 RMT 则像是配备了自动节拍器的智能开关,无需 CPU 干预即可持续输出精准波形。这意味着即使你在处理网络请求或传感器数据,红外发射也不会失真。

再加上双核处理器、丰富的 GPIO 和成熟的 Arduino 生态支持,ESP32 成为了连接“物理遥控”与“数字控制”的最佳桥梁。


红外遥控到底怎么工作?别再以为只是“按按钮发信号”

很多人以为红外遥控就是“按下键 → 发个码”,其实背后有一套严谨的协议机制。以最常用的NEC 协议为例,一次完整的按键操作包含:

  • 9ms 高电平 + 4.5ms 低电平:这是引导码,相当于说“注意!我要开始传数据了!”
  • 地址码(8位)+ 反码(8位):标识设备类型,比如“这是格力空调”
  • 命令码(8位)+ 反码(8位):具体动作,如“开机”、“调高温度”
  • 最后以一个短脉冲收尾

其中最关键的细节是:逻辑0和逻辑1不是靠高低电平直接表示,而是通过低电平的持续时间来区分

数据高电平低电平
0560μs560μs
1560μs1.685ms

这种编码方式叫作脉冲距离调制(Pulse Distance Modulation),抗干扰能力强,且可通过反码校验自动纠错。

小知识:当你长按遥控器时,大多数设备并不会重复发送完整帧,而是发出一个特殊的“重复帧”(Repeat Frame),仅包含引导码和极短间隔,用来告诉接收端“保持当前状态”。


硬件怎么接?一张图看懂核心连接

我们只需要三个核心组件:

  1. ESP32 开发板
  2. 红外接收头 VS1838B
  3. 红外发射 LED + 限流电阻

接收部分:VS1838B 如何“听懂”遥控器?

VS1838B 不是一个简单的光电二极管,它内部集成了放大器、滤波器和解调解码电路,专门针对 38kHz 调制信号优化。它的作用就像是一个“红外翻译官”——只对特定频率的闪烁光敏感,过滤掉日光、灯光等环境噪声。

引脚连接方式
VCC接 3.3V 或 5V(ESP32 兼容)
GND接地
OUT接任意 GPIO(建议使用支持中断的引脚,如 GPIO13)

⚠️ 注意方向:VS1838B 有标记面朝向遥控器方向安装效果最佳,避免阳光直射。

发射部分:如何让 ESP32 “模仿”原装遥控器?

直接用 GPIO 驱动红外 LED 是可行的,但驱动能力有限(ESP32 GPIO 最大输出约 12mA),传输距离可能不足。为了可靠覆盖客厅甚至卧室,推荐加入NPN 三极管扩流

典型电路如下:

ESP32 GPIO25 → 1kΩ电阻 → NPN三极管基极 (如 S8050) | GND 三极管集电极 → 红外LED阳极 三极管发射极 → 地 红外LED阴极 → 串联100Ω限流电阻 → 地

这样,GPIO 只需提供微弱电流触发三极管导通,真正的发射电流(可达 80~100mA)由电源直接供给,大幅提升发射功率。

💡 提示:多个红外LED可并联使用,扩大辐射角度,确保对准不同位置的电器。


代码实战:两段核心程序搞定“学习+回放”

整个系统的灵魂在于两个功能:学得准、发得对。我们借助IRremoteESP32库(基于 z3t0 版本)实现高效开发。

第一步:进入“学习模式”——捕获原始红外码

#include <IRrecv.h> #include <IRutils.h> const uint16_t RECV_PIN = 13; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(115200); irrecv.enableIRIn(); Serial.println("👉 请对准接收头按下遥控器任意键..."); } void loop() { if (irrecv.decode(&results)) { Serial.print("✅ 收到信号 | 协议: "); Serial.print(typeToString(results.decode_type)); Serial.print(" | 值: 0x"); serialPrintUint64(results.value, HEX); Serial.print(" | 位数: "); Serial.println(results.bits); // 输出原始波形(用于调试) dumpRaw(&irrecv, &results); irrecv.resume(); // 清空缓冲区,准备下一次接收 } delay(100); }

上传后打开串口监视器,按下空调“开关”键,你会看到类似输出:

✅ 收到信号 | 协议: NEC | 值: 0xFFA25D | 位数: 32

把这个值记下来,后续就用它来还原指令。

🔍 技巧:多按几次同一按键,确认每次获取的码值一致,排除误码干扰。


第二步:切换到“控制模式”——通过串口触发发射

#include <IRsend.h> const uint16_t SEND_PIN = 25; IRsend irsend(SEND_PIN); // 预定义常用命令(根据实际学习结果填写) const uint32_t POWER_ON = 0xFFA25D; const uint32_t TEMP_UP = 0xFF629D; const uint32_t FAN_HIGH = 0xFF22DD; void setup() { Serial.begin(115200); irsend.begin(); Serial.println("🚀 红外发射器已就绪,输入 P 启动电源键"); } void loop() { if (Serial.available()) { char cmd = tolower(Serial.read()); switch(cmd) { case 'p': irsend.sendNEC(POWER_ON, 32); Serial.println("📤 已发送【电源】指令"); break; case '+': irsend.sendNEC(TEMP_UP, 32); Serial.println("🌡️ 已发送【升温】指令"); break; case 'f': irsend.sendNEC(FAN_HIGH, 32); Serial.println("🌀 已发送【强风】指令"); break; default: Serial.println("⚠️ 未知指令,请输入 P/+ /F"); } delay(100); // 防止重复触发 } }

现在你可以通过串口输入字符来遥控家电了!下一步自然是要让它“联网”。


如何实现远程控制?Wi-Fi 加持才是智能化的灵魂

有了本地控制能力后,我们可以轻松扩展出多种远程交互方式:

方案一:简易 Web 控制页面

利用 ESP32 内建的 WebServer 功能,创建一个手机可访问的网页界面:

#include <WiFi.h> #include <WebServer.h> const char* ssid = "你的WiFi名称"; const char* password = "你的密码"; WebServer server(80); String htmlPage = R"( <html> <head><title>红外遥控面板</title></head> <body> <h2>家电遥控中心</h2> <button onclick="send('power')">电源</button> <button onclick="send('up')">升温</button> <button onclick="send('down')">降温</button> <script> function send(cmd) { fetch('/' + cmd).then(r => alert('已发送')); } </script> </body> </html> )"; void handleRoot() { server.send(200, "text/html", htmlPage); } void handlePower() { irsend.sendNEC(POWER_ON, 32); server.send(200, "text/plain", "OK"); } void setupWiFi() { WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) delay(500); Serial.print("🌐 已连接,IP地址: "); Serial.println(WiFi.localIP()); }

部署后,手机连上同一局域网,浏览器输入 ESP32 的 IP 地址即可弹出控制页。


方案二:接入 Home Assistant,实现语音与自动化

如果你已经使用 Home Assistant,可以通过 MQTT 协议无缝集成:

# configuration.yaml 示例 switch: - platform: mqtt name: "客厅空调" command_topic: "home/esp32_ir/power" payload_on: "ON" payload_off: "OFF"

ESP32 订阅对应主题,收到消息即调用irsend.sendNEC(...)发送指令。从此,“小爱同学,打开空调”不再是梦。


常见问题与避坑指南:这些错误90%的人都踩过

❌ 问题1:接收不到信号?

  • ✅ 检查 VS1838B 是否插反(平面朝前)
  • ✅ 确保遥控器电池有电,尝试靠近接收头(<10cm)
  • ✅ 避免荧光灯、太阳光直射,它们会产生 38kHz 干扰

❌ 问题2:发射无效?

  • ✅ 测量红外LED两端电压,确认是否点亮(肉眼不可见,可用手机摄像头查看)
  • ✅ 检查发送的码值是否正确(有些厂商使用自定义地址码)
  • ✅ 添加重复帧:某些设备需连续发送两次才响应
irsend.sendNEC(POWER_ON, 32); delay(100); irsend.sendNEC(POWER_ON, 32); // 再发一次提高成功率

❌ 问题3:Wi-Fi 断连导致失控?

  • ✅ 使用WiFi.setAutoReconnect(true)自动重连
  • ✅ 添加看门狗定时器防止死机
  • ✅ 支持 OTA 升级,未来无需拆机也能更新功能

进阶玩法:不止于“遥控”,还能做什么?

一旦掌握了红外信号的收发逻辑,这个平台的潜力远超想象:

  • 温湿度联动:DHT22 检测室温 >30°C,自动开启空调制冷
  • 定时任务:每天晚上7点准时打开电视播放新闻联播
  • 节能模式:检测无人活动超过1小时,自动关闭所有待机电器
  • 无障碍辅助:为行动不便者提供一键全屋控制面板

甚至可以反过来思考:既然能模拟遥控器,能不能批量学习全家所有电器的指令,做一个万能遥控中枢?

答案是肯定的。只需将学习到的码值存入 SPIFFS 或 EEPROM,并建立按键映射表,就能打造属于你的“终极遥控器”。


写在最后:技术的意义,在于让生活更简单

这个项目看似只是“复制遥控器”,实则涵盖了嵌入式开发的核心要素:
信号采集 → 数据解析 → 存储管理 → 网络通信 → 物理执行

对于初学者,它是理解硬件与软件协同工作的绝佳入口;
对于开发者,它是构建复杂自动化系统的基石模块之一。

更重要的是,它提醒我们:智能化不必以淘汰旧物为代价。只要稍加改造,那些陪伴多年的家电依然可以融入现代生活。

如果你也曾因为找不到遥控器而烦躁,不妨试试用 ESP32 给它装上“耳朵”和“嘴巴”。也许下一个改变生活的灵感,就藏在这盏微微闪动的红外LED之中。

💬互动时间:你打算用这套系统控制哪台设备?欢迎在评论区分享你的创意!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 11:00:46

HeyGem系统支持MP4、AVI、MOV等多格式视频输入,兼容性强

HeyGem系统如何实现多格式视频兼容与高效批量处理 在数字人技术加速落地的今天&#xff0c;一个常被忽视但至关重要的问题浮出水面&#xff1a;用户的视频从哪里来&#xff1f;又是否真的“即传即用”&#xff1f; 设想这样一个场景——某教育机构需要将一段标准讲解音频&#…

作者头像 李华
网站建设 2026/4/16 20:03:39

HeyGem系统最后更新于2025-12-19,持续迭代优化中

HeyGem 数字人视频生成系统技术解析&#xff1a;AI驱动的批量口型同步视频合成 在教育机构需要为同一课程制作多个讲师版本的教学视频&#xff0c;电商公司希望为不同地区用户定制本地化播报内容时&#xff0c;传统视频制作方式往往陷入“重复劳动、人力密集、周期漫长”的困局…

作者头像 李华
网站建设 2026/4/16 12:43:30

HeyGem数字人系统使用指南:如何用AI实现高质量语音驱动唇形同步

HeyGem数字人系统使用指南&#xff1a;如何用AI实现高质量语音驱动唇形同步 在虚拟主播24小时不间断直播、企业宣传视频批量生成、在线课程快速迭代的今天&#xff0c;一个核心问题始终困扰着内容创作者&#xff1a;如何让数字人“说话”时的嘴型&#xff0c;真正跟上声音&…

作者头像 李华
网站建设 2026/4/16 12:29:00

AI虚拟主播制作全流程:从录音到HeyGem生成口型同步视频

AI虚拟主播制作全流程&#xff1a;从录音到HeyGem生成口型同步视频 在短视频与直播内容井喷的今天&#xff0c;一个现实问题摆在许多创作者和企业面前&#xff1a;如何以低成本、高效率持续产出专业级讲解视频&#xff1f;传统方式依赖真人出镜录制或昂贵的动画制作&#xff0c…

作者头像 李华
网站建设 2026/4/15 17:19:36

Dev.to开发者博客平台发文:吸引全球工程师读者

HeyGem 数字人视频生成系统&#xff1a;从AI模型到生产力工具的工程实践 在教育机构为千节课程拍摄讲师视频仍需投入大量人力时&#xff0c;在企业宣传部门为多语种产品发布焦头烂额地协调演员与剪辑师时&#xff0c;一种新的可能性正在悄然成型——用一段音频驱动一个“数字人…

作者头像 李华
网站建设 2026/4/16 9:09:29

DSPy-Enhanced Root Cause Analysis Framework for Semiconductor Manufacturing —基于声明式编程的工业级根因分析优化架构

文章大纲 一、引言:半导体根因分析的挑战与机遇 1.1 当前根因分析系统的局限性 1.2 DSPy框架的核心价值 1.3 技术演进路线 二、DSPy框架架构详解 2.1 整体架构设计 2.2 核心概念解析 2.2.1 声明式编程范式 2.2.2 编译与优化机制 2.2.3 模块化设计原则 三、DSPy在半导体根因分析…

作者头像 李华