【前排提示】本教程需要一定的linux操作基礎和動手能力,代碼及工具已放在後臺,回復【esp2】獲取。僅作個人學習,請勿用於其他用途!
去年,筆者分享了一個DIY接入Homekit開關的方法
採用的是燒錄HAA固件的方法,且不說燒寫固件後配置的成功率,即使日常使用下來,設備也經常遇到此配件未響應的問題
而從去年八月份到現在,這個項目已經更新了很多版了,精力有限也沒繼續研究這個項目
這次我分享另一個不同的方法,硬體部分同樣需要用到繼電器模塊,CH340燒錄器,ESP-01s模塊,但是多加了一個樹莓派,用來安裝Homebridge
如果沒有樹莓派,也可以安裝在刷入第三方固件的路由器或者其他嵌入式設備,但是我不建議用電腦
除非你想成為國家電網戰略合作夥伴
因為我們需要將homebridge當作網關來使用,所以要求設備需要24小時開機
一般使用場景下,我們不會24小時開著電腦,而樹莓派即使在滿載運行的情況下,一個月最多也只能耗費幾塊錢的電費
Homebridge:homebridge是一個基於NodeJS的伺服器,可以將不支持Apple Homekit的設備模擬為可識別的設備。可以理解為一個網關的存在
MQTT:是一種建立在TCP/IP協議上基於發布/訂閱模式的「輕量級」通訊協議。mosquitto是一款開源的MQTT消息代理軟體
實現原理大致如圖所示
Homebridge支持樹莓派、Linux、MacOS、Docker、Windows等設備
這裡我們要在樹莓派上安裝Homebridge,可以直接燒錄官方提供的鏡像系統,燒錄方法參考官方說明
https://github.com/homebridge/homebridge-raspbian-image/wiki/Getting-Started
因為我樹莓派上還運行著其他程序,所以我使用手動敲命令的安裝方法,安裝方法可以參考b站up主 @拙凡zhuofan 的專欄,講得很詳細
如果你熟悉Linux,相信很快就能安裝完成
篇幅原因,這裡我就不打算重複造一遍輪子了,後面有時間我會另寫一篇文章整理一下我安裝時遇到的一些問題
安裝Homebridge的插件在安裝完homebridge的基礎上,在樹莓派命令行中輸入命令來安裝我們需要的插件
sudo npm install -g homebridge-mqttthing如果安裝了homebridge-config-ui-x插件,也可以web管理頁面安裝
在瀏覽器中輸入
http://(樹莓派IP位址):8080
來打開homebridge的wei管理頁面(默認帳戶和密碼都是admin)
點擊插件,搜索homebridge-mqttthing插件進行安裝
在樹莓派上安裝mqtt服務
這裡我們採用源碼編譯的方式
首先安裝依賴
sudo apt-get update
sudo apt-get install libssl-dev
sudo apt-get install g++下載、安裝、創建軟連接
wget http://mosquitto.org/files/source/mosquitto-1.6.12.tar.gztar zxfv mosquitto-1.6.12.tar.gzcd mosquitto-1.6.12makesudo make installsudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
sudo ldconfig我安裝的是1.6.12,現在最近的mosquitto版本為2.0.7,可以在官網查看
http://mosquitto.org/files/source/
配置Arduino IDE安裝Arduino和esp8266 SDK
這裡直接點擊安裝我整理好的兩個程序安裝包就好了
其他請參考Arduino中文社區
安裝PubSubClient庫
使用arduino裡的PubSubClient庫編譯時會報錯,所以我們要手動安裝,在github上或者我整理的文件裡下載,把PubSubClient文件夾拖到文檔\Arduino\libraries下就可以了
代碼上傳
這裡我使用的是Arduino IDE來燒錄代碼,代碼部分參考了國外大神@Achim Pieters的例子,我修改了部分代碼,僅供個人學習使用
大家食用前,需要修改ssid和password為自己的wifi帳號和密碼,以及mqtt伺服器的IP位址(樹莓派的IP位址)
上傳代碼時開發板選擇「Generic ESP8266 Module」,埠號選擇燒錄器插入的埠
然後按快捷鍵ctrl+u,將代碼上傳到esp-01s模塊上就完成了
在Homebridge中添加配件config.json的配置
安裝好homebridge-mqttthing插件後,在config.json文件中添加配件
sudo nano /var/homebridge/config.json在accessories中添加我的這段代碼
{
"type": "switch",
"name": "esp開關",
"topics": {
"getOnline": "mqtt-switch/online",
"getOn": "mqtt-switch",
"setOn": "mqtt-switch"
},
"integerValue": true,
"onValue": "open",
"offValue": "close",
"accessory": "mqttthing"
}其中,name後面的是你可以自定義的開關的名字,也就是在家庭中顯示的名字
編輯完成後按ctrl+x,輸入y,回車退出,然後重啟Homebridge,就可以在iphone家庭中找到對應的開關了
sudo systemctl restart homebridge
如果已經安裝好homebridge-config-ui-x插件,也可以直接在配置中直接修改config.json,不用手動輸入linux命令
總結
haa是為ESP系列設備開發的支持Apple Homekit程序,可以理解為直連Homekit
而Homebridge是一個橋接平臺,除了支持esp設備,還可以將其他市面上不支持Homekit的智能設備,如小米的智能家居設備連入Homekit,可玩性非常高
今後我會嘗試基於Homebridge平臺,DIY更多有趣的項目,歡迎保持關注!
感謝:
homebridge官網:
https://homebridge.io/
arduino中文社區:
https://www.arduino.cn/
mosquitto:
http://mosquitto.org/files/source/
pubsubclient庫:
https://github.com/Imroy/pubsubclient
Achim Pieters的文章:
https://www.studiopieters.nl/homebridge-mqtt-led/(需要科學上網)
Homebridge的安裝:
https://www.bilibili.com/read/cv3603621
Homebridge-mqttthing:
https://github.com/arachnetech/homebridge-mqttthing#readme
往期分享:
在聯想M73上安裝黑蘋果
讓siri使用ssh遠程關閉電腦
讓siri使用樹莓派遠程打開Windows電腦