網頁

使用Blynk雲端平台的PUSH Notification推播工具製作居家安全防盜提示



Blynk APP雲端平台讀取按鈕狀態這篇文章中,我使用ESP8266-01讀取上面連接GPIO 0的按鈕狀態。然而在讀取硬體裝置狀態的變換時,不可能依賴人去無時無刻的盯著,如同居家保全系統會在家中門窗開啟時發送通知到你的手機一樣,因此Blynk中的Push Notifications工具,可以說是專門為了這個功能所設計出來的。

在Push Notifications工具中僅有兩個選項,一個是Notify When Hardware Goes Offline,另外一個則是Priority。
前者的功能如果開啟時,當硬體端離線的時候系統會發出警告,而它也能設定離線過後大概幾秒後提示,如果在離線的時間小於這個秒數,則不會提示出離線警告(可能是避免過於敏感)。
後者則是選擇推播的速度,選擇HIGH的話會在觸發的當下馬上推播(大概像人家傳LINE給你的速度),但是後者LOW模式的推播延遲時間其實我並不太知道,官方網站給了這個頁面去解釋兩者的差異,另外也警告說選擇HIGH的模式的話手機端會比較耗電一些(因為頻繁的進行連線更新),這點要自己進行取捨。



官方在這個工具也有提供相關的範例程式,它一樣使用按鈕觸發,並且使用了GPIO 2的外部中斷腳。在這篇博客中也提到ESP8266的中斷能連接到除了GPIO 16以外的任何GPIO腳位,詳見WiFi-ESP8266入门开发(十二)-使用GPIO中断。因此承襲上一篇雲端平台讀取按鈕的文章,我把GPIO 2改成了GPIO 0,以對應我開發板上面的按鈕。

同時在Blynk的介紹中,這個工具是支援UTF8 Unicode格式的,舉例我使用Windows版的Arduino IDE 1.8.5編譯器,在程式中打入下面這串文字,程式是能夠成功編譯並燒錄的,官方也有解釋說如果沒辦法編譯的話可能就是編譯器的支援問題。
Blynk.notify("家裡被闖空門了!");



而我選擇HIGH的推播頻率,大概在按鈕觸發後2秒內就推播到我的手機了,並且顯示了我燒錄的"家裡被闖空門了!"的設定文字。



在離線通知的部分也是一樣有效,只是我選擇Instant的推播時間,卻大概過了半分多鐘才顯示,是說這個時間也還在能接受的範圍內就是了。



另外需要注意的是在通知的文字長度部分,Blynk的伺服器提供了128 Bytes的長度,如果使用中文字的話會比較消耗空間,如果有字串長度上的疑慮,可以使用UTF-8 string length & byte counter這個試算工具,貼上你要撰寫的文字它會自動幫你計算字數以及Byte長度。
(只是我在實際使用上400多Bytes也是照樣傳送過去就是了,並沒有發生截尾的現象,這個可能就要自行嘗試看看了。




另外Blynk官方在本文的範例中使用了內部上拉電阻開啟的程式碼。
pinMode(2, INPUT_PULLUP);

因此我查詢了一下ESP8266這個晶片的內部上拉電阻資訊,在小狐狸事務所-MicroPython on ESP8266 (八) : GPIO 測試的文章中找到,ESP8266 每一個 GPIO 腳都有內建上拉電阻。知道了這個資訊之後我就不需要另外再接外部電阻了,在使用上方便許多,開啟內部上拉電阻後只要按鈕連接GPIO與GND就能進行工作了。(只是要注意不要用到已經有連接板子上LED燈的引腳)

如此一來我們就可以購買門磁開關,並且將它接上雲端開發板,當門開啟時會導通or斷開,利用這種方法就可以製作門窗的雲端防盜器了,並且在第一時間收到資訊。

而Blynk的官方範例程式中還有一個Push Notification Interval的範例,這個範例會每60秒發送一次通知到手機,告訴你裝置已經開啟多久了。這個功能可以用在數據的定期提示,但我覺得已經有SuperChart工具了,就不太需要這樣子定期提示就是。

最後記得要有推播提示,APP專案的運行按鈕一定要按下去,不然提示功能沒有用,這一點相當重要務必牢記。