ESP8266结合红外接收器调用Fibaro HC3 Quick App按钮API方案咨询
在Arduino环境中实现ESP8266红外触发Fibaro Quick App API调用
核心实现思路
通过ESP8266完成三个核心动作:连接WiFi网络、读取红外按键编码、匹配编码后发送HTTP请求调用Quick App的API。
1. 依赖库准备
需要在Arduino库管理器中安装以下库:
IRremoteESP8266:处理红外信号接收WiFi:ESP8266基础网络连接HTTPClient:发送HTTP请求
2. 关键配置与代码实现
完整示例代码
#include <WiFi.h> #include <HTTPClient.h> #include <IRremoteESP8266.h> #include <IRrecv.h> // WiFi网络配置 const char* ssid = "YOUR_WIFI_SSID"; const char* password = "YOUR_WIFI_PASSWORD"; // Fibaro HC3配置 const char* hc3IP = "192.168.1.100"; // HC3的局域网IP const int hc3Port = 80; // 若使用HTTPS则改为443 const char* quickAppApiPath = "/api/quickapps/[YOUR_QUICKAPP_ID]/action/triggerButton"; // 从浏览器开发者工具获取的API路径 const char* authHeader = "Bearer YOUR_HC3_API_TOKEN"; // 从浏览器请求头中复制的认证信息 // 红外接收器配置 const uint16_t IR_RECV_PIN = D1; // 红外接收器连接的ESP8266引脚 IRrecv irrecv(IR_RECV_PIN); decode_results irResults; // 预设红外按键编码(从串口监视器获取) const uint32_t IR_KEY_POWER = 0xFFA25D; const uint32_t IR_KEY_VOL_UP = 0xFF629D; // 连接WiFi void connectToWiFi() { WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nWiFi已连接,IP地址:"); Serial.println(WiFi.localIP()); } // 调用Quick App API void triggerQuickAppButton() { // 检查WiFi连接状态,断开则重连 if (WiFi.status() != WL_CONNECTED) { Serial.println("WiFi断开,正在重连..."); connectToWiFi(); return; } HTTPClient http; String apiUrl = "http://" + String(hc3IP) + ":" + String(hc3Port) + quickAppApiPath; // 初始化HTTP请求 http.begin(apiUrl); http.addHeader("Authorization", authHeader); http.addHeader("Content-Type", "application/json"); // 发送请求(根据浏览器的请求方法选择GET/POST) int httpCode = http.GET(); // 若API要求POST,替换为:int httpCode = http.POST("{\"buttonId\":\"btn1\"}"); // 处理响应 if (httpCode > 0) { Serial.printf("API调用成功,HTTP状态码:%d\n", httpCode); Serial.println("响应内容:" + http.getString()); } else { Serial.printf("API调用失败:%s\n", http.errorToString(httpCode).c_str()); } http.end(); // 释放资源 } void setup() { Serial.begin(115200); irrecv.enableIRIn(); // 初始化红外接收模块 connectToWiFi(); } void loop() { // 读取红外信号 if (irrecv.decode(&irResults)) { Serial.printf("收到红外编码:0x%08X\n", irResults.value); // 匹配按键编码,触发对应API if (irResults.value == IR_KEY_POWER) { Serial.println("匹配到电源键,调用Quick App按钮API..."); triggerQuickAppButton(); } else if (irResults.value == IR_KEY_VOL_UP) { Serial.println("匹配到音量+键,调用另一个Quick App动作..."); // 可在这里调用其他API或修改triggerQuickAppButton函数传参 } irrecv.resume(); // 恢复接收下一个红外信号 } delay(100); }
3. 关键步骤说明
获取红外按键编码
- 烧录基础红外接收代码(仅打印编码),打开串口监视器。
- 按下红外遥控器的按键,复制串口输出的编码值,替换代码中
IR_KEY_POWER等常量的值。
获取Quick App API信息
- 在浏览器中打开HC3的Quick App按钮API调用页面,按下F12打开开发者工具。
- 手动触发按钮API,在网络标签中查看请求的:
- 请求URL(提取HC3 IP和API路径)
- 请求方法(GET/POST)
- 请求头中的
Authorization字段(复制认证令牌)
注意事项
- 确保ESP8266与HC3处于同一局域网,能正常访问HC3的IP。
- 若HC3使用HTTPS,需改用
WiFiClientSecure,并可临时关闭证书验证(测试用):WiFiClientSecure client; client.setInsecure(); // 禁用证书验证 http.begin(client, apiUrl); - 可添加按键防抖逻辑,避免短时间内重复触发API:比如记录上次触发时间,间隔小于2秒则跳过。
内容的提问来源于stack exchange,提问作者Home Intelligent
相关产品推荐
相关产品推荐

