所需软件
- Arduino IDE
- Blinker App
- blinker-library (点灯科技官方库)
- IRremoteESP8266 (强大的红外收发库)
Arduino IDE 库安装
- 打开Arduino IDE,进入
项目->加载库->管理库...。 - 搜索并安装以下库:
Blinkerby blinkerIRremoteESP8266by David Conran, Mark Szabo, et al.DHT sensor libraryby Adafruit
核心代码功能解析
完整的程序代码较长,这里重点解析几个核心功能模块。
1. 红外信号学习与存储
当设备进入学习模式后,用户按下遥控器,程序会将接收到的红外信号解码并存储到EEPROM中。
void RunIr_r() {
if (isStudy && IRR.decode(&results)) {
// ... 校验地址 ...
uint64_t data2 = results.value;
EEPROM.begin(4096);
EEPROM.put(address, data2);
if (EEPROM.commit()) {
Serial.printf("保存成功! 地址:%d, 数据:0x%llX\n", address, data2);
Blinker.notify("红外码已保存!"); // 手机App会收到通知
}
EEPROM.end();
IRR.resume(); // 接收下一个信号
}
}
2. 红外信号发送
发送时,直接从EEPROM读取之前存储的编码,并通过irsend.sendCOOLIX函数发射出去。
void SendIr() {
uint64_t data1;
EEPROM.begin(4096);
EEPROM.get(address, data1);
EEPROM.end();
if (data1 != 0) {
irsend.sendCOOLIX(data1); // 发送Coolix协议信号
Serial.printf("发送地址:%d\tdata:0x%llX\n", address, data1);
Blinker.notify("红外指令已发送");
}
}
3. 双重保障的网络连接管理
这是设备稳定性的关键。我们实现了主动重连和超时重启两个机制。
- 主动重连:在Blinker断开连接且互联网正常时,每2分钟主动尝试重新连接Blinker。
- 超时重启:如果Blinker断开连接超过10分钟,设备将认为发生了无法恢复的错误,并自动重启,作为最终的“看门狗”手段。
void checkBlinkerConnection() {
// ...
bool isConnected = Blinker.connected();
bool internetOk = checkInternetConnection();
if (!isConnected && internetOk) {
// 1. 每2分钟尝试重连
if (currentTime - lastReconnectAttemptTime >= RECONNECT_INTERVAL) {
reconnectBlinker();
lastReconnectAttemptTime = currentTime;
}
// 2. 超过10分钟重启
if (currentTime - blinkerDisconnectStartTime >= BLINKER_RECONNECT_TIMEOUT) {
Serial.println("⚠️ 连接超时,执行重启...");
delay(5000);
ESP.restart();
}
}
}
Blinker App 界面配置
- 在Blinker App中,点击右上角的“+”号,选择“独立设备”,获取一个设备Key。
- 将代码中的
auth[]替换为该Key。 - 在App的编辑模式下,添加以下组件(与代码中的组件名称严格对应):
btn-On:开关按钮(按键类型)btn-Study:学习模式开关(按键类型)btn-Cool、btn-Hot、btn-Wind:模式选择按钮(按键类型)num-6fm、num-7tk:数据显示组件,用于显示温湿度。
使用步骤
重复以上步骤,学习所有需要的功能键。
硬件连接:按照电路图完成接线。
烧录程序:使用Arduino IDE将完整代码上传到ESP8266。
配置WiFi:在代码中填写您的WiFi名称和密码。
学习遥控码:
打开Blinker App,点击“学习模式”按钮。
在App上点击您要设置的功能键(如“开关-On”)。
用空调遥控器对准红外接收头,按下对应的按钮(如“开关”键)。
App会提示“红外码已保存!”。
源码附件