一、項(xiàng)目背景
公司和第三方合作開(kāi)發(fā)一個(gè)傳感器項(xiàng)目,想要通過(guò)電腦或者手機(jī)去控制項(xiàng)目現(xiàn)場(chǎng)的傳感器控制情況。現(xiàn)在的最大問(wèn)題在于,現(xiàn)場(chǎng)的邊緣終端設(shè)備接入的公網(wǎng)方式是無(wú)線接入,無(wú)法獲取固定IP,所以常規(guī)的HTTP協(xié)議通信就沒(méi)法做,現(xiàn)在打算使用MQTT來(lái)實(shí)現(xiàn)云平臺(tái)和邊緣終端(傳感器)之間的雙向通信。
二、術(shù)語(yǔ)定義
2.1云平臺(tái)
主要是針對(duì)數(shù)據(jù)、設(shè)備等的管理。部署在云端的軟件應(yīng)用系統(tǒng),通過(guò)與邊緣終端,實(shí)現(xiàn)數(shù)據(jù)獲取或者指令下發(fā)。
2.2邊緣終端
位于網(wǎng)絡(luò)邊緣的計(jì)算機(jī)設(shè)備,通過(guò)網(wǎng)絡(luò)與云平臺(tái)連接,向下連接解析儀和各類(lèi)傳感器。
2.3解析儀
數(shù)據(jù)接受裝置,通過(guò)有線/無(wú)線模式,連接邊緣終端或通過(guò)有線模式接收不同來(lái)源的傳感器數(shù)據(jù)。
2.4傳感器
通過(guò)有線/無(wú)線模式,連接邊緣終端,傳輸相應(yīng)的參數(shù)或通過(guò)有線模式連接解析儀,傳輸相應(yīng)的參數(shù)。
三、網(wǎng)絡(luò)結(jié)構(gòu)
四、代碼實(shí)現(xiàn)
4.1 服務(wù)器實(shí)現(xiàn)
首先安裝nodejs和aedes,具體的操作和截圖網(wǎng)上有很多現(xiàn)成的。
新建一個(gè)“server.js”
const aedes = require('aedes')(); const aedesServer = require('net').createServer(aedes.handle); const port = 1883; aedesServer.listen(port, function () { console.log('服務(wù)啟動(dòng)并開(kāi)始監(jiān)聽(tīng)端口:', port) }) //監(jiān)聽(tīng)MQTT服務(wù)器端口,當(dāng)有客戶(hù)端連接上時(shí),觸發(fā)該回調(diào) aedes.on("client", (client) => { console.log("客戶(hù)端連接成功:", client.id); }) //監(jiān)聽(tīng)MQTT服務(wù)器端口,當(dāng)有客戶(hù)端主動(dòng)斷開(kāi)連接或者服務(wù)器600s內(nèi)沒(méi)收到某個(gè)客戶(hù)端的心跳包就會(huì)觸發(fā) aedes.on("clientDisconnect", (client) => { console.log("客戶(hù)端斷開(kāi)連接:", client.id); }) //監(jiān)聽(tīng)客戶(hù)端發(fā)布的主題 aedes.on("publish", function (packet, client) { //針對(duì)不同的客戶(hù)端寫(xiě)不同的邏輯 if (client) { //根據(jù)主題不同寫(xiě)不同的邏輯,建議采用JSON格式傳輸 console.log("監(jiān)聽(tīng)客戶(hù)端發(fā)過(guò)來(lái)的消息",packet.topic, packet.payload.toString()); } }) //服務(wù)器發(fā)出的消息 setInterval(() => { aedes.publish({ topic: "serverMsg", payload: "服務(wù)器發(fā)消息", qos: 1, retain: false, dup: false, cmd: "publish" }, (err) => { if (err) { console.log("發(fā)布失敗"); } }); }, 20000)
4.2客戶(hù)端實(shí)現(xiàn)
新建一個(gè)“client.js”
客戶(hù)端只需要使用“mqtt.connect”方法,就可以跟服務(wù)端建立長(zhǎng)連接。
就目前實(shí)際使用的情況看,客戶(hù)端偶爾會(huì)自動(dòng)與服務(wù)器斷開(kāi),并且自動(dòng)連上,穩(wěn)定性方面有待驗(yàn)證。
var mqtt = require('mqtt'); var client = mqtt.connect('mqtt://192.168.70.220:1883',{ clientId:'nodejs-mqtt-client' }) client.on('connect',function (){ console.log('連接上MQTT服務(wù)器') //需要訂閱服務(wù)器主題,不然無(wú)法接受消息 client.subscribe('serverMsg',{ qos:1 }) }) //發(fā)布客戶(hù)端消息 setInterval(()=>{ client.publish('topic1','hello mqtt client',{ qos:1 }) },20000) client.on('message',function (topic,message){ console.log('接受服務(wù)器消息:','主題:',topic,'消息:',message.toString()) })
4.3 效果呈現(xiàn)
通過(guò)兩個(gè)定時(shí)器,實(shí)現(xiàn)了雙向通信。
服務(wù)端
客戶(hù)端
審核編輯:湯梓紅
-
傳感器
+關(guān)注
關(guān)注
2553文章
51407瀏覽量
756631 -
通信
+關(guān)注
關(guān)注
18文章
6072瀏覽量
136432 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9308瀏覽量
86071 -
云平臺(tái)
+關(guān)注
關(guān)注
1文章
1327瀏覽量
39143 -
MQTT
+關(guān)注
關(guān)注
5文章
653瀏覽量
22698
原文標(biāo)題:四、代碼實(shí)現(xiàn)
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于RS485的多點(diǎn)雙向通信電路實(shí)現(xiàn)設(shè)計(jì)
![基于RS485的多點(diǎn)<b class='flag-5'>雙向通信</b>電路<b class='flag-5'>實(shí)現(xiàn)</b>設(shè)計(jì)](https://file.elecfans.com/web1/M00/C3/5C/o4YBAF8pKGKAeU63AAB1FtmK9mc469.png)
STM32F207利用DMA功能能實(shí)現(xiàn)串口1與串口6之間雙向通信嗎?
如何實(shí)現(xiàn)云平臺(tái)之間的通信?
NRF2401無(wú)線模塊的雙向通信怎么實(shí)現(xiàn)?
基于STM32F4開(kāi)發(fā)板和阿里云平臺(tái)的MQTT通信開(kāi)源項(xiàng)目
如何在設(shè)備上使用MQTT + TLS/SSL通道與阿里云平臺(tái)建立雙向通信
實(shí)現(xiàn)單片機(jī)雙向通信的實(shí)驗(yàn)資料分享
具有雙向通信功能的標(biāo)準(zhǔn)源
單片機(jī)之間雙向通信的仿真電路圖免費(fèi)下載
![單片機(jī)<b class='flag-5'>之間</b><b class='flag-5'>雙向通信</b>的仿真電路圖免費(fèi)下載](https://file.elecfans.com/web1/M00/B2/A1/o4YBAF4UO4-ACJDYAAH-KcFrdvo905.png)
物聯(lián)網(wǎng)項(xiàng)目之在Particle Argons之間進(jìn)行雙向通信
![物聯(lián)網(wǎng)項(xiàng)目之在Particle Argons<b class='flag-5'>之間</b>進(jìn)行<b class='flag-5'>雙向通信</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
保姆級(jí)操作示例!騰訊云MQTT功能的連接與實(shí)現(xiàn)
![保姆級(jí)操作示例!騰訊<b class='flag-5'>云</b><b class='flag-5'>MQTT</b>功能的連接與<b class='flag-5'>實(shí)現(xiàn)</b>](https://file.elecfans.com/web2/M00/3E/6A/pYYBAGJhBGGAGyDYAACBPQuBZQI711.png)
邊緣計(jì)算網(wǎng)關(guān)實(shí)現(xiàn)MQTT對(duì)接到云平臺(tái)
![<b class='flag-5'>邊緣</b>計(jì)算網(wǎng)關(guān)<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>MQTT</b>對(duì)接到<b class='flag-5'>云</b><b class='flag-5'>平臺(tái)</b>](https://file1.elecfans.com//web2/M00/B1/89/wKgaomVlWaiAOFi7AAPVgT1WpFg434.png)
北斗短報(bào)文終端如何進(jìn)行雙向通信?
![北斗短報(bào)文<b class='flag-5'>終端</b>如何進(jìn)行<b class='flag-5'>雙向通信</b>?](https://file1.elecfans.com/web2/M00/FB/52/wKgZomaQoDqAUSzqAADuCx1RGvc204.png)
評(píng)論