網頁

Blynk雲端平台的Time input工具-像鬧鐘一樣自訂時間、星期與時區



在Blynk雲端平台中,Time Input工具Timer工具有異曲同工之妙,更可以說是Timer工具的加強版。這次介紹的這個工具可以自行設定開始與結束時間(或日出日落)、星期以及時區,同時也支援12小時或24小時制的設定。

在設定頁面的部分,它只需要一個虛擬引腳即可,同時你也可以放置多組的Time input工具,Format則可以選擇你要12小時或24小時制(HH:MM and HH:MM AM/PM.)。



而下面這些選項則可以讓你選擇更多的時間設定,例如:
ALLOW START/STOP INPUT:是否要開啟開始與結束時間,如果不開啟的話就只會有一組時間而已(程式內定為START)。

ALLOW DAY OF WEEK SELECTION:是否要開啟星期的設定。

ALLOW SUNSET/SUNRISE SELECTION:是否要開啟日出日落設定,這個功能可以讓時間傳送的字串變成SUNSET或SUNRISE,如果要做一個透過日光(光強度模組)啟動的窗簾or鬧鐘,這是不錯的選擇。

ALLOW TIMEZONE SELETION:是否開啟時區設定




單純看設定介面不太能理解它的功能,讓我們實際依照官方所提供的三個範例來試試看。
首先是第一個範例Simple Time Input for start time

在這個範例中,它會採用3600 * hours + 60 * minute的格式來輸出時間,這個時間是用在上述星期、時區等功能全部關閉的情況下,僅只有單一時間的設定時,此功能會把你所設定的時間列印在序列上,要注意的是APP裡面的Format,無論是12小時或24小時制都是傳送3600 * hours + 60 * minute的格式。另外就是它只會在更改參數後才發送時間的設定數據(因為BLYNK_WRITE(V1))


第二個範例的功能就多上許多,它能夠進一步支援各種設定,例如開始、結束時間、星期的選擇與時區的選擇。幾個關鍵的程式碼如下:Sketch: Advanced Time Input


t.hasStartTime() 有無開始時間(True or False)
t.getStartHour() 開始時間小時
t.getStartMinute() 開始時間分鐘
t.getStartSecond() 開始時間秒
t.isStartSunrise() 是否開始時間設定為日出時間(True or False)
t.isStartSunset() 是否開始時間設定為日落時間(True or False)

t.hasStopTime() 有無結束時間(True or False)
t.getStopHour() 結束時間小時
t.getStopMinute() 結束時間分鐘
t.getStopSecond() 結束時間秒
t.isStopSunrise() 是否結束時間設定為日出時間(True or False)
t.isStopSunset()) 是否結束時間設定為日落時間(True or False)

t.getTZ() 時區名稱(時區區域名稱請參考)
t.getTZ_Offset() 時區的時間偏置,例如Taipei時間就是GMT+8(3600*8=28800)
t.isWeekdaySelected(i) 星期是否有被選擇(1~7),輸出一樣是True or False

虛擬引腳在輸出的參數為:(開始 結束 時區 星期 時區時間偏置)
28800 61200 Asia/Taipei 1,2,3,4,5 28800


最後一個範例則是透過程式碼,去改變APP內Time input工具的時間(You can also change state of widget on UI. See below sketches.),範例Update Time Input State on UI

//0 - min, 86399 - max
int startAt = 5 * 60; //設定開始時間,範例為00:05
int stopAt = (60 + 5) * 60; //設定結束時間,範例為01:05
char tz[] = "Europe/Kiev"; 時區設定,更多的區域請見此
Blynk.virtualWrite(V1, startAt, stopAt, tz);  複寫APP內工具的時間(日期全不選)

//you may also pass day
//char days[] = "1,2,3"; //Monday, Tuesday, Wednesday
//Blynk.virtualWrite(V1, startAt, stopAt, tz, days);  這裡會加上複寫星期的功能

這個運行後當硬體連接上伺服器,就會自動將你APP內的Time input複寫成硬體內所設定的時間(如下圖),透過這個工具也可以做一個雲端與硬體都可以修改時間設定的模型。


這個工具搭配上RTC工具,我們可以做一個具有自動更新時間及定時鬧鐘提示的多功能雲端智慧時鐘。現在比較困擾我的是時間必須要在APP的時間修改後才會"發送",如果今天硬體端停電後,該如何重新跟伺服器取得所設定的鬧鐘時間,這個工具似乎是直接從APP端傳送至硬體,而沒有傳到伺服器保留的功能,因此並不像RTC工具那樣可以從伺服器獲取上傳的時區資訊。

這個工具在撰寫程式時需要細心一點,考慮到斷線或是裝置重啟的問題,我想還要視情況採用。