You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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. 关键步骤说明

获取红外按键编码

  1. 烧录基础红外接收代码(仅打印编码),打开串口监视器。
  2. 按下红外遥控器的按键,复制串口输出的编码值,替换代码中IR_KEY_POWER等常量的值。

获取Quick App API信息

  1. 在浏览器中打开HC3的Quick App按钮API调用页面,按下F12打开开发者工具。
  2. 手动触发按钮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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:40:44