啰嗦一下
上一篇中提到硬件通過http——GET的方法不停地訪問服務(wù)器,來實(shí)現(xiàn)實(shí)時(shí)控制蟆融,但是這種辦法會造成浪費(fèi)服務(wù)器資源草巡,如果并發(fā)多的話那就服務(wù)器就會廢掉了。
為了實(shí)現(xiàn)不用多次訪問服務(wù)器型酥,浪費(fèi)資源山憨,所以自己也找了不同方法,結(jié)果發(fā)現(xiàn)可以使用兩種方式(這兩種方式在nodemcu的固件里面都有相關(guān)的API弥喉,開發(fā)起來簡單):一種是websocket郁竟,另外是一種MQTT。自己也試過了兩種方式由境,結(jié)果發(fā)現(xiàn)還是MQTT比較好用棚亩,感覺也比較簡單。
使用MQTT協(xié)議對于新手的我來說是一個(gè)iot物聯(lián)網(wǎng)實(shí)踐中的一個(gè)重要里程碑虏杰,就好像又一次發(fā)現(xiàn)了新大陸
MQTT是比較適合硬件的控制讥蟆,邏輯也很簡單。在做實(shí)踐的時(shí)候自己覺得里面有幾個(gè)關(guān)鍵字纺阔,訂閱主題瘸彤、發(fā)布主題,消息代理州弟;(如果是更詳細(xì)了解可以google一下就好了)
硬件可以訂閱主題和發(fā)布主題:訂閱主題——用于接收服務(wù)器發(fā)來的數(shù)據(jù)钧栖;發(fā)布主題——用于傳輸數(shù)據(jù)到服務(wù)器低零。同樣的服務(wù)器也一樣婆翔。
消息代理就是一個(gè)消息轉(zhuǎn)發(fā)的中介,其實(shí)是一個(gè)軟件掏婶,可以安裝在服務(wù)器中——我用的是mosquitto啃奴;它里面的怎樣實(shí)現(xiàn)消息轉(zhuǎn)發(fā)的細(xì)節(jié)自己沒有了解,只會使用(自己不是什么牛人雄妥,不懂研究個(gè)中的邏輯最蕾,只會拿來主義)依溯。
安裝mosquitto(消息代理)
安裝mosquitto,部署環(huán)境總是比較麻煩瘟则,過程中總會遇到各種大小問題黎炉,幸好有g(shù)oogle,自己搜索一大堆不同的資料醋拧,一點(diǎn)一點(diǎn)的嘗試慷嗜,最終還是搞定。
自己的環(huán)境是:window系統(tǒng)+wamp服務(wù)器丹壕,簡單的mosquitto安裝步驟(根據(jù)自己的情況總結(jié)出來的)
1)先安裝cywin庆械,openssl-light,mosquitto
2)下載動態(tài)庫文件cygcrypto-1.0.0.dll菌赖、cyggcc_s-1.dll缭乘、cygssl-1.0.0.dll、cygwin1.dll琉用、cygz.dll堕绩、libssl-1_1-x64.dll、libssl32.dll邑时、msvcr100.dll并復(fù)制到 mosquitto安裝文件夾中
3)配置好并可以在服務(wù)器中測試可以連接逛尚,需要配置mosquitto.conf文件
需要添加內(nèi)容:
listener 1883(mosquitto 端口)
listener 9001(websocket 端口)
protocol websockets (支持websocket協(xié)議)
http_dir? C:\wamp64\www(web網(wǎng)站更目錄路徑)
-----------------------------------------------------
安裝部署完成后,需要啟動mosquitto
打開cmd
進(jìn)入mosquitto目錄
輸入命令 mosquitto -c mosquitto.conf? 即可
以上mosquitto消息代理已經(jīng)安裝完成
實(shí)現(xiàn)遠(yuǎn)程控制led燈
硬件方面刁愿,使用esplorer軟件重新編寫代碼绰寞,上傳到硬件中;用mqtt方法铣口,代替之前的http-get方法滤钱。里面邏輯是:定義一個(gè)客戶端標(biāo)識,連接上mosquitto脑题,訂閱一個(gè)主題件缸,發(fā)布一個(gè)主題,接收消息叔遂,發(fā)布消息(這樣就可以和服務(wù)器進(jìn)行雙向的溝通)
服務(wù)器方面他炊,建立一個(gè)html頁面(主要使用jquery來get數(shù)據(jù)和post數(shù)據(jù)),其中首先要與mosquitto代理建立連接,其中需要引入mqttws31.js(用于與mosquitto溝通已艰,這個(gè)文件可以自行下載)痊末。你可以利用mqttws31.js來定義一個(gè)客戶端標(biāo)識,連接上mosquitto哩掺,訂閱一個(gè)主題凿叠,發(fā)布一個(gè)主題,接收消息,發(fā)布消息(與MQTT連接邏輯其實(shí)和硬件的一樣)盒件。但是注意的一點(diǎn)蹬碧,服務(wù)器端訂閱的主題其實(shí)是硬件端中發(fā)布的主題(這樣服務(wù)器就可以獲取硬件傳來的數(shù)據(jù));服務(wù)端發(fā)布的主題其實(shí)是硬件端訂閱的主題(這樣服務(wù)器就可以發(fā)布數(shù)據(jù)到硬件中)炒刁。兩個(gè)終端的主題是對應(yīng)的改览,這樣兩個(gè)終端之間數(shù)據(jù)才能互傳院刁。
待html頁面與mosquitto建立連接后蒜哀,對led控制的邏輯設(shè)計(jì)(用JavaScript即可)具體如下:用戶訪問html頁面渤涌,用戶開啟led燈,調(diào)用mqttws31.js其中的發(fā)送數(shù)據(jù)方法绽昏,將json數(shù)據(jù)發(fā)送到led燈中协屡,然后led燈解釋json數(shù)據(jù),最后修改led燈的狀態(tài)(其實(shí)html頁面的led狀態(tài)數(shù)據(jù)先發(fā)送到mosquitto全谤,然后mosquitto根據(jù)關(guān)聯(lián)的主題肤晓,最后將數(shù)據(jù)轉(zhuǎn)發(fā)到對應(yīng)主題的led燈中);
同時(shí)led燈也將自己的狀態(tài)發(fā)送到html頁面當(dāng)中认然,html頁面再進(jìn)行邏輯操作补憾,這樣就可以實(shí)現(xiàn)led的狀態(tài)同步和實(shí)時(shí)控制。
實(shí)現(xiàn)思路圖如下:
==================================================================
yeah卷员!簡單的遠(yuǎn)程控制led燈已經(jīng)結(jié)束盈匾,但下邊需要如何呢?既然自己都開了個(gè)頭毕骡,來削饵,做一個(gè)可以控制n個(gè)智能硬件的平臺吧~~。初步的設(shè)想:用戶可以自定義添加多個(gè)硬件(我想用掃碼添加的方式)未巫,添加用戶進(jìn)入不同的智能硬件控制頁面單獨(dú)控制硬件窿撬;智能管理后臺的搭建,框架的選定叙凡,數(shù)據(jù)庫的建立劈伴,邏輯的設(shè)計(jì)開發(fā)。握爷。跛璧。。新啼。感覺路還有很長~~追城,下一篇更精彩