單元七 : 事件 Event


事件讓 WF8266R 自主處理一些簡易的控制, 不需要長期開啟 APP 或 網頁監控. 整體而言, 事件的設計分為2大部份, 第1是監聽, 第2是觸發. 目前監聽提供了 GPIO 和 時間 二種. 觸發提供 GPIO輸出 REQUEST 和 WebSocket 事件訂閱 3 種. 組合起來就有 6 種行為可供操作.

首先到 開發手冊 中查看 Events 分頁.


建立事件


案例 1 : 按下 WF8266R(GPIO0) 白色按鍵後關閉 GPIO5 上的 LED 燈

這裡有個關念要說明, 在按鍵電路上 WF8266R 的 GPIO 0 4 5 12 13 都是輸出高電位, 所以判別條件都是以低電位做為依據. 將上述目的轉換為 Event 參數如下:

eventType=1        //預設值可不填
eventValue=0,0     //GPIO0 = 0 時成立
trigerType=1       //使用腳位觸發動作
trigerValue=5,0    //觸發腳為 GPIO5 輸出低電位

http://mywfXXXX.local/when/listen?eventValue=0,0&trigerType=1&trigerValue=5,0
        

接下來試看看吧, 按下白色按鍵, LED 燈就會熄滅了. 不過此時事件是沒有寫到記憶體中的, 因此重開或斷電就會遺失, 需要重新指定. 因此您可以透過以下方式寫入

http://mywfXXXX.local/save

案例 2 : 按下 WF8266R(GPIO0) 白色按鍵後關閉 GPIO5 上的 LED 燈, 5秒後再亮起

現在 LED 燈是熄滅的狀態, 但希望 5 秒後再亮起, 我們可以使用 timer 來控制

eventType=1        //預設值可不填
eventValue=0,0     //GPIO0 = 0 時成立
trigerType=1       //使用腳位觸發動作
trigerValue=5,1    //觸發腳為 GPIO5 輸出低電位
timer=5000         //成立後5秒觸發

http://mywfXXXX.local/when/listen?eventValue=0,0&trigerType=1&trigerValue=5,1&timer=5000
        

同樣的將這組設定 SAVE 到記憶體中, 你可以重開 WF8266R 再試一次.


案例 3 : 按下 WF8266R(GPIO0) 白色按鍵後關閉另一塊 WF8266R GPIO5 上的 LED 燈

另一塊 WF8266R 的 IP為 192.168.0.21 使用 WebAPIs 方式控制 GPIO, 我們可以這樣使用 :

http://192.168.0.21/gpio?5=0
        

在了解之後, 轉換為事件參數如下 :

eventType=1                             //預設值可不填
eventValue=0,0                          //GPIO0 = 0 時成立
trigerType=2                            //使用 Request 觸發動作, 位址一定要最後做
trigerValue=192.168.0.21:80,gpio?5=0    //觸發另一塊 WF8266R 腳為 GPIO5 輸出低電位

http://mywfXXXX.local/when/listen?eventValue=0,0&trigerType=2&trigerValue=192.168.0.21:80,gpio?5=0
        

案例 4 : 按下 WF8266R(GPIO0) 白色按鍵後 發一封信到指定信箱

發信到指定信箱是和案例 3 使用相同的 Request 但要求的目標不同, 這裡使用的是 WF8266R 的 Mail 服務

http://wf8266.com/wf8266r/api/mail/device/{email}/{title}/{templateID}
        

其中的 {email} 是收信位址, {title} 是標題. 這裡要注意, 為了減少 WF8266R 記憶體使用, 因此使用 GET 方式, 所以 TITLE 長度盡量不要超過 10.

{templateID} 是通知範本編號, 沒有請輸入0

在了解之後, 轉換為事件參數如下 :

eventType=1                             //預設值可不填
eventValue=0,0                          //GPIO0 = 0 時成立
trigerType=2                            //使用 Request 觸發動作, 位址一定要最後做

//傳送 Email 到 [email protected] 標題為 GPIO0 Alarm
trigerValue=code.unumobile.com:80,wf8266r/api/mail/device/[email protected]/GPIO0%20Alarm/0    

index=3                                 //使用修改 將新的設定指到 3 號位址

http://mywfXXXX.local/when/listen?eventValue=0,0&trigerType=2&trigerValue=code.unumobile.com:80,wf8266r/api/mail/device/[email protected]/GPIO0%20Alarm/0&index=3
        

其中我們使用了 index 修改事件的 TAG, 為確保 WF8266R 的穩定, 目前 REQUEST 同時只能有一個連線, 因此需要覆寫到案例 3 的事件位址, 不然這個動作將無法被觸發, 因為會先呼叫案例 3.


案例 5 : 按下 WF8266R(GPIO0) 白色按鍵後通知網頁端訂閱者 PIN0_Click

事件訂閱會需要使用到 WF8266R.js 的 GPIO 物件. 透過 e.Action 獲得目前通知的事件名

GPIO.events(function(e){
    $("#message").text(e.Action).fadeIn().delay(100).fadeOut();
});
        

在了解之後, 轉換為事件參數如下 :

eventType=1                             //預設值可不填
eventValue=0,0                          //GPIO0 = 0 時成立
trigerType=3                            //使用 WebSocket 通知訂閱者
trigerValue=PIN0_Click                  //自訂事件名稱 傳送到 GPIO.events 裡的 e.Action

http://mywfXXXX.local/when/listen?eventValue=0,0&trigerType=3&trigerValue=PIN0_Click
        

查看完整範例


案例 6 : 每個小時的 0 分 關閉 LED, 5 分 打開 LED

時間的監控是使用 eventType=2

在了解之後, 轉換為事件參數如下 :

eventType=2                             //時間監控
eventValue=:0                           //時間的分鐘數 = 0 時成立
trigerType=1                            //使用腳位輸出
trigerValue=5,0                         //將 GPIO5 輸出低電位

// 0 分時關閉
http://mywfXXXX.local/when/listen?eventType=2&eventValue=:0&trigerType=1&trigerValue=5,0
// 5 分時打開
http://mywfXXXX.local/when/listen?eventType=2&eventValue=:5&trigerType=1&trigerValue=5,1
// 晚上 8 點 使用 WebSocket 訂閱通知
http://mywfXXXX.local/when/listen?eventType=2&eventValue=20:0&trigerType=3&trigerValue=PM8
        

查看事件


http://mywfXXXX.local/when
{"events":[
{"eventIndex":1,"eventType":1,eventValue":"0,0","trigerType":1,"trigerValue":"5,0","timer":0,"state":0,"times":255},
{"eventIndex":2,"eventType":1,eventValue":"0,0","trigerType":1,"trigerValue":"5,1","timer":5000,"state":0,"times":255},
{"eventIndex":3,"eventType":1,eventValue":"0,0","trigerType":3,"trigerValue":"PIN0_Click","timer":0,"state":0,"times":255},
{"eventIndex":4,"eventType":1,eventValue":"0,0","trigerType":2,"trigerValue":"code.unumobile.com:80,wf8266r/api/mail/device/[email protected]/GPIO0 Alarm/0","timer":0,"state":0,"times":255},
{"eventIndex":5,"eventType":2,eventValue":":0","trigerType":1,"trigerValue":"5,0","timer":0,"state":0,"times":255},
{"eventIndex":6,"eventType":2,eventValue":":5","trigerType":1,"trigerValue":"5,1","timer":0,"state":0,"times":255},
{"eventIndex":7,"eventType":2,eventValue":"20:0","trigerType":3,"trigerValue":"PM8","timer":0,"state":0,"times":255}
]}
        

修改事件


透過 &index=n 其中 n 為 eventIndex 編號 1~6


清空事件


http://mywfXXXX.local/when?=

永久儲存事件


http://mywfXXXX.local/save