<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用MQTT實現云平臺和邊緣終端之間的雙向通信

馬哥Linux運維 ? 來源:博客園 ? 2023-11-20 11:49 ? 次閱讀

一、項目背景

公司和第三方合作開發一個傳感器項目,想要通過電腦或者手機去控制項目現場的傳感器控制情況?,F在的最大問題在于,現場的邊緣終端設備接入的公網方式是無線接入,無法獲取固定IP,所以常規的HTTP協議通信就沒法做,現在打算使用MQTT來實現云平臺和邊緣終端(傳感器)之間的雙向通信。

二、術語定義

2.1云平臺

主要是針對數據、設備等的管理。部署在云端的軟件應用系統,通過與邊緣終端,實現數據獲取或者指令下發。

2.2邊緣終端

位于網絡邊緣的計算機設備,通過網絡與云平臺連接,向下連接解析儀和各類傳感器。

2.3解析儀

數據接受裝置,通過有線/無線模式,連接邊緣終端或通過有線模式接收不同來源的傳感器數據。

2.4傳感器

通過有線/無線模式,連接邊緣終端,傳輸相應的參數或通過有線模式連接解析儀,傳輸相應的參數。

三、網絡結構

47f6c396-85e7-11ee-939d-92fbcf53809c.png

四、代碼實現

4.1 服務器實現

首先安裝nodejs和aedes,具體的操作和截圖網上有很多現成的。

新建一個“server.js”

const aedes = require('aedes')();
const aedesServer = require('net').createServer(aedes.handle);
const port = 1883;


aedesServer.listen(port, function () {
    console.log('服務啟動并開始監聽端口:', port)
})


//監聽MQTT服務器端口,當有客戶端連接上時,觸發該回調
aedes.on("client", (client) => {
    console.log("客戶端連接成功:", client.id);
})


//監聽MQTT服務器端口,當有客戶端主動斷開連接或者服務器600s內沒收到某個客戶端的心跳包就會觸發
aedes.on("clientDisconnect", (client) => {
    console.log("客戶端斷開連接:", client.id);
})


//監聽客戶端發布的主題
aedes.on("publish", function (packet, client) {
    //針對不同的客戶端寫不同的邏輯
    if (client) {
        //根據主題不同寫不同的邏輯,建議采用JSON格式傳輸
        console.log("監聽客戶端發過來的消息",packet.topic, packet.payload.toString());
    }
})


//服務器發出的消息
setInterval(() => {
    aedes.publish({
        topic: "serverMsg",
        payload: "服務器發消息",
        qos: 1,
        retain: false,
        dup: false,
        cmd: "publish"
    }, (err) => {
        if (err) {
            console.log("發布失敗");
        }
    });
}, 20000)

4.2客戶端實現

新建一個“client.js”

客戶端只需要使用“mqtt.connect”方法,就可以跟服務端建立長連接。

就目前實際使用的情況看,客戶端偶爾會自動與服務器斷開,并且自動連上,穩定性方面有待驗證。


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服務器')
    //需要訂閱服務器主題,不然無法接受消息
    client.subscribe('serverMsg',{
        qos:1
    })
})


//發布客戶端消息
setInterval(()=>{
    client.publish('topic1','hello mqtt client',{
        qos:1
    })
},20000)


client.on('message',function (topic,message){
    console.log('接受服務器消息:','主題:',topic,'消息:',message.toString())
})

4.3 效果呈現

通過兩個定時器,實現了雙向通信。

服務端

480cda78-85e7-11ee-939d-92fbcf53809c.png

客戶端

4820e9fa-85e7-11ee-939d-92fbcf53809c.png

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2529

    文章

    48473

    瀏覽量

    741764
  • 通信
    +關注

    關注

    18

    文章

    5730

    瀏覽量

    134608
  • 服務器
    +關注

    關注

    12

    文章

    8249

    瀏覽量

    82868
  • 云平臺
    +關注

    關注

    1

    文章

    1117

    瀏覽量

    38554
  • MQTT
    +關注

    關注

    5

    文章

    550

    瀏覽量

    22085

原文標題:四、代碼實現

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于RS485的多點雙向通信電路實現設計

    RS485可以采用二線和四線兩種方式,二線制可以實現真正的多點雙向通信。
    發表于 08-21 17:25 ?3582次閱讀
    基于RS485的多點<b class='flag-5'>雙向通信</b>電路<b class='flag-5'>實現</b>設計

    STM32F207利用DMA功能能實現串口1與串口6之間雙向通信嗎?

    請問一下大家,STM32F207利用DMA功能能實現串口1與串口6之間雙向通信么?建立通信橋梁不需要CPU參與。
    發表于 04-29 08:53

    tcp/ip雙向通信

    rt,現在有兩個電腦,要通過tcp/ip協議進行雙向通信,單向的收發已經解決了,但是雙向的就不知道該怎么做了,想了兩三個,試過都不行,求大神幫忙,說下思路也好,3q~~~~
    發表于 07-20 23:40

    CC2650怎么實現手機與單片機的雙向通信?

    CC2650怎么實現手機與單片機的雙向通信?TI的SMARTRF開發板,CC2650模塊,就為了實現手機與單片機的雙向通信 。我下載例程SimpleBLEPeripheral后能用手機
    發表于 03-25 11:20

    如何實現平臺之間通信?

    自己買了個服務器,是Ubuntu的系統,,同時手里也有一塊探索者的板子,想要實現他們之間通信,傳輸數據,能實現嗎?還是說只能用arm的芯
    發表于 09-25 04:22

    NRF2401無線模塊的雙向通信怎么實現?

    目前在做一個無線模塊的雙向通信,甲機發一次,乙機收一次,乙機發一次,甲機收一次,就不能雙向通信啦!怎么解決?的是原子哥的程序!
    發表于 05-18 04:19

    基于STM32F4開發板和阿里平臺MQTT通信開源項目

    【github項目】基于STM32F4開發板和阿里平臺MQTT通信開源項目摘要 當前網絡上MQTT的教程比較豐富,但實用的很少,有對
    發表于 08-03 08:04

    如何在設備上使用MQTT + TLS/SSL通道與阿里平臺建立雙向通信

    使用 pkgs —update 命令下載軟件包MQTT 示例該 MQTT 示例程序以 RGB-LED 為例,演示了如何在設備上使用 MQTT + TLS/SSL 通道與阿里
    發表于 08-11 11:00

    實現單片機雙向通信的實驗資料分享

    詳細介紹的是實現兩個單片機雙向通信的實驗資料合集包括了程序和仿真電路圖及工程文件
    發表于 09-25 06:43

    單片機通信中,如何用單根線實現200米距離的雙向通信?

    現在人力成本貴,為減少布線,想一根線實現雙向通信
    發表于 10-08 18:57

    具有雙向通信功能的標準源

    本文介紹的具有雙向通信功能的標準源,是通過串行通信接口將PC機與標準源相連以實現雙向通信功能的系統。PC機的通信功能是利用Visual Ba
    發表于 02-25 11:25 ?15次下載

    基于8051的Proteus仿真-單片機之間雙向通信

    基于8051的Proteus仿真-單片機之間雙向通信
    發表于 09-01 23:33 ?16次下載

    如何減少器件間通信所用的I/O引腳數實現雙向通信

    隨著嵌入式系統的小型化趨勢,市場對減少器件間通信所用的I/O 引腳數的需求與日俱增。Microchip 開發的UNI/O? 總線滿足了這一需求,這一低成本且易于實現的解決方案,僅需要使用一個I/O 引腳就可實現
    發表于 04-27 16:14 ?8次下載
    如何減少器件間<b class='flag-5'>通信</b>所用的I/O引腳數<b class='flag-5'>實現</b><b class='flag-5'>雙向通信</b>

    物聯網項目之在Particle Argons之間進行雙向通信

    電子發燒友網站提供《物聯網項目之在Particle Argons之間進行雙向通信.zip》資料免費下載
    發表于 12-07 14:54 ?0次下載
    物聯網項目之在Particle Argons<b class='flag-5'>之間</b>進行<b class='flag-5'>雙向通信</b>

    基于AT89C51單片機之間雙向通信仿真及代碼

    基于AT89C51單片機單片機之間雙向通信仿真及代碼
    發表于 05-05 10:29 ?15次下載
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>