项目名称:基于 ESP-01 + 智能插座的格力空调智能遥控系统

控制方式:点灯科技(Blinker)App + 小爱同学语音

状态反馈:通过智能插座功率判断空调是否响应

适用对象:格力挂式空调(支持 Gree 红外协议)

📄 一、项目目标

  • 用手机 App 或小爱同学语音控制格力空调(开关、温度、模式等)

  • 红外指令由 ESP-01 发射

  • 通过已有的智能插座监测空调功率,判断指令是否生效

  • 实现“指令发出 → 空调响应 → 状态反馈”闭环


🧰 二、所需物料清单

表格

类别

名称

数量

备注

主控

ESP-01 模块

1

已有

红外发射

5mm 红外 LED

1

已有

驱动电路

S8050 三极管(D331)

1

已有

电阻

1kΩ、33Ω(1/4W)

各1

已有

红外接收

VS1838B 红外接收头

1

已有(用于学习)

电源

3.3V 稳压电源(≥500mA)

1

推荐 AMS1117-3.3 + USB 供电

连接

杜邦线、面包板或洞洞板

若干

其他

格力原装遥控器

1

用于学习

智能设备

支持米家的智能插座

1

空调必须单独插在此插座上

✅ 所有电子元件总成本约 ¥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.3V

2. 红外发射电路(成品保留)

.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

📝 建议保存为表格:

表格

功能

协议

数据(十六进制)

开机+26℃制冷

GREE

0xB0E0708F

关机

GREE

0xB0E0704F

📤 六、第二步:正式控制代码(集成 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. 确保智能插座已接入米家,命名为 “客厅空调”

  2. 进入 “智能家居” → “创建自动化”

  3. 设置两条自动化:

自动化 1:确认空调开启成功

  • 触发条件:小爱同学执行了“打开空调”(或 Blinker 设备触发)

  • 延迟:15 秒

  • 执行动作

    • 获取“客厅空调”当前功率

    • 如果 功率 > 100W → 小爱播报:“空调已成功开启”

    • 否则 → 小爱播报:“未检测到空调启动,请重试”

自动化 2:确认空调关闭

  • 触发条件:小爱执行“关闭空调”

  • 延迟:30 秒(等待压缩机停机)

  • 如果功率 < 10W → 小爱播报:“空调已关闭”

✅ 这样你就实现了无需额外硬件的状态反馈


🛠️ 八、调试与常见问题

问题

可能原因

解决方法

红外不发射

GPIO2 接错 / 三极管引脚反

用手机摄像头验证 LED 是否闪烁

空调无反应

红外码不对 / 校验错误

重新学习,确保串口显示“GREE”协议

ESP-01 重启

电源电流不足

改用 5V USB + AMS1117-3.3 供电

Blinker 连不上

WiFi 密码错 / 信号弱

检查串口日志,靠近路由器

智能插座误判

插座插了其他电器

空调必须独占一个智能插座

🎯 九、最终效果

  • 对小爱说:“小爱同学,打开空调

    • ESP-01 发射红外信号

    • 空调启动,功率从 2W → 800W

    • 15 秒后,小爱播报:“空调已成功开启

  • 在 Blinker App 中点击“关机”,空调停止运行

✅ 完全替代原装遥控器,且支持远程、定时、语音、自动化!


📦 十、后续升级建议

  1. 增加温湿度传感器(DHT11) → 实现“室温>30℃自动开空调”

  2. 用 ESP-12F 替代 ESP-01 → 更稳定,可加 OLED 显示状态

  3. 3D 打印外壳 → 做成墙面嵌入式遥控器

  4. 接入 Home Assistant → 实现更复杂的场景联动