遠端鐵捲門遙控自幹計畫
前言
時間過得很快,距上一篇文章已經事隔三年。
研究所畢業之後發生了許多阿哩阿雜的事情,發了兩篇文之後,接著就停更,一停就是三年。
過了這段時間,心情分享也是廢文,為了避免Google AdSense還是繼續把本Blog當作缺乏價值…所以我還是保持以前的作風,發發對世界有點益處的文章…
會做這個Side Project也是有原因的,自從2020年1月再次捏LP訂下坐落於新埔與竹北交界處的「馬來西亞式」透天之後,就有了這個概念發想。
因為一樓最外圍人車出入全靠一個靜音高速鐵門,本人常常丟三落四出門只想帶手機,常常不喜歡不帶鑰匙就不帶,連遙控器也不帶。
所以當初就開始研究了一下鐵捲門控制器,不過也僅於網路上的資料研究,因為壓根兒房子還沒蓋好。
時光匆匆,1年過後,2021年1月交屋了,我第一件事情就是拆開鐵捲門控制器的外殼,看到控制接點時鬆了一口氣。
上面的象形文字淺顯易懂,再拿條單芯線,接觸GND+上下停個三個點,就可以輕鬆透過外部訊號控制來操控鐵捲門。
「非常簡單,大概就是高職生能輕鬆秒殺的專案」-我心想
心中最大的石頭放下了,因為這個環節是我最沒有把握的,如果沒有控制點,勢必要用其他手段(例如物理按面板開關這種機械結構XD)
再來是要開發這個專案用的平台,最早其實就想到我還有庫存聯發科當年的開發版,Linkit Smart 7688 Duo。
這片開發版已經被我從研究所碩二冷凍到現在,因為一直沒有甚麼非用他不可的理由…,再加上當年我是 App+藍芽+開發版做 remote control 這塊地流派,所以對於這種跑 Linux配 Arduino 的平台就沒甚麼想法…
時空背景不同,回到五年後的今天,如今我已經掌握簡單的 Web 開發 & 熟悉 Networking,不如就拿他來自幹整套系統吧!
初期發想
最初在整個環節由上往下看的想法與使用者情境是:
- 使用者可以透過任何具備瀏覽器的裝置控制鐵門(且具備基本驗證機制)->所以會有一個前端,但我只會HTML,所以不會有用上甚麼炫泡Bootstrap
- 有前端就要有後端,畢業後第一份全職,在Addweup跟一堆全端大神偷學了Python flask,輕量簡單,又是Python一家親,首選就是他。
- 再往下接,就是要準備碰到MCU&電氣訊號了,我好久沒寫Arduino,所幸有pyfirmata這玩意兒,配上Arduino的Firmata protocol firmware,直接可以從Flask那一隻操控Arduino做動
- GPIO訊號控制繼電器,來透過控制接點控制鐵捲門動作。
OK,理想上軟體都蠻完美的,軟體雛形+7688重新整理起來的部分只花了一個晚上約3小時驗證OK。
但橋接硬體的時候反而忽略了7688那貧弱的Fade out current…(就算有MCU也無用,邏輯閘設計的Spec完全不是Maker取向XD),完全無法直推繼電器,所以後來花了額外的時間處理電晶體放大電路讓7688的GPIO訊號能放大到推得動繼電器。
再來是聯發科看起來已經放棄7688了(也停產了),想當然爾,上面的Firmware也已經從2016年至今沒有更新。不知道是心理因素還是怎麼樣,總覺得7688在這些應用堆起來之後,相對系統不是很穩定,長時間運行(>4天),就會自己hang機…,且一堆系統特性都有點怪小怪小的,例如crontabe service還要自己在rc.local每次開機啟動,就算註冊service auto start也沒用,或者NTP開機也不會自動update時間等等莫名其妙的事情。
因為我有兩片,換了一片狀況也一樣,所以萌生刷機的念頭。好家在7688依然能刷上最新的OpenWrt!
刷完之後真的穩定非常多。
而完成沒多久,家裡胖豬直接許願想要Hey Siri…,原本以為很困難,但結合現成的HomeBridge橋接,省掉接去Apple Home Kit跟Google Home的繁瑣手續…只花了2個小時就橋接好這個功能。不過就多了一個Raspberry Pi當作跑HomeBridge的平台,但我本來就打算在區網內Always-on一台RPI,我這邊用RPI3來做這件事情。
最近又花了一點時間想嘗試加入WiFi scan到特定SSID跟MAC後開基的功能,但應該是7688的網卡無法在掃描時維持網路連線,所以如果縮短掃描頻率,反而讓手動控制的request packet難以回應…,測試階段還被這樣鎖在門外兩次-.-
所以code會留著,但該thread不會打開,預計之後嘗試在裝另一個USB WiFi網卡掃掃看能不能避掉這個問題。
一路下來,其實硬體可以簡化只需一個Raspberry Pi就好,但基於HW failedover(事實上前期7688穩定度還差於RPi許多…)的理由還有廢物利用…所以還是維持7688+RPI兩平台的架構。但軟體其實要移植到RPI可以說是無痛的~,不過就交給想要幹這件事情的人自行研究啦~,難的路都走過,單平台其實是更簡單的作法。
以上,時空背景解釋完畢,接下來整理記錄一下整個開發脈絡了,不過順序會調整一下,畢竟冤枉路我走就好…
實作
首先要來準備一些材料
- MTK LinkIt Smart 7688 Duo x1
- 3.3V UART Adapter
- Raspberry Pi x1 (建議2代含以後,可能裝HomeBridge會比較順利一些)
- LEG-3繼電器 x3
- 電晶體 x3 (2N5551或者其他替代,足夠推得動你的繼電器就好)
- 二極體 x3
- 電阻 x3 (200歐姆,注意7688每根腳的扇出電流不一樣,所以最好是有可變電阻先做fine tune XD)
軟體部分
首先先升級7688為首要優先
直接借用參考: https://blog.abysm.org/2018/12/linkit-7688-upstream-openwrt/
升級後存取升級後預設 Wi-Fi 是停用的,有兩種方式可以存取 7688:
走 Ethernet 的話大家都很熟了,可以直接連到 LuCI 做後續設定。 走 UART console 的話就得用到 UCI。在 command-line 介面下如下的指令
就會暫時性地啟用 Wi-Fi,開出一個 SSID 叫 OpenWrt 的 AP,讓我們可以連進 LuCI。為什麼說暫時性呢?因為我們沒有跑
所以重開之後,Wi-Fi 又會回到停用狀態。如果希望永久啟用 Wi-Fi,可以加跑上面這個指令,或是在重開前以 LuCI 將 Wi-Fi 調整為啟用。 |
這種有現成文章的,我轉貼重點部分避免來源失效,另外需要具備OpenWrt相關知識,這部分Config才會順利喔~,另外升級完之後,也可以Station Mode + Client Mode一起了,比原廠的FW好用太多XDDD
升級完成後,準備7688的軟體運行環境
安裝SFTP
opkg update
opkg install vsftpd openssh-sftp-server
/etc/init.d/vsftpd enable
/etc/init.d/vsftpd start
安裝Python 3 & flask & pyfirmata
opkg install python3
opkg install python3-pip
pip3 install flask
pip3 install flask-cors
pip3 install pyfirmata
然後燒Firmata到7688的Arduino 上面
注意,Firmata serial要改&&while括號也要改,這樣才能跟7688 SOC對上:
Serial1.begin(57600);
Firmata.begin(Serial1);
while (!Serial1) {
; // wait for serial port to connect. Needed for ATmega32u4-based boards and Arduino 101
}
到我的Github repo 抓取網頁&python:
透過SFTP把irdc_v1.html放去/www底下
然後irdc_v3.py要做點修改再放在/root底下
magic_sets = ["TaiwanNo1"]
這邊舉個簡單的驗證機制,[]裡面可以放你要控制的密碼,可以支援多組,當然這東西是明碼且沒有加密
為的是好讓程式簡化,如果要拿去做商業用途,這段邏輯請自行強化~
你接著可以手動執行這個腳本
cd /root && python3 ./irdc_v3.py
7688不快,起server要一點時間(約30秒),之後你可以透過瀏覽
http://[你的7688 local ip]/irdc_v1.html?magic=TaiwanNo1
可看到介面出現,理論上你可以透過AC_ON/OFF的按鈕驗證你前面串的內容有沒有做對,有的話應該會看到7688 LED 13的燈可以控制開關
如果到這邊都順利,恭喜你~可以繼續往硬體的部分前進,之後再回頭看HomeBridge這段
HomeBrige在RPI上建置
照這官方步驟安裝:
https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Raspbian
或著可以直接去官方下載已經裝好的Image,我是選前者,如果是新手可以選後者省事。
至於詳細HomeBridge的操作,官方文件寫得很詳細了~不贅述
需要安裝兩個Plugin
- Homebridge Http Switch,用來向Flask 打RESTful API
- Homebridge Google Smart Home,用來連上Google Home
至於Apple HomeKit, 他本來就是base on apple home kit,所以哀鳳直接家庭App掃QR code添加就可以
第一個Plugin比較需要特別講,我也直接貼範例上來
可以看到,直接透過POST去打API接口,跟網頁操作後端其實是一樣的道理
這樣會在Home kit跟Google Home看到四顆開關,要注意的是每次調整Plugin Setting,務必按HomeBridge管理頁面右上角齒輪->Restart Server重新reload Homebridge。
也可以使用語音控制
OK google, 打開開啟鐵捲門
沒錯,因為裝置名稱是先想好給HomeKit用
但在Siri上,就可以
Hey, Siri,開啟鐵捲門
這完全牽扯到兩家語意辨識的設計。
其實這個Plugin超爆強,還有支援超多種Profile,有興趣的人自己研究~~~
另外小小抱怨一下,HomeKit需要有Homekit Gateway才能由網際網路控制,也就是說你的區域網路要有一台Ipad或者HomePod…不然都只能做區網下控制。相較於Google Home,到哪只要有網路都可以~
硬體部分
硬體接線圖非常簡單,但本人不(ㄌㄢˇ)會(ㄉㄜ˙)畫Layout,直接幹別人的圖
來源:https://makerpro.cc/2019/10/the-specification-and-activation-of-relay/
基本上R1一開始可以用可變電阻,去調整阻值控制IB電流大小,另外5V改接成3.3V(可從7688 3.3v腳拉出來)
以及我有在三個電晶體C極拉線出來,到一顆共陽極的RGB三色LED各色腳位去當狀態指示燈,低態動作
接腳對應7688 Duo的接腳位置:
- up_relay_pin = 2
- stop_relay_pin = 3
- down_relay_pin = 5
- ac_relay_pin = 13
- up_led_pin = 10
- stop_led_pin = 11
- down_led_pin = 12
後記
首先就是,出社會之後,做Side project的時間被切得非常碎,按照我現在的功力+以前學生的閒度,大概只需要花1個週末就能專心搞定。總共耗時下來+打文章的時間20小時都不到。
但因為工作的關係,周末又有其他安排,頂多抽空幾個下班晚間或者周末的部分時間,從3月中慢慢搞了1個多月才搞得差不多。
關於這個project後面todo list,大概還有WiFi Scan自動開門的機制穩定性要在改善的空間~,之後有改版就直接修改在本文。
其實市面上類似的替代品很多,例如Sonoff,但…自幹無價,硬體材料成本總共花不到1000,(7688是最貴的但都是庫存),不過時間也是無價就是惹QQ。
無論如何,也是把我底層電路的知識重新renew了一下,也把好久用的工具重新整理一番起來用。
接下來比較大的side project可能就是太陽能發電系統了,不過比較偏向現成零組件買回來拼拼湊湊,技術含量就比較偏向「缺乏價值的內容」了。
真的有閒才會記錄下來~
以上。
此專案謝謝阿迪&許禎祐學弟的幫忙+胖豬的許願 🙂
Leave a comment
很抱歉,必須登入網站才能發佈留言。