☰
openrig:基于ESP32与MQTT的智能继电器控制中枢及Home Assistant集成指南
2026/11/2 14:30:19 网站建设 项目流程

收到,我来用资深从业者的角度,把 openrig 这个项目拆开揉碎讲清楚。

先说个背景。我去年帮朋友做一套小型工作间的环境监测与控制设备,翻遍了市面上的成品智能通断器,要么价格离谱,要么封闭协议没法二次开发,要么数据根本拿不出来。后来在开源的犄角旮旯里翻到 openrig 这个项目,一眼就相中了。

如果你也在折腾智能家居或者小型自动化改造,手里有 ESP32 开发板,想用一套还算干净的开源方案把继电器、传感器、执行器统一管起来,并且能无缝接进 Home Assistant,那 openrig 是个很值得研究的起点。这篇就来聊聊它到底解决什么问题、怎么部署、怎么和 HA 联动,以及我实际踩过的几个坑。

1. openrig 是什么:一枚高性价比的智能控制中枢

openrig本质上是一个基于 ESP32 的固件项目,它的定位很清晰:把开发板变成一个可以通过 MQTT 协议远程控制的“多路继电器 + 多路传感器 + 基础自动化”组合体。你不需要自己从零写 TCP 协议,不需要折腾复杂的加密通信,只要把 Wi-Fi 连上、MQTT Broker 地址填对,设备就能快速接入现有的家庭自动化体系。

1.1 核心需求解析:为什么不用成品智能插座

我见过太多人一开始买一堆 WiFi 插座、红外遥控器,最后发现最大的问题不是“不能控制”,而是“控制不了状态”。WiFi 插座被你手动按了一下,App 里还是“关”;传感器电池没电了,报警逻辑还挂在旧状态上。这种半吊子的状态同步,在做自动化的时候非常致命。

openrig 的解决思路不一样。它把设备端的开关状态、传感器读数、连接状态全部通过 MQTT 的 retained 消息实时上报,Broker 端永远保存最新状态。任何新接入的客户端,订阅同一个 Topic 就能立刻拿到当前设备的真实情况,而不是靠轮询去猜。这一点,是大量成品智能硬件做不到的。

1.2 为什么是 ESP32 而不是树莓派或其他方案

很多人问我,跑自动化我用树莓派不是更强吗?还有 Docker、Node-RED、各种 fancy 的东西。没错,树莓派是更强,但它强在对性能敏感的应用,比如图像识别、视频流处理、复杂规则引擎。

openrig 的目标场景恰好相反,它要的是:7x24 小时低功耗运行、启动速度快、接线简单、坏了成本低。ESP32 板子几十块钱,坏了重新烧录固件五分钟恢复,功耗在毫瓦级别,树莓派做不到这一点。而且 ESP32 的 GPIO 引脚可以直接驱动继电器模块,内置 ADC 直接读模拟传感器,原生支持 WiFi 和蓝牙,这些特性集中在几十块钱的开发板上,性价比确实没得选。

1.3 功能清单:一个能打的控制面板

我用了大半年,openrig 给我留下的印象可以归纳成这样几个层面:

  • 多通道继电器控制:通过 GPIO 直接控制继电器模块,支持开、关、脉冲三种模式,脉冲时长可以配置到毫秒级,用来控制门锁、自锁电路非常顺手。
  • 传感器接入:支持读取模拟量通道和常见数字传感器,比如温湿度、光照强度、水位等,数据统一走 MQTT 上送。
  • ** OTA 无线升级**:固件迭代不需要拆机接线,直接在 Web 管理页面上传 bin 文件。
  • ** Web 配置界面**:开机后设备提供 AP 模式,手机连上之后就能配置 Wi-Fi、MQTT 参数,不用装任何驱动软件。
  • 与 Home Assistant 原生集成:通过 MQTT Discovery 实现自动发现实体,接入 HA 之后设备和传感器会自动出现在仪表盘。

这套组合很有吸引力,因为它覆盖了“数据采集 + 执行控制 + 系统集成”整个链路,而不是只做其中某一个环节。对于小型自动化项目来说,一个足够简单的闭环比一堆强的模块拼起来更可靠。

2. 硬件选型与首次部署:从零点亮开发板

项目层面无论多漂亮,落地的时候还是要回到硬件。我把自己实际用的一套配置和踩坑经历写下来,照抄基本能跑通。

2.1 硬件清单与选型避坑

核心硬件:

  • ESP32 开发板,建议选 WROOM-32 模组版本的,GND/GPIO 引出完整的那种。注意别买成 ESP32-C3 或者 S2,引脚定义差异比较大,直接照着 openrig 默认配置用 WROOM-32 最省事。
  • 继电器模块,我用的两路和四路版,5V 供电,输入信号脚带光耦隔离。选继电器的时候重点看背后是否带续流二极管和光耦,没有的话在 ESP32 断电瞬间很容易把 GPIO 打坏。
  • 传感器部分,我初期只接了 DS18B20 温度传感器和一个光敏电阻模块,都是 3.3V 就能驱动的型号,不用额外电源。

接线的时候有一个容易翻车的细节:继电器模块虽然是 5V 供电,但信号输入引脚的电平逻辑很微妙。部分模块直接用 5V 做上拉,如果 ESP32 的 GPIO 不是开漏/耐压模式,直接接 3.3V 输出是能用的,但反过来如果模块要求 5V 逻辑,那 ESP32 就带不动。所以买模块的时候一定要看清楚说明,选“3.3V 信号兼容”的型号,否则你排查半天还以为代码写错了。

提示:所有接线都遵循“先电源、后信号”的顺序。先把 5V 和 GND 接好,再插信号杜邦线。我之前偷懒反向操作,结果继电器吸合瞬间的电流尖峰把开发板复位了,排查了整整一个晚上。

2.2 固件烧录:第一次点亮板子

openrig 的固件可以在 Releases 页面直接下载编译好的二进制文件,也可以自己用 PlatformIO 从源码构建。我建议新手第一轮直接下载官方固件,跑通整个链路之后再考虑改代码。

烧录工具我用的是 esptool.py。Windows 和 macOS 都有预编译版本,安装也不复杂。接到 ESP32 之后,先按住板上 BOOT 键再插 USB,进入下载模式,然后执行:

esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash \ --flash_mode dio --flash_size 4MB \ 0x1000 openrig-firmware.bin

这里有个细节,0x1000是 ESP32 的引导程序偏移地址,不能随便改。烧录完成后按一下复位键,打开串口监视器,波特率调到 115200,能看到设备进入 AP 模式的日志。

2.3 首次配置:把设备连上你的 WiFi

第一次上电,ESP32 会开一个名字类似openrig-xxxx的无线热点,密码在项目文档里有默认值。手机连上这个热点,浏览器访问192.168.4.1,就能看到配置页面。

页面里需要填的信息主要是:

  • 无线路由器的 SSID 和密码
  • MQTT Broker 的地址和端口(默认 1883)
  • 设备名称,注册到 MQTT 后作为 Topic 前缀

配置保存之后设备会自动重启,重启后不再开热点,而是连接你填的 WiFi。这里我踩过第一个坑:配置页保存后如果连不上 WiFi,设备会一直尝试连接,这时候你想重新配置,需要按住板子上某个 GPIO 按键进入“恢复模式”。不同版本触发方式不一样,有的是 GPIO0 接地开机,有的是按住 BOOT 再上电。我建议保存配置之前,先把恢复模式的操作步骤抄下来贴在设备旁边,不然你会狼狈地蹲在弱电箱前面一遍遍拔插 USB。

2.4 OTA 升级:后续维护不用拆机箱

OpenRIG 的 Web 界面里提供了 OTA 升级入口,不需要像第一次烧录那样接串口线。上传编译好的新固件.bin文件,进度条走完设备自动重启。

OTA 唯一的风险是:新固件可能存在配置不兼容的情况,升级后设备会启动失败。所以我现在的习惯是,升级前先通过 Web UI 导出一份配置备份;升级后如果设备反复重启,就用恢复模式重新刷回旧版本。这套流程走顺了,维护成本其实极低。

3. 系统集成:接入 Home Assistant 与自动化配置

如果说烧录固件是让设备“活着”,那接入 Home Assistant 就是让设备“干活”。

3.1 MQTT Broker 搭建与配置

没有任何 MQTT Broker,openrig 就是个孤岛设备。我自己一直在用 Mosquitto,容器化部署非常简单:

docker run -d --name mqtt \ -p 1883:1883 -p 9001:9001 \ -v /opt/mosquitto/config:/mosquitto/config \ eclipse-mosquitto:2

如果 Mosquitto 2.0,注意默认配置不允许匿名访问。在mosquitto.conf里至少加两行:

allow_anonymous true listener 1883

不过生产环境我强烈建议关掉匿名访问,创建独立用户和密码。MQTT 的 Topic 结构虽然不敏感,但你家里的门锁、窗帘执行器全挂在里面的时候,裸奔的 Broker 就跟你家门钥匙放门口地垫下面一样刺激。

3.2 自动发现机制:为什么接上就能用

Home Assistant 对 MQTT 设备有一套“Discovery”协议。简单理解就是:设备在特定的 Topic 上发布一个 JSON 配置,HA 收到后自动创建对应实体。

openrig 固件启动后会自动向homeassistant/switch/设备名/config这类 Topic 发布发现消息。只要你在 HA 的configuration.yaml里配置好了 MQTT Broker 地址,设备通电连上 WiFi,半分钟内 HA 里就会多出对应的开关实体和传感器实体。

这里有个前置条件,HA 里必须先配好 MQTT integration:

mqtt: broker: 192.168.1.10 port: 1883 username: ha_user password: your_password discovery: true

discovery: true是关键。很多人配了 Broker 但没开 discovery,折腾半天发现设备不自动出现,就是因为少了这一行。

3.3 实体映射与控制逻辑

OpenRIG 在 HA 里生成的实体很有规律:

  • 每个继电器通道对应一个switch.实体,如switch.rig_01_channel_1
  • 每个传感器通道对应一个sensor.实体,如sensor.rig_01_temperature

我在 HA 里做的第一个自动化是“温度过高自动开风机”。逻辑很简单:DS18B20 读到温度大于 32°C,打开继电器通道 1,驱动风机;温度回落到 28°C 以下,关闭风机,避免频繁启停。

自动化配置大概长这样:

alias: 机房降温风扇 trigger: - platform: numeric_state entity_id: sensor.rig_01_temperature above: 32 condition: [] action: - service: switch.turn_on target: entity_id: switch.rig_01_channel_1 mode: single

另一个反向自动化把温度降到 28 以下时关闭。这套逻辑跑了大半年,非常稳定。唯一要注意的是HA 的 numeric_state 触发有个默认的 5 秒去抖时间,温度传感器跳动剧烈的话,可以在 trigger 里加for: "00:00:10"避免误触发。

3.4 从自动化到场景:实际接线示例

我房间里的整套联动方案是这样的:

  • 继电器通道 1:桌面补光灯,通过 HA 自动化让它在天气阴沉的时候自动开。
  • 继电器通道 2:外接水泵,花盆湿度低于阈值时浇水 30 秒。
  • DS18B20 传感器:贴在水培箱外侧,监测水温。
  • 光敏传感器:放在窗边,用于判断“白天/夜间”状态,驱动灰度逻辑。

这些场景如果用成品智能硬件堆,至少需要三个不同品牌的多设备配合,出问题的环节成倍增加。而 openrig 一块板子全搞定,信息都在同一个 Broker 上,排错链路短,逻辑可控性高。对我这样的单打独斗型玩家来说,这个简洁度是真实生产力。

4. 扩展玩法与稳定性调优

项目跑稳定之后,我开始折腾扩展。openrig 的好处是 GPIO 引脚富余很多,加一路传感器或者执行器,完全不用动固件主要逻辑。

4.1 添加自定义传感器与执行器

想把一个普通土壤湿度传感器接进 openrig,原理很简单:传感器的模拟输出接到 ESP32 的 ADC 引脚,在固件配置里新增一个 ADC 通道。如果固件本身支持自定义 ADC 引脚和量程,直接在 Web 界面里填参数就行;不支持的话就看你自己会不会改源码。

我个人是把光敏电阻模块接到了 34 号引脚,这个引脚是 ESP32 的 ADC1 通道,可以直接读模拟量。换算成光照百分比后,在 HA 里加一个template传感器:

sensor: - platform: template sensors: light_level_percent: friendly_name: 光照强度 unit_of_measurement: "%" value_template: "{{ state_attr('sensor.rig_01_analog_1', 'value') | int / 4095 * 100 | round(0) }}"

这样 HA 界面里就有了一个 0-100% 的光照百分比实体。我用这个实体触发窗帘自动化,实测效果比单纯靠时间判断天气可靠得多,尤其是阴雨天的时候。

4.2 状态反馈与错误处理

openrig 在我这跑的过程中发生过几次继电器状态和实际物理状态不一致的情况,排查下来基本都是因为继电器模块触点老化、吸合不到位,并不是固件问题。但这不是说固件没有贡献改进空间。

我后来在自动化里加了一个“状态校验”机制:HA 向 openrig 发送开灯指令后,等待 2 秒,重新读取传感器的回传状态,如果发现没有变化,就再触发一次指令或推送错误通知。这套机制虽然简单,但能避免大冬天补光灯默默地罢工一整天。

4.3 布线设计与电源规划

电源规划这块,我想单独强调一下,因为直接关系到项目能否长期稳定运行。

ESP32 的工作电流在 Wi-Fi 开启时峰值能到 300mA 以上,如果是 5V 供电的继电器模块,同时吸合多个通道,瞬时电流可能冲到 1A 甚至更高。很多“不稳定”问题根本不是代码问题,而是 USB 供电能力不足导致的电压跌落。

我的方案是:开发板用独立的 5V/2A 电源适配器供电,继电器模块的 5V 也走同一路电源,但两个 GND 要共地。这样信号电平有共同参考点,不会有浮动电压把 GPIO 拉坏。传感器如果功耗小,直接用 ESP32 的 3.3V 引脚供电;功耗大的,单独给传感器电源模块。

4.4 低功耗与稳定性优化

如果你想省电,openrig 里有几个可以调的点:

  • 降低 MQTT 的心跳上报频率,比如温度传感器本来 5 秒一报,改成 30 秒一报,Broker 压力小很多。
  • 不需要频繁控制的继电器通道,不要开启持续保持,省下的电不多,但对电源纹波是有帮助的。
  • 定时重启定时:如果设备长时间跑,内存泄漏导致不稳定,可以在 HA 里写一个每周自动重启 openrig 的自动化。虽然是“治标不治本”,但对长周期运行很有效。

注意:ESP32 的 ADC 默认有非线性和温漂问题,如果你是用来做精确测量(比如 0.1V 级别的电池电压监测),需要先标定。我之前直接用默认 ADC 读电压,误差最大到了 5%,后来加了分压电阻和软件线性校准才把误差压到 1% 以内。

5. 常见问题排查与避坑实录

这部分是真正花时间熬出来的经验。我把遇到过的典型问题整理成一张速查表,方便你出问题时照着排查。

5.1 速查表:设备问题定位

现象可能原因排查步骤
设备无法连接 WiFi2.4G 频段被禁用确认路由器开了 2.4G,5G 频段 ESP32 不支持
配置页面打不开电脑没连上 openrig 热点确认手机/电脑 WiFi 访问的是设备热点而不是自家 WiFi
继电器不动作信号线接反 / 继电器供电不足测量继电器 VCC-GND 电压,必须稳定在 4.5V 以上
传感器读数忽高忽低电源纹波过大检查是否共地,加 100uF 电容在电源端
HA 中设备不自动出现discovery 未开启确认configuration.yaml里mqtt.discovery: true
MQTT 一直断线重连Broker 地址端口错误或用户名密码错误用 MQTT 客户端工具直接连接 Broker 测试,排除网络问题
升级固件后无限重启分区配置或配置数据异常进入恢复模式,清空配置重新配置,或重新刷旧版固件

5.2 MQTT 消息发不出?先别怀疑固件

第一次调试的时候,我遇到“设备已连 WiFi,但 HA 里看不到设备”,第一反应是刷固件。后来静下心排查才发现,是 Mosquitto 2.0 的默认配置不允许匿名访问,openrig 设备那边填的用户名密码不对,导致设备虽然连上了 WiFi,但发布消息时被 Broker 拒绝。

这个排查思路后来成了我的固定流程:先验证 Broker 是否通畅 → 再验证设备是否连上 Broker → 最后才考虑固件和配置问题。盲目刷固件只会把简单问题复杂化。

用 MQTT 客户端工具(比如 MQTT Explorer)订阅一个测试 Topic,如果设备发布的消息能收到,说明链路没问题。收不到的话,优先看 Broker 日志,几秒钟就能定位拒绝原因。

5.3 OTA 刷机失败还是变砖了

openrig 支持 OTA,但 OTA 对电源稳定性非常敏感。刷机过程中如果电压跌落,可能写到一半断电,导致固件分区变成半成品。

我的建议是 OTA 刷机时不要在仪器已经启动的情况下进行,尽量把负载设备先断电,减少电源波动。另外,OTA 之后一定要验证设备能正常启动再离开现场,最好等个 5 分钟,观察指示灯状态和串口日志。这样能把“刷机五分钟、救砖两小时”的尴尬降到最低。

5.4 继电器误动作:多半是信号电平问题

有一阵子我的继电器会在半夜自己吸合一下,排查发现是 GPIO 悬空导致。ESP32 的 GPIO 在启动期间状态不稳定,如果继电器输入信号线没有默认下拉,上电瞬间的高电平就可能触发一次误动作。

解决方案:在信号线与 GND 之间并联一个 10KΩ 下拉电阻。如果是用模块,很多模块自带下拉电阻,那你把板子选型时多看一眼即可。这个细节当时折腾了我两个晚上,血的教训写在这里。

结语

从硬件选型到固件部署,从 MQTT 接入到 HA 自动化,openrig 给我的感觉是:它不追求大而全,而是把一个很务实的控制场景做到完整闭环。对于自己搭智能家居、小型工作室联网设备、甚至实验室环境监控的人来说,这套方案是成本低、代码透明、可维护性很高的选择。

我个人在实际操作中最深的体会就是:一切自动化系统的稳定性,都建立在“真实状态可获取”这个基础上。openrig 通过 MQTT retained 消息把状态时刻握在手里,后面做任何逻辑、场景、告警都踏实。最后再分享一个小技巧:如果你打算长时间使用,记得在 HA 里给 openrig 建一个“系统监控”仪表盘,把信号强度、运行时长、最近更新时间都放上去,哪天出问题的时候,这些数据能帮你少走很多弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询