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

工程機(jī)械控制器廠家 控制器國產(chǎn)替代 #國產(chǎn)控制器#控制器廠家#控制器品牌
NB-IoT單燈控制器:智慧照明的“神經(jīng)末梢”
物聯(lián)網(wǎng)單燈控制器產(chǎn)品簡介


評(píng)論