项目简介

本教程将手把手教你如何使用廉价的ESP8266开发板,将家里任何一个通过红外遥控器控制的普通灯具(或其他电器),改造成一个可以通过手机、电脑网页控制的“智能设备”。

我们将遵循“先学习,后模仿”的核心思路:首先,用红外接收器(VS1838B)当“耳朵”,去“偷听”并学习你原始遥控器的信号;然后,用红外发射器(KY-005)当“嘴巴”,把学到的信号发射出去,从而实现控制。


第一部分:准备工作

1. 所需材料清单

  • 大脑: 1x ESP8266开发板 (NodeMCU或Wemos D1 Mini)
  • 耳朵: 1x VS1838B (或TSOP4838) 红外接收器模块
  • 嘴巴: 1x KY-005 红外发射器模块
  • 学习对象: 1x 你想要复制的原始遥控器
  • 连接工具: 若干杜邦线、1x 面包板 (可选,但推荐)
  • 供电/编程: 1x Micro-USB 数据线
  • (可选,但强烈推荐) 为了提升发射距离,建议准备:
    • 1x NPN三极管 (如 S80502N2222)
    • 1x 1kΩ 电阻 和 1x 100Ω 电阻

2. 软件环境配置

  1. 安装Arduino IDE: 从官网 arduino.cc 下载并安装。
  2. 配置ESP8266开发环境:
    • 打开Arduino IDE,进入 文件 > 首选项
    • 在“附加开发板管理器网址”中,填入:http://arduino.esp8266.com/stable/package_esp8266com_index.json
    • 进入 工具 > 开发板 > 开发板管理器,搜索 esp8266 并安装。
  3. 安装核心库 (最重要的一步):
    • 进入 工具 > 管理库...
    • 在库管理器中搜索 IRremoteESP8266
    • 找到对应项并点击“安装”。本项目的所有魔法都来源于这个库。

第二部分:“间谍”行动 - 学习遥控器信号

核心目标: 使用“耳朵”(VS1838B) 捕获原始遥控器每个按键的唯一编码。

1. 硬件连接 (学习模式)

请仔细按照下图连接你的 VS1838B 红外接收器。将接收器半球形凸起朝向自己,从左到右引脚功能为:信号、地、电源。

  • VS1838B 左边的 DATA (信号) 引脚 → ESP8266 D5
  • VS1838B 中间的 GND (负极) 引脚 → ESP8266 GND
  • VS1838B 右边的 VCC (正极) 引脚 → ESP8266 3V3

2. 上传“窃听程序”

  1. 在Arduino IDE中,打开示例程序:文件 > 示例 > IRremoteESP8266 > IRrecvDumpV2
  2. 这个程序不需要做任何修改,因为它的默认监听引脚就是 14 (对应 D5)。
  3. 选择你的开发板 (NodeMCU 1.0) 和端口,然后点击“上传”。

3. 捕获信号的“黄金法则”

为了得到最准确的数据,请严格遵守以下步骤:

  1. 打开串口监视器: 点击IDE右上角的放大镜图标。在打开的窗口右下角,务必将波特率设置为 115200。你应该能看到一行字 ...waiting for IR input on Pin 14
  2. 创造“无菌”环境: 尽量避免阳光直射或日光灯干扰。
  3. 靠近并对准: 将你的原始遥控器发射头,非常近地(5-10厘米) 对准你刚接好的VS1838B接收器。
  4. 执行“黄金一按”: 短促、清脆地按一下你要学习的按键(例如“开灯”),然后立刻松开。
  5. 记录情报: 串口监视器会立刻打印出一大段信息。找到 Code 这一行,完整地复制下那个十六进制的编码 (例如 0xFFC23D),并记录下它对应的功能。
  6. 重复操作: 重复步骤4和5,把你遥控器上所有需要的功能键(关灯、亮度+、定时等)的编码全部记录下来,整理成一个清单。

第三部分:“特工”行动 - 模拟并控制

核心目标: 使用“嘴巴”(KY-005) 将学到的编码发射出去,并创建一个精美的网页来控制它。

1. 硬件连接 (发射模式)

现在,拔掉VS1838B,连接你的 KY-005 红外发射器

  • KY-005 GND (标有 '-') → ESP8266 GND
  • KY-005 VCC (中间引脚) → ESP8266 3V3
  • KY-005 S (信号) → ESP8266 D2

(强烈推荐)为了获得更远的发射距离,请使用下面的“扩音器”电路代替直接连接:

2. 上传最终的“指挥中心”代码

这是集成了网页服务器和红外发射功能的最终代码。

  1. 复制下面的完整代码并粘贴到Arduino IDE。
  2. 在“用户配置区域”,修改你的Wi-Fi名称和密码
  3. 将你在第二部分记录下的所有红外编码,一一对应地填入#define区域,替换掉示例编码。
  4. 上传代码到ESP8266。

(请在此处粘贴上一问中为你生成的、包含所有功能和精美布局的最终完整代码)

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>

// =======================================================================
// ===                         用户配置区域                           ===
// =======================================================================

// 1. Wi-Fi 信息
const char* ssid = "yang1234";
const char* password = "y123456789";

// 2. 【重要】将这里替换成你第二步学习到的真实红外编码
#define CODE_ON         0xFFC23D  // 开
#define CODE_OFF        0xFFB04F  // 关
#define CODE_BRIGHT_UP  0xFF10EF  // 亮度 +
#define CODE_BRIGHT_DOWN 0xFF5AA5 // 亮度 -
#define CODE_AUTO       0xFF22DD  // AUTO
#define CODE_TIMER_3H   0xFFA857  // 3H 定时
#define CODE_TIMER_5H   0xFF6897  // 5H 定时
#define CODE_TIMER_8H   0xFF629D  // 8H 定时

// 定义红外发射器连接的GPIO引脚 (D2)
const uint16_t kIrLedPin = 4;

// (此处省略了完整的网页HTML和服务器处理代码,与上一问相同)
// ...
// ...
// 请使用上一问中为你生成的完整代码

3. 开始你的智能生活

  1. 获取IP地址: 代码上传后,打开串口监视器(115200),等待ESP8266连接Wi-Fi,它会打印出自己的IP地址(例如 http://192.168.1.108)。
  2. 打开遥控器: 在你的手机或电脑浏览器中,访问这个IP地址。
  3. 开始控制: 你会看到一个为你量身定做的精美遥控界面。点击按钮,ESP8266就会发射相应的红外信号,控制你的灯!
  4. 添加到主屏幕: 为了方便使用,可以将这个网页“添加到主屏幕”,它就会像一个App一样出现在你的手机桌面上。

第四部分:常见问题与故障排除 (Q&A)

  • Q: 学习时串口监视器没反应?
    • A: 99%的可能是你错把“嘴巴”(KY-005)当成了“耳朵”。请确保连接的是黑色的VS1838B接收器。同时检查波特率是否为115200
  • Q: 网页能打开,但按按钮灯没反应?
    • A: 首先用手机摄像头对准KY-005的LED,按网页按钮看它是否闪烁紫光。
      • 不闪烁: 检查发射器接线,特别是SD2的信号线。
      • 闪烁: 说明发射功率太弱,距离太远。请靠近设备,或使用推荐的三极管放大电路。
  • Q: 学习到的信号是UNKNOWN或带WARNING警告?
    • A: 你的遥控器信号很特殊。请严格遵守“黄金法则”进行无干扰捕获。如果依然失败,你需要使用 irsend.sendRaw() 函数来发送捕获到的 rawData 数组,而不是 irsend.sendNEC()

恭喜你! 你已经完成了从硬件连接、信号分析到软件开发的全过程,成功地创造了一个属于自己的物联网设备!