吴忠躺衫网络科技有限公司

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

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

3天內不再提示

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

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

一、項目背景

公司和第三方合作開發一個傳感器項目,想要通過電腦或者手機去控制項目現場的傳感器控制情況。現在的最大問題在于,現場的邊緣終端設備接入的公網方式是無線接入,無法獲取固定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

審核編輯:湯梓紅

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

    關注

    2553

    文章

    51390

    瀏覽量

    756569
  • 通信
    +關注

    關注

    18

    文章

    6070

    瀏覽量

    136423
  • 服務器
    +關注

    關注

    12

    文章

    9303

    瀏覽量

    86060
  • 云平臺
    +關注

    關注

    1

    文章

    1326

    瀏覽量

    39134
  • MQTT
    +關注

    關注

    5

    文章

    653

    瀏覽量

    22691

原文標題:四、代碼實現

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

收藏 人收藏

    評論

    相關推薦

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

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

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

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

    如何實現平臺之間通信

    自己買了個服務器,是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

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

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

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

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

    單片機之間雙向通信的仿真電路圖免費下載

    本文檔的主要內容詳細介紹的是單片機之間雙向通信的仿真電路圖免費下載。
    發表于 01-07 15:44 ?8次下載
    單片機<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 ?17次下載

    保姆級操作示例!騰訊MQTT功能的連接與實現

    特點。它可以實現設備與云端之間的快速、可靠和實時的雙向通信。串口服務器與騰訊MQTT的結合,不僅可以
    的頭像 發表于 11-03 08:21 ?1746次閱讀
    保姆級操作示例!騰訊<b class='flag-5'>云</b><b class='flag-5'>MQTT</b>功能的連接與<b class='flag-5'>實現</b>

    邊緣計算網關實現MQTT對接到平臺

    實現計算資源的優化配置,也能更好發揮數據分析的能力。對此,物通博聯提供邊緣計算網關以MQTT協議與平臺實時
    的頭像 發表于 11-28 11:08 ?573次閱讀
    <b class='flag-5'>邊緣</b>計算網關<b class='flag-5'>實現</b><b class='flag-5'>MQTT</b>對接到<b class='flag-5'>云</b><b class='flag-5'>平臺</b>

    北斗短報文終端如何進行雙向通信

    北斗短報文終端雙向通信功能是基于中國北斗衛星導航系統(BDS)的衛星通信能力實現的。以下是北斗短報文終端進行
    的頭像 發表于 07-12 11:19 ?770次閱讀
    北斗短報文<b class='flag-5'>終端</b>如何進行<b class='flag-5'>雙向通信</b>?
    bet365官网bet365gwylc| 赌博百家乐官网秘籍| 百家乐投注方式| 大发888手机客户端| 真人百家乐官网娱乐场| 百家乐破战| 百家乐官网硬币打法| 百家乐游戏规则玩法| 时时博娱乐城评级| 名仕百家乐官网的玩法技巧和规则| 大发888交流心得| 基础百家乐官网博牌| 威尼斯人娱乐城是真的吗| 百家乐官网可以出千吗| 大发888游戏免费下载| 百家乐官网怎么完才能嬴| 大发888娱乐场官方| 网络百家乐官网公式打法| 威尼斯人娱乐平台注册网址| 迪威百家乐官网娱乐| 如何看百家乐的玩法技巧和规则| 百家乐官网开户送彩金28| 立即博百家乐的玩法技巧和规则 | 玩百家乐优博娱乐城| 百家乐官网分析下载| 沙龙百家乐娱乐场开户注册| 百家乐官网真人娱乐场| 嘉年华百家乐的玩法技巧和规则| 打百家乐官网最好办法| 波克城市棋牌下载| 百家乐官网必胜方法如果你还想继续不看可能后悔一生 | 盈彩娱乐| 太阳城百家乐的分数| 稳赢的百家乐官网投注方法 | 百家乐官网园搏彩论坛| 试玩百家乐帐| 十三张百家乐官网的玩法技巧和规则 | 沙龙国际娱乐网| 沙龙百家乐娱乐场| 扬中棋牌游戏中心| 澳门百家乐赌场网址|