第1步:電路概述
我已經包含了一個上面電路圖的副本供參考,盡管應該注意它是對U1的支持,但DS1307Z + RTC在軟件中不再可用,不再需要以下組件并將其從零件清單中刪除;
U1,R1,R3,R4,C1,Q2和G1
步驟2:軟件概述
序言
要成功編譯此源代碼,您將需要以下額外的庫;
PubSubClient.h
由:Nick O‘ Leary
目的:使設備能夠與給定的Broker一起發布或訂閱MQTT主題
來自:https://github.com/knolleary/pubsubclient
Bounce2.h
由:Thomas O Fredericks
目的:在軟件中對輸入開關進行反抖動
來自:https://github.com/thomasfredericks/Bounce2
在源代碼bel中也提供了完整的詳細信息
您還需要知道;
MQTT Broker的IP地址(IPv4格式AAA.BBB.CCC.DDD):
IPAddress代理(
W,X,Y,Z
);
用于您的IoT設備的免費IP地址: byte ip [] = {W,X,Y,Z};
代碼概述
啟動時,軟件將使用上面預先提供的連接詳細信息連接到以太網。
一旦連接到IoT設備的LAN,使用以下客戶端名稱’WIZNet5100-DE:AD:BE:EF:FE:ED ‘在MQTT代理中注冊,并將其詳細信息發布到以下MQTT主題;
/EthernetDevice/SwVerConfirm::此字符串包含一個連接字符串,以逗號分隔,由通用設備名稱,設備的唯一MAC地址和Arduino文件的名稱組成用于對設備進行編程。在這種情況下,’WIZNet5100,DE:AD:BE:EF:FE:ED,MQTTStudyLightController1_8.ino ‘。
/EthernetDevice/Study/LightConfirm
::當該設備在/EthernetDevice/Study/LightsQuery 主題,它通過單個字節發布到Swan,頂架和臺燈下的/EthernetDevice/Study/LightConfirm 主題狀態。該字節的值的范圍是0 。.. 7。位0 =天鵝燈,位1 =頂架燈,位2 =桌面燈。 1 =開,0 =關。注意:如果按下本地按鈕,將發生相同的確認響應。
/EthernetDevice/Study/LightControllerTempAlarmConfirm
::當此設備在/EthernetDevice/Study/LightControllerTempAlarmQuery 主題上收到發布時,它會通過發布到/EthernetDevice/Study/LightControllerTempAlarmConfirm 主題來做出響應。學習燈控制器溫度警報狀態。有效= 1/無效= 0。
/EthernetDevice/Study/LightControllerTemp
:該設備會針對該主題發布學習燈控制器內部溫度,該溫度以攝氏度為單位,經過滾動平均后精確到小數點后2位,其樣本存儲在以下數組中’averageTempArray [MAX_TEMPS]‘ 》。僅當溫度發生整數變化時才會發布更新,以防止此IoT設備“阻塞”網絡。
它隨后訂閱以下MQTT主題;
/EthernetDevice/SwVerCommand::在收到有關此主題的通知時,設備將使用/EthernetDevice/SwVerConfirm 發布進行響應。這是 廣播 的回復。即。所有設備都可以響應。
/EthernetDevice/DE:AD:BE:EF:FE:ED/SwVerCommand :收到此主題的通知后,設備將以/EthernetDevice/響應SwVerConfirm 發布。這是 定位 的響應。即。僅此設備將響應。
/EthernetDevice/Study/LightsQuery
::如上文針對/EthernetDevice/Study/LightConfirm ,此設備將使用狀態字節響應此主題發布。
/EthernetDevice/Study/SwanLight::當接收到有關此主題的通知時,設備將打開/關閉書房天鵝燈。有效載荷值“ 1”將點亮燈,“ 0”熄滅。更新光輸出后,將通過/EthernetDevice/Study/LightConfirm 主題上的出版物返回光的當前狀態。這樣,OpenHAB站點將反射相應光線的實際值。
/EthernetDevice/Study/TopShelfLight:至于/EthernetDevice/Study/SwanLight ,但控制權用于頂級貨架燈。
/EthernetDevice/Study/UnderDeskLight:如上,但適用于Under Desk Light。
/EthernetDevice/Study/LightControllerTempQuery::收到此主題的通知后,設備將以/EthernetDevice/Study/LightControllerTemp 出版物進行響應。有效負載,詳細說明了如上所述的當前內部溫度。這樣,可以在任何時候輪詢學習燈控制器,以確定其當前溫度。此機制用于克服OpenHAB中圖持久性的問題。 (有關更多詳細信息,請參見此處https://github.com/openhab/openhab/wiki/Charts)
/EthernetDevice/Study/LightControllerTempAlarmQuery:當收到有關此主題的通知時設備將使用/EthernetDevice/Study/LightControllerTempAlarmConfirm 出版物進行響應,該出版物包含詳細描述了當前內部溫度警報狀態的有效負載,如上所述。另外,如果內部溫度超過40攝氏度,所有指示燈將自動關閉,并且將活動狀態發布到/EthernetDevice/Study/LightControllerTempAlarmConfirm 主題。這樣,學習燈控制器會自動觸發對OpenHAB的更新,或者可以對其進行輪詢以確定其當前的溫度警報狀態。該消息將觸發“ Light Cont。”上警報鈴的顏色狀態更改。配置”頁面并激活警告聲音事件。
完成后,該軟件立即進入循環,監視MQTT Broker連接以獲取主題出版物以及通過按鈕進行的任何本地照明更改請求箱輸入,管理系統計時器并持續監控平均內部溫度狀態。
實現無阻塞計時器
如前言中所述,我實現了無阻塞計時器功能,對此的調用如下;
無效timer_create(int iTimerNumber,無符號長ulTimerPeriod,void(* callbackfn)(void));
用于創建新的計時器“ iTimerNumber”并將其上下文添加到stiTimerArray []。所需的延遲時間“ ulTimerPeriod”以毫秒為單位,并提供了指向回調函數的指針。如果計時器到期,則執行此回調函數。
void timer_update(void);
必須定期從主循環中調用此函數,該函數用于更新所有計時器,檢查它們是否已到期,以及是否已到期,啟動回調函數’callback()‘。
無效的timer_start(int iTimerNumber);
如前所述,對該函數的調用將啟動計時器倒計時
無效的timer_stop(int iTimerNumber);
如前所述,對該函數的調用將
void timer_reset(int iTimerNumber);
被調用將延長超時時間周期到其初始值。有效地創建一個“可重置的單穩態”計時器。用外行的話來說,就像“踢”看門狗計時器一樣。
布爾型timer_isRunning(int iTimerNumber);
函數調用以測試以查看給定的計時器當前是否正在運行。
。
如果需要新的計時器,則必須執行以下操作進行;
增加MAX_TIMERS的數量
#define MAX_TIMERS 3
定義新的計時器定義,即
#define NEW_TIMER 2
定義新的回調函數void cf(void);并添加計時器
timer_create(NEW_TIMER,10000,cf);
啟動新timer
timer_start(NEW_TIMER);
給出了源代碼的完整副本
步驟3:OpenHAB接口
要將Study Lights Controller集成到現有的“ SteveQuinn Household” 網站中,我對站點地圖進行了更改,如上圖一所示。這里的陰影屏幕描述了變化;
研究屏幕現在包含三個開關;天鵝燈,頂架燈,臺燈下和內部書房燈控制器溫度會顯示出來(請參見圖2),
已添加新的“燈光控制器配置”(“光照配置”)網頁,以允許用戶可以查詢當前內部溫度警報狀態以及當前內部溫度。 (請參見圖3,此處顯示為紅色,警報處于活動狀態),
已添加了一個新的趨勢屏幕,其中顯示了控制器的內部溫度趨勢(請參見圖4和5)。
。
與以前一樣如果您想使用“ stevequinnhousehold ”示例,則需要做的就是解壓縮下面zip文件的內容并將其拖放進入上圖6所示的OpenHAB目錄。
。
此實現使用OpenHAB的功能播放聲音片段。如上文所述,如果Study Light Controller的內部溫度超過40攝氏度,則IoT設備將通過發送帶有有效負載= ’1‘。收到此消息將觸發在Raspberry Pi上播放聲音剪輯“ OverTemp.mp3”,并將“內部溫度警報”的顏色從黑色更改為紅色。有關更多詳細信息,請參見“測試IoT設備”。
為了使OpenHAB能夠播放您的OpenHAB安裝聲音,需要進行一些更改(我正在假設您正在遵循本系列的所有部分)。我已將此更改添加到先前的有關如何安裝OpenHAB(第6部分:IoT家庭自動化)的說明中。但是,為方便起見,我也在下面詳細介紹了它們。照常執行更改時,切記要打開OpenHAB服務器的PuTTY終端窗口并剪切并粘貼以避免錯誤。
首先在默認值下編輯openhab文件;
sudo nano/etc/default/openhab
找到USER_AND_GROUP并將其更改為;
USER_AND_GROUP = root:root
現在在systemd下編輯openhab.service;
sudo nano/usr/lib/systemd/system/openhab.service
找到用戶和組并將其更改為;
User = root
Group = root
就是這樣。現在,重新啟動OpenHAB以使更改生效。
sudo服務openhab重新啟動
或重新啟動
立即重啟sudo
步驟4:測試IoT設備
在我先前的Instructable’設置和配置OpenHAB中。第6部分:物聯網,家庭自動化‘我介紹了如何使用模擬數據和實時數據進行測試以及它們各自的優點。
在這種情況下,我們將同時使用這兩種方法來測試我們的新物聯網設備。如上圖一和圖二所示。
為方便起見,將使用模擬數據來觸發過熱警報。否則,將需要打開學習燈控制器,并在MSP9700A上施加高于40攝氏度的溫度以強制發出警報。
我詳細介紹了“過熱警報”序列的消息流。在上面的圖片3中
為了驗證燈光控制和計時器功能,實際上將使用OpenHAB界面和按鈕框進行測試。
我還提供了一個測試視頻片段
步驟5:結論
鑒于我當前的基礎架構以及Arduino/MQTT/Raspberry Pi的知識,我們重新設計了作為家庭自動化網絡中的IoT設備,Study Light Controller相對容易實現且運行良好。實際上,添加按鈕去抖動庫使反應時間比我最初編寫的要快得多。
但是,錯過屬性著名的比爾·蓋茨的報價“ 640 K對任何人都應該足夠”事后看來,我應該選擇一個更大的Arduino,那樣我就可以同時包括RTC功能和DHCP功能。
第6步:使用的引用
我使用以下來源將此Instructable放在一起;
PubSubClient.h
由:Nick O’Leary
目的:使設備可以使用給定的代理發布或訂閱MQTT主題
來自:https://github .com/knolleary/pubsubclient
Bounce2.h
由:Thomas O Fredericks
目的:在輸入開關中消除抖動軟件
來自:https://github.com/thomasfredericks/Bounce2
數據表
http://ww1.microchip.com/downloads/zh-CN/DeviceDoc/21 。..
解碼規則的二進制數據
HTTPS://community.openhab.org/t/integer-to-binary/。..
https://groups.google.com/forum/# !主題/XTEND浪。..
HTTPS://github.com/openhab/openhab/wiki/Samples-Ru 。..
https://github.com/openhab/openhab/wiki/Samples-Item-Definitions
Xtend
http://www.eclipse.org/xtend/documentation/i ndex.h 。..
繪圖(包括rrd4j持久性問題)
https://github.com/openhab/openhab/wiki/Charts
問題:獲取exec綁定以執行命令(如何使playSound與OpenHAB一起使用)
https://community.openhab.org/t/problem-getting-exec-binding-to-execute-command/2872/36
Sounds
http://soundbible.com/tags-alarm.html
比爾·蓋茨(Bill Gates)報價經常被錯過的消息
https://en.wikiquote.org/wiki/Bill_Gates
責任編輯:wv
-
控制器
+關注
關注
114文章
17097瀏覽量
184176
發布評論請先 登錄

NB-IoT單燈控制器:智慧照明的“神經末梢”

評論