1. 项目缘起:从“智能开关”到“万能遥控器”的蜕变
几年前,我为了给家里的老式台灯和风扇加上远程控制,入手了几个Sonoff Basic。这玩意儿在智能家居DIY圈子里名气不小,说白了就是个带Wi-Fi的继电器模块,能让你通过手机App控制电路的通断。它确实解决了“开关”的问题,但用久了,我发现它的潜力远不止于此。官方固件和App虽然方便,但限制也多,比如必须依赖厂商的云服务,网络一断就抓瞎,自动化逻辑也比较基础。
后来接触到MQTT和Home Assistant这类本地化智能家居平台,我才意识到,Sonoff Basic真正的价值在于它是一块绝佳的“硬件画布”。刷上开源固件,它就能从一个受制于人的“智能开关”,变身成一个完全由你掌控、可以通过网络协议(MQTT)与任何智能系统对话的“万能遥控器”。这个项目,就是要把一个最基础的Sonoff Basic,改造成一个支持MQTT协议的“干接点继电器”,并且额外引出稳定的5V电源。改造完成后,它不仅能控制灯,还能联动你的NAS在深夜自动备份、让咖啡机在清晨准时启动,甚至作为传感器信号的触发开关——只要你敢想,它几乎能介入任何低压直流或交流电器的控制回路。
2. 核心改造目标与硬件原理拆解
在动手之前,我们必须彻底搞清楚两件事:我们要把它变成什么,以及它原本是什么。
2.1 什么是“MQTT干接点继电器”?
这听起来有点专业,拆开看就明白了:
- MQTT:一种极其轻量级的发布/订阅消息协议。你可以把它理解为一个“消息中转站”或“群聊”。你的智能家居服务器(如Home Assistant)在“群聊”里发布一条消息:“打开书房灯”。改造后的Sonoff Basic“订阅”了这个“书房灯”话题,收到消息后,就执行对应的动作——闭合继电器。整个过程在局域网内完成,无需外网,响应快,隐私好。
- 干接点 (Dry Contact):这是继电器输出的专业叫法。意思是,继电器模块内部提供的只是一组纯粹的、物理的开关触点(就像普通墙壁开关里的那两个铜片)。这组触点与Sonoff自身的电路是电气隔离的。它不输出电压,也不决定电流方向。你可以用它去控制一个24V的工业电磁阀,也可以去接通一个220V的照明电路。控制什么、怎么控制,完全由你外部连接的电路决定,赋予了它极大的灵活性。
- 5V输出:Sonoff Basic内部有一个开关电源模块,将输入的100-240V交流电(AC)转换为3.3V直流电(DC)供其主控芯片(ESP8266)运行。我们的改造之一,就是从其电源部分稳妥地引出一个5V直流电。这个5V电源可以用来给需要它供电的外部设备供电,比如一个温湿度传感器、一个红外接收头,或者另一个微控制器,从而实现“一线供电,一体控制”,无需再外接一个电源适配器。
所以,改造的终极目标,是得到一个可以通过MQTT指令控制、带有一组通用开关触点、并能提供5V/1A左右辅助电源的智能继电器模块。
2.2 Sonoff Basic R2 硬件探秘
我手头这个是市面上最常见的Sonoff Basic R2版本。撬开外壳,可以看到一块紧凑的PCB板。
- 核心大脑 (ESP8266):板子中央那个小小的方形芯片是核心。这是一颗集成了Wi-Fi功能的微控制器,性能强大,正是其可玩性的基础。我们后续刷写的第三方固件,就是运行在它里面。
- 电力心脏 (开关电源模块):交流电从L、N输入端进入后,首先经过一个整流桥堆,然后通过一个型号为
OB2500CP的开关电源芯片及其周边电路(电感、电容、二极管),将高压直流转换为低压直流。这部分电路原本输出约3.3V给整个系统供电。我们需要从中找到合适的点位,引出5V电压。 - 执行机构 (继电器):一个蓝色的塑封继电器,型号通常是
HF32F/5-Z或类似。它有一组线圈(接受芯片控制)和一组转换触点(COM, NO, NC)。COM是公共端,NO(常开)和COM在继电器不动作时是断开的,动作后闭合;NC(常闭)则相反。我们通常使用COM和NO作为控制触点。 - 控制接口 (GPIO):ESP8266芯片的引脚被引出了若干到板子的焊盘上。其中,
GPIO0、GPIO14等关键引脚的状态,决定了芯片的启动模式(正常启动还是刷机模式)。GPIO12通常被用来控制继电器。这些焊盘是我们刷机时需要接触,以及未来可能用于扩展功能的地方。
注意:操作涉及220V强电,即使断电后,板子上的大电容也可能储存有高压电。务必在操作前断开电源,并等待几分钟,或者用万用表确认电容放电完毕。安全永远是第一位的。
3. 固件刷写:赋予它“新灵魂”
要让Sonoff Basic听懂MQTT指令,必须替换掉它的原厂固件。这里我选择Tasmota,因为它成熟、稳定、社区支持强大,对MQTT的支持是原生级的。
3.1 刷机前的硬件准备
你需要一个USB转TTL串口模块(推荐CP2102或CH340G芯片的),以及几根杜邦线(母对母)。
- 连接串口模块:将串口模块的
3.3V引脚连接到Sonoff板子上标有3.3V的焊盘(切勿接5V或VIN,会烧芯片!)。GND接GND。RX接Sonoff的TX,TX接Sonoff的RX(交叉连接)。 - 进入刷机模式:这是关键一步。Sonoff Basic的
GPIO0引脚需要在上电时被拉低到GND,才能进入固件烧录模式。你需要用一根杜邦线,一头接在GPIO0焊盘上,另一头准备在通电瞬间接触GND焊盘。也可以焊一个轻触开关在两者之间,方便操作。 - 软件准备:在电脑上安装串口驱动(根据你的模块芯片型号安装),并下载
Tasmota固件。我推荐使用Tasmota WebInstaller这个工具,它把下载和刷写过程集成在了一起,非常方便。
3.2 使用 Tasmota WebInstaller 一键刷机
- 访问 Tasmota 官方安装工具页面。
- 将Sonoff Basic通过串口模块连接到电脑,在工具中选择正确的串口号。
- 工具会自动检测设备类型。对于Sonoff Basic,它通常能正确识别。
- 在固件选择页面,选择最新稳定版的
tasmota.bin(基础版本即可,功能最全)。 - 点击“Install”(安装)。此时,先给Sonoff Basic上电(插上220V电源),同时确保
GPIO0已接地。工具会显示连接并开始擦除、烧写。整个过程大约30秒。 - 刷写成功后,工具会提示。此时,断开Sonoff的电源,移除
GPIO0和GND之间的短接线。
3.3 初次配置与网络连接
重新上电后,Sonoff会创建一个名为tasmota_XXXXXX的Wi-Fi热点。用手机或电脑连接这个热点。
- 连接后,通常会自动弹出配置页面。如果没有,在浏览器打开
192.168.4.1。 - 在配置页面,找到你的家庭Wi-Fi网络(SSID),输入密码,然后点击保存。
- Sonoff会自动重启并尝试连接你的路由器。连接成功后,你需要到路由器的管理界面(或使用
Fing这类网络扫描App)查看DHCP客户端列表,找到名为tasmota-XXXXXX的设备,记下它的IP地址。 - 在浏览器中输入这个IP地址,就能看到Tasmota的Web管理界面了!至此,固件刷写成功。
4. Tasmota深度配置:从连接到自动化
进入Web界面,我们开始进行核心的MQTT和继电器功能配置。
4.1 MQTT服务器连接配置
这是让Sonoff与智能家居大脑对话的关键。
- 在Tasmota网页,点击Configuration -> Configure MQTT。
- Host:填写你的MQTT服务器地址。如果你在树莓派上安装了Mosquitto,就填树莓派的局域网IP,例如
192.168.1.100。 - Port:默认
1883,如果改了就用改后的端口。 - Client:可以自定义,如
sonoff_basic_01,用于在服务器端识别。 - User和Password:如果你的MQTT服务器设置了认证,就填写。
- Topic:这是最重要的设置。我建议使用
%prefix%/%topic%/的默认格式。它会生成像tele/sonoff_basic_01/STATE和cmnd/sonoff_basic_01/POWER这样的主题。%topic%默认是你的设备名。你可以修改Full topic为homeassistant/%prefix%/%topic%以更好地融入HA。 - 点击“Save”,设备会重启并尝试连接MQTT服务器。在Console标签页输入
Status 0,查看输出中MQTT是否显示为Connected。
4.2 继电器与按钮功能配置
默认情况下,Tasmota已经将继电器映射好了。但我们需要理解并优化其行为。
- 继电器控制:在Console输入
Power on和Power off,应该能听到继电器清脆的吸合与释放声,同时网页上的按钮状态会变化。对应的MQTT命令主题就是cmnd/<你的设备名>/POWER,发送ON或OFF的payload即可控制。 - 物理按钮功能:Sonoff Basic上那个白色按钮默认被设置为:短按切换继电器状态,长按进入配网模式。这很合理,通常无需更改。你可以在Configuration -> Configure Module里查看和修改按钮对应的GPIO引脚关系(Button1通常对应GPIO0)。
- 状态反馈:Tasmota会定期向
tele/<设备名>/STATE主题发布设备状态(JSON格式),包含继电器开关状态、Wi-Fi信号强度等。这对于Home Assistant等平台自动发现设备至关重要。
4.3 集成到Home Assistant (HA)
这是体验自动化魅力的时刻。如果HA中已经安装了Mosquitto add-on并正确配置。
- 在Tasmota设备正确连接MQTT后,重启HA。
- HA的MQTT自动发现功能很可能已经找到了它。在“设备与服务”中,你应该能看到一个来自MQTT的新设备。
- 点击“配置实体”,HA会自动为其创建一个名为
switch.sonoff_basic_01的开关实体。 - 现在,你可以在HA的仪表盘上添加这个开关卡片,进行手动控制。更重要的是,你可以编写自动化:例如,“当人体传感器检测到卫生间有人移动时,打开这个开关(即打开灯)”;或者“在日出前30分钟,打开这个开关(即打开咖啡机)”。
5. 硬件改造实战:引出5V电源与干接点
软件部分搞定后,我们来实施硬件改造,让它真正成为“万能”模块。
5.1 定位并安全引出5V电源
Sonoff Basic的原始电源输出是3.3V,我们需要找到开关电源电路中电压稍高的点。经过测量和社区验证,在开关电源芯片OB2500CP附近,有一个滤波电容(通常是C7,一个较大的贴片电容,可能标有106或226),其正极对地(GND)的电压在5V到5.5V之间。这个电压是未经过LDO稳压的,但驱动一些小电流设备足够稳定。
操作步骤:
- 断电并放电:确保设备完全断电,并用万用表确认高压电容两端无电压。
- 定位测试点:找到
C7电容(或类似的大贴片电容)。用万用表直流电压档,黑表笔接一个已知的GND点(如USB串口模块的GND焊盘),红表笔轻轻触碰该电容的正极(有极性标识的一端)。上电,确认电压在5V左右。 - 焊接引线:确认点位后,断电。使用细导线(如AWG24硅胶线),一端焊接在电容正极,另一端准备引出。同样,从任意
GND点焊接一根地线。 - 过孔与绝缘:在Sonoff外壳上合适的位置钻一个小孔,将两根导线穿出。务必确保导线与内部高压部分(交流输入侧、继电器触点引脚)有充分的物理隔离,必要时使用热缩管或绝缘胶带包裹。可以在导线的外部端焊接一个标准的2.54mm排针母座,方便插拔。
重要警告:这个5V电源是从主电源直接变换而来,与市电没有隔离。绝对禁止用这个5V去给任何需要与人体接触或接地的设备(如手机、平板)充电。它仅适用于同样“浮地”的、完全封闭在绝缘外壳内的低压电路供电,例如同一个控制箱里的传感器。
5.2 明确与使用干接点
这部分其实无需改造,只需要正确理解和使用。
- 识别触点:继电器上通常有标识。
COM(公共端)、NO(常开端)、NC(常闭端)。我们使用COM和NO。 - 接线示例:
- 控制一盏灯:将市电的
火线接入Sonoff的L-IN,L-OUT接到灯的一端。灯的零线直接接市电零线。这是Sonoff的标准用法。 - 作为一个低压开关:假设你有一个12V的直流水泵,由单独的12V适配器供电。将适配器正极输出接到继电器的
COM端,将水泵的正极接到继电器的NO端。水泵的负极直接接适配器负极。这样,当Tasmota控制继电器闭合时,12V电路导通,水泵工作。这里的继电器触点就是纯粹的“干接点”,只负责通断,不提供电源。
- 控制一盏灯:将市电的
6. 进阶应用与避坑指南
改造完成后,它的玩法就只受你的想象力限制了。
6.1 应用场景拓展
- 智能鱼缸/植物灌溉:用5V电源给一个土壤湿度传感器供电,传感器数据通过另一个GPIO口回传给ESP8266(需额外编程)。Tasmota支持规则(Rule),可以设定当湿度低于阈值时,自动闭合继电器打开水泵浇水。
- 车库门状态监控与控制:将干接点并联到车库门控制器的按钮开关上。再通过一个门磁传感器连接到ESP8266的另一个GPIO。这样,你不仅可以用手机遥控车库门,还能在HA里看到车库门的实时状态(开/关)。
- 传统家电红外遥控:如果你有一个支持红外学习的智能插座(或单独的红外模块),可以用这个5V电源给它供电。然后编写HA自动化:“当Sonoff继电器闭合(比如由‘离家模式’触发)时,向红外模块发送‘电视关机’的指令。”实现全屋联动断电。
6.2 常见问题与排查心得
刷机失败,电脑无法识别串口:
- 检查驱动:确保安装了正确的USB转TTL驱动。
- 检查接线:确保
3.3V、GND、TX、RX连接正确且牢固。尤其注意,一定是3.3V,不是5V。 - 检查GPIO0:确保在上电瞬间,
GPIO0是持续稳定地接地。接触不良是失败主因。焊一个轻触开关是最可靠的方法。
Tasmota无法连接Wi-Fi或MQTT:
- Console信息:在Tasmota的Web Console里输入
Status 0和Wifi查看详细状态。 - Wi-Fi信号:如果信号弱(RSSI值低于-70),考虑调整设备位置或增加中继。
- MQTT连接:检查服务器IP、端口、用户名密码是否正确。在服务器端使用
mosquitto_sub命令监听#主题,看设备是否在尝试连接和发布消息。
- Console信息:在Tasmota的Web Console里输入
5V电源带载能力差或不稳定:
- 从
C7电容引出的5V电源,其输出电流能力有限,估计在300-500mA左右。如果连接设备后电压被拉低,说明负载太重。建议仅用于传感器、小功率单片机等。 - 如果需要更大功率的5V电源,更安全的做法是使用一个独立的、与市电隔离的5V开关电源模块,将其输入并联在Sonoff的交流输入端(L, N)之前,利用Sonoff的继电器来控制这个独立电源的通断。
- 从
继电器状态与预期相反:
- 有些设备的控制逻辑是“低电平触发”。你可以在Tasmota的Console里使用
SetOption0命令来反转继电器的控制逻辑。SetOption0 1会将其设为“开关接通时继电器断开”,根据你的实际接线和设备需求调整。
- 有些设备的控制逻辑是“低电平触发”。你可以在Tasmota的Console里使用
这个项目最让我着迷的地方在于,它用极低的成本和一定的动手门槛,打破了消费级智能硬件和工业控制之间的壁垒。当你看到自己改造的小模块,稳稳地执行着你编写的自动化指令,控制着家里大大小小的设备时,那种成就感和掌控感,是购买成品无法比拟的。它不再是一个“Sonoff开关”,而是你智能家居系统中一个可靠、透明的神经元节点。