缘起

目前市面上的智能插座产品也已经很丰富了,不过往往和厂商的APP绑定,而且一般都需要强制联网才可以正常使用,无法达到个人的定制DIY需求,例如我个人的一些需求:

1 不想联网、或者没有WiFi路由器的情况下使用智能插座

2 不想安装厂商提供的APP,需要任意手机可直接使用浏览器控制

3 希望可以从命令行配置查询,这样可以配合树莓派脚本完成联动,和树莓派上的传感器配合可实现各种场景控制。

4 智能开关自身可接入其他传感器,实现更丰富的应用

5 可随意根据自己需求DIY固件,增加新功能

求索

自己用PCB制作虽然也可以,不过往往缺少外壳、220V插座具有一定安全风险、做出来成品也会比较粗糙。所以当前最好的方式应该是采购市面上现有的成熟产品,并逆向出相关IO口,然后刷入开源的系统进行DIY。由于基于ESP8266/ESP32的资料最为丰富,可玩性更强,经过反复的搜索,最终在某鱼上大概以13元左右价格买了一批基于ESP8266的智能插座。从开关的标签说明上看,是属于华清智芯科技有限公司(http://www.smartchip.com.cn/)出的一款智能插座产品,不过在其官网上已无法搜索到相关的信息,推测应该是属于老旧的淘汰产品线,其成色做工尚可。

逆向GPIO

经过一番测试倒腾, 逆向出来了GPIO,各个功能说明如下:

继电器:GPIO4 拉高吸合,拉低断开
红灯:和继电器连在一起的,继电器开启的时候红灯亮
绿灯:GPIO16 拉高点亮,拉低熄灭按键开关:GPIO5 按下和GND连接
按键开关左边的2个焊盘:上面的焊盘为GPIO0,下面的焊盘为GND,短接上电即可进入bootloader
下载口:位于左下方,且已经有丝印标记5V, G, TX, RX

烧录DIY固件

拆开背后的一颗螺丝,外壳为卡扣结构,用撬棍从两侧慢慢撬开,即可露出内部的PCB进行烧录固件。这里烧录的是目前较为流行的智能家居Tasmota固件,支持WEBUI配置、OTA升级、定时器规则,以及MQTT接入,另外也支持多种传感器的接入,更详细的信息可参考源码仓库 https://github.com/arendst/Tasmota
固件烧录需要先短接GPIO0和GND(按键开关左边的2个焊盘), 然后连接左侧的4个插针5V, GND, TX, RX,ESP8266上电后会进入bootloader模式,输入以下命令烧录固件

$esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash -fs 4MB -ff 80m 0x00000 tasmota-CN.bin
esptool.py v3.3-dev
Serial port /dev/ttyACM0
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting...
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 5c:cf:7f:06:76:40
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Flash will be erased from 0x00000000 to 0x0009bfff...
Flash params set to 0x034f
Compressed 637296 bytes to 455065...
Wrote 637296 bytes (455065 compressed) at 0x00000000 in 124.2 seconds (effective 41.0 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

配置

烧录成功后即可重新组装开关,并将开关插入220V电源插座中,正常会出现一个 tasmota-xxxx-xxxx 的wifi热点,此热点无需输入密码,可直接连接。然后浏览器打开192.168.4.1,即可登录到后台。第一次登陆会提示连接到路由器,可在后台设置连接到自己的路由器,连接好之后会弹出路由器分配的IP地址,后续操作会更方便一些。例如连接到我的路由器后,分配的IP地址为192.168.123.233,即可输入新的IP地址进入后台进行操作

任意浏览器输入IP地址即可进入后台主界面

进入后台后,先重新设置模块类型,设置 -> 模块设置 -> 选择模块类型为 Generic (18),然后点击保存,系统会作为新模块重启。稍等片刻重新进入,即可进行新模块的配置,根据之前逆向出来的资料,按照如图所示的配置即可

配置完系统会重启,重启后即可开始正常使用,可点击网页界面上的开关控制,也可通过按压开关上的按键进行控制。

也可通过命令行控制,如下所示

#打开开关
$curl http://192.168.123.233/cm?cmnd=POWER+ON

#闭合开关
$curl http://192.168.123.233/cm?cmnd=POWER+OFF

#开关切换(当前开关状态为打开则关闭,为关闭则打开)
$curl http://192.168.123.233/cm?cmnd=POWER+TOGGLE

参考资料

固件仓库,内有烧录脚本可直接烧录

https://github.com/wuxx/smart_switch_hack/tree/master/image/smartchip

Tasmota 仓库

https://github.com/arendst/Tasmota