项目名称:基于 ESP-01 + 智能插座的格力空调智能遥控系统
控制方式:点灯科技(Blinker)App + 小爱同学语音
状态反馈:通过智能插座功率判断空调是否响应
适用对象:格力挂式空调(支持 Gree 红外协议)
📄 一、项目目标
用手机 App 或小爱同学语音控制格力空调(开关、温度、模式等)
红外指令由 ESP-01 发射
通过已有的智能插座监测空调功率,判断指令是否生效
实现“指令发出 → 空调响应 → 状态反馈”闭环
🧰 二、所需物料清单
表格
✅ 所有电子元件总成本约 ¥5~10 元(不含 ESP-01 和智能插座)
🔌 三、硬件接线图
ESP-01 引脚分配(仅使用可用 GPIO):
GPIO2(IO2) → 红外发射驱动
RX(GPIO3) → VS1838B 信号输出(学习阶段使用)
VCC → 3.3V
GND → 公共地
1. 红外接收电路(学习阶段)
VS1838B(面对圆面,左→右):
[OUT] ──→ ESP-01 的 RX 引脚(GPIO3)
[GND] ──→ GND
[VCC] ──→ 3.3V2. 红外发射电路(成品保留)
.3V ──┬──[33Ω]───→ 红外LED阳极
│
└── 红外LED阴极 ──→ S8050 集电极(C)
S8050 基极(B) ──[1kΩ]──→ ESP-01 GPIO2
S8050 发射极(E) ──→ GND⚠️ 注意:S8050 引脚顺序(TO-92 封装,平面对自己):
1-B, 2-E, 3-C
💻 四、开发环境准备
. 安装 Arduino IDE
下载地址:https://www.arduino.cc/en/software
. 添加 ESP8266 支持
文件 → 首选项 → 附加开发板管理器网址:
text
https://arduino.esp8266.com/stable/package_esp8266com_index.json
工具 → 开发板 → 开发板管理器 → 搜索 esp8266 并安装
. 安装所需库
项目 → 加载库 → 管理库:
IRremoteESP8266(by crankyoldgit)→ v2.8.6+
Blinker(by Blinker)→ 最新版
📥 五、第一步:学习原装遥控器红外码
目标:获取格力空调“开机”、“26℃制冷”等指令的合法红外数据(含校验)
1. 上传学习代码到 ESP-01
#include <IRrecv.h>
#include <IRutils.h>
const uint16_t kRecvPin = 3; // RX 引脚 (GPIO3)
IRrecv irrecv(kRecvPin);
decode_results results;
void setup() {
Serial.begin(115200);
irrecv.enableIRIn();
Serial.println("【学习模式】请对准 VS1838B 按下遥控器按键...");
}
void loop() {
if (irrecv.decode(&results)) {
Serial.print("协议: ");
Serial.print(resultToHumanReadableBasic(&results));
if (results.decode_type == GREE) {
Serial.println("✅ 检测到格力(Gree)协议!");
Serial.printf("完整数据: 0x%016llX\n", results.value);
}
irrecv.resume();
}
delay(100);
}
. 操作步骤
将 ESP-01 通过 USB-TTL 模块连接电脑(GPIO0 接 GND 进下载模式)
选择开发板:Generic ESP8266 Module
上传代码
打开串口监视器(115200 波特率)
用原装格力遥控器对准 VS1838B(距离 10cm),依次按下:
“开机”
“26℃ 制冷”
“关机”
记录每条指令的 0x... 数据,例如:
text
完整数据: 0xB0E0708F
📝 建议保存为表格:
表格
📤 六、第二步:正式控制代码(集成 Blinker + 小爱)
此时可移除 VS1838B(成品只保留发射)
1. 在 Blinker App 中操作
注册账号,创建新设备 → 选择 Arduino / WiFi
获取 Secret Key(auth)
添加两个按钮组件:
btn_on(文本:“打开空调”)btn_off(文本:“关闭空调”)
绑定小爱同学:
点击组件 → 小爱同学 → 设置语音指令:
“打开空调” → 触发 btn_on
“关闭空调” → 触发 btn_off
2. 上传控制代码
#define BLINKER_PRINT Serial
#include <Blinker.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
// === 配置区 ===
char auth[] = "你的Blinker密钥"; // 替换!
char ssid[] = "你的WiFi名"; // 替换!
char pswd[] = "你的WiFi密码"; // 替换!
const uint16_t kIrLed = 2; // GPIO2
IRSend irsend(kIrLed);
// 替换为你学到的真实数据(示例)
const uint64_t AC_ON_CODE = 0xB0E0708F; // 开机+26℃制冷
const uint64_t AC_OFF_CODE = 0xB0E0704F; // 关机
BlinkerButton btnOn("btn_on");
BlinkerButton btnOff("btn_off");
void onCallback(const String &state) {
BLINKER_LOG("收到指令:打开空调");
irsend.sendGree(AC_ON_CODE, 0x00);
Blinker.delay(1000);
// 提示用户:稍后可通过智能插座确认状态
Blinker.notify("正在发送开机指令,请稍后查看空调是否启动。");
}
void offCallback(const String &state) {
BLINKER_LOG("收到指令:关闭空调");
irsend.sendGree(AC_OFF_CODE, 0x00);
Blinker.notify("已发送关机指令。");
}
void setup() {
Serial.begin(115200);
Blinker.begin(auth, ssid, pswd);
btnOn.attach(onCallback);
btnOff.attach(offCallback);
}
void loop() {
Blinker.run();
}
3. 烧录与测试
断开 VS1838B(可选)
上传代码(GPIO0 悬空,正常启动)
打开 Blinker App,点击按钮或对小爱说“打开空调”
用手机摄像头观察红外 LED 是否闪烁(紫白光)
🔁 七、状态反馈机制(通过智能插座)
虽然 ESP-01 无法直接读功率,但可通过 米家自动化实现闭环反馈。
米家 App 设置步骤:
确保智能插座已接入米家,命名为 “客厅空调”
进入 “智能家居” → “创建自动化”
设置两条自动化:
自动化 1:确认空调开启成功
触发条件:小爱同学执行了“打开空调”(或 Blinker 设备触发)
延迟:15 秒
执行动作:
获取“客厅空调”当前功率
如果 功率 > 100W → 小爱播报:“空调已成功开启”
否则 → 小爱播报:“未检测到空调启动,请重试”
自动化 2:确认空调关闭
触发条件:小爱执行“关闭空调”
延迟:30 秒(等待压缩机停机)
如果功率 < 10W → 小爱播报:“空调已关闭”
✅ 这样你就实现了无需额外硬件的状态反馈!
🛠️ 八、调试与常见问题
🎯 九、最终效果
对小爱说:“小爱同学,打开空调”
ESP-01 发射红外信号
空调启动,功率从 2W → 800W
15 秒后,小爱播报:“空调已成功开启”
在 Blinker App 中点击“关机”,空调停止运行
✅ 完全替代原装遥控器,且支持远程、定时、语音、自动化!
📦 十、后续升级建议
增加温湿度传感器(DHT11) → 实现“室温>30℃自动开空调”
用 ESP-12F 替代 ESP-01 → 更稳定,可加 OLED 显示状态
3D 打印外壳 → 做成墙面嵌入式遥控器
接入 Home Assistant → 实现更复杂的场景联动