本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:期望氢气球

  在越来越多家电拥抱智能化的今天,我们买回来的很多设备例如海尔、TCL 等设备往往依旧缺乏直接接入 Home Assistant 的途径。第三方插件不是停止维护,就是被官方强制下架,导致全屋智能化之路走两步退一步。

  用红外遥控让老家电秒接入 Home Assistant

  其实多数家电明明支持红外遥控,如果我们能把遥控器的信号学会,也就能让任何传统设备变得可编程、可自动化。

  红外控制简单、稳定、不依赖厂家 API,是最容易掌握的曲线救国路线。本文将介绍如何使用 ESP32-C3,通过一个普通 GPIO 引脚实现完整的 NEC 协议接收与解码,让你的传统电视、风扇、空调转眼间融入 Home Assistant。

  用红外遥控让老家电秒接入 Home AssistantNEC 协议快速理解:低电平时间代表 0 或 1

  NEC 是最常见的红外协议,其结构固定,由引导码、地址、地址反码、命令、命令反码组成。高电平脉冲几乎固定,而低电平脉冲长度直接表示逻辑值:

  • 560 μs 低电平 → 逻辑 0
  • 1690 μs 低电平 → 逻辑 1

      因此只要能准确测量脉冲时长,协议就能轻松重建。

      用红外遥控让老家电秒接入 Home Assistant用 GPIO 中断捕获脉冲

      下面的 ISR 函数是整个系统的核心,它会在每次电平变化时触发,并记录电平持续时间。

      #define IR_BUFFER_SIZE 68 volatile uint32_t irBuffer[IR_BUFFER_SIZE]; volatile uint8_t irIndex = 0; volatile uint32_t lastTime = 0; volatile bool irReady = false; void IRAM_ATTR irReceiveISR() { uint32_t now = micros(); uint32_t duration = now - lastTime; lastTime = now; if (duration > 10000) { irIndex = 0; irReady = false; } if (irIndex < IR_BUFFER_SIZE) { irBuffer[irIndex++] = duration; } else { irReady = true; } }

      这段代码只做三件事:记录时间戳、计算间隔、存入缓冲区。ISR 不做任何逻辑判断,保证中断处理极快,也让系统稳定性更佳。

      初始化 GPIO 中断时使用 CHANGE 模式,确保每个上升沿与下降沿都被捕获。

    NEC解码

      当接收到完整信号后,我们进入解码阶段。NEC 的引导码时序非常有标识性,因此先验证它是否满足规范,再根据每对脉冲的低电平时长判定数据位。

      下面是解码函数:

      uint32_t decodeNEC() { if (irIndex < 34) return 0; if (irBuffer[1] < 8000 || irBuffer[1] > 10000) return 0; if (irBuffer[2] < 3500 || irBuffer[2] > 5500) return 0; uint32_t data = 0; for (int i = 0; i < 32; i++) { int highIdx = 3 + i * 2; int lowIdx = highIdx + 1; if (lowIdx >= irIndex) break; if (irBuffer[highIdx] < 300 || irBuffer[highIdx] > 800) continue; if (irBuffer[lowIdx] > 1200) data |= (1UL << i); } return data; }

      NEC 的位序是 LSB-first,因此第一个位对应最低位。阈值 1200 μs 刚好处于逻辑 0 与逻辑 1 之间,容错性非常好。

      解析出来的 32 位数据中:最低字节为地址,接着是地址反码,然后是命令与命令反码。反码结构提供了天然的校验能力,你可以在 Home Assistant 中利用命令字节来进行自动化触发。

    让 Home Assistant 接管传统家电

      当你能稳定解析 NEC 协议后,将其融入 Home Assistant 就变得异常简单。你可以把 Home Assistant 的事件映射到某个红外按键,或者接收到 MQTT 消息发射特定红外信号,从而让自动化系统实现真正的接管。

      例如按空调遥控器开机 → 触发房间照明关闭与窗帘关闭

      #在头条安利我的兴趣#

      本文标题:用红外遥控让老家电秒接入 Home Assistant

      本文链接:http://www.gzlysc.com/news/15275.html