按鈕輸入、LED點滅、Hello World,這幾個算是在學習硬體開發板的時候必做的幾個動作,而我今天就要使用ESP8266-01s將上面GPIO 0的按鈕,透過Blynl這個雲端開發平台來進行狀態的偵測。
為什麼按鈕的狀態特別的重要?
因為諸多的感應器例如光敏、磁簧、霍爾、液位、微動、遮斷等等,相當多的Sensor都是靠著0跟1的改變進行狀態偵測的,也因此按鈕狀態就是一個最經典的0&1改變的例子,如果這個例子能夠實驗成功,就可以接著做後面相當多的專題了。
我使用了Blynk官方網站所提供的LED Status of Button來作為這次實驗的範例,這個範例能夠透過開發板上的按鈕,去改變Blynk APP中的LED燈號狀態。而我之所以使用ESP8266-01是因為我之前做過一個ESP8266-01的燒錄器,在後面直接作好了一顆GND與GPIO 0的連接按鈕(目的是為了使開發板進入燒錄狀態),因此就直接拿這顆按鈕來做實驗了。
有興趣的可以先參考這幾篇文章:
Blynk雲端平台的LED工具製作ESP8266-01燒錄器並透過Blynk APP點亮LED燈
在這個範例中使用的是GPIO 1的腳位(const int btnPin = 1;),我把它改成0( btnPin = 0)。
然後在Blynk APP中新增一個V3輸入腳的LED燈(WidgetLED led3(V3);)。
成功運行APP之後再按下按鈕,應該就能看到燈號的改變了。
研讀範例中的程式碼,它在void setup中設定了一個每500ms檢查一次按鈕狀態的指令(timer.setInterval(500L, buttonLedWidget);)。
程式會不斷檢查按鈕狀態的改變,並讀取它是不是處於LOW的狀態來改變燈號。
其實我有點納悶為什麼不在void loop裡面進行偵測,或是直接寫一個外部中斷按鈕來進行處理,後來發現在另外一個範例中PUSH Notification Button就有使用到外部中斷來進行按鈕的處理。
這個程式看似簡單,但其實能作的延伸有相當的多。在雲端控制中按鈕的狀態改變最經典的範例應該就是"家門有沒有被人打開了",在具有保全系統的門上面都會有一個磁簧開關,這個磁簧開關就能當作是一個觸發的按鈕,但是我們不可能一直開著APP去進行燈號的檢查,這時候APP內的Notification工具就相當的重要了。因此我下一個就是要學習使用這個Notification工具,來讀取是不是有人闖空門了!