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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2550

    文章

    51046

    浏览量

    753122
  • 通信
    +关注

    关注

    18

    文章

    6029

    浏览量

    135954
  • 服务器
    +关注

    关注

    12

    文章

    9129

    浏览量

    85343
  • 云平台
    +关注

    关注

    1

    文章

    1304

    浏览量

    38943
  • MQTT
    +关注

    关注

    5

    文章

    650

    浏览量

    22489

原文标题:四、代码实现

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于RS485的多点双向通信电路实现设计

    RS485可以采用二线和四线两种方式,二线制可以实现真正的多点双向通信
    发表于 08-21 17:25 4077次阅读
    基于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 1657次阅读
    保姆级操作示例!腾讯<b class='flag-5'>云</b><b class='flag-5'>MQTT</b>功能的连接与<b class='flag-5'>实现</b>

    边缘计算网关实现MQTT对接到平台

    实现计算资源的优化配置,也能更好发挥数据分析的能力。对此,物通博联提供边缘计算网关以MQTT协议与平台实时
    的头像 发表于 11-28 11:08 531次阅读
    <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 619次阅读
    北斗短报文<b class='flag-5'>终端</b>如何进行<b class='flag-5'>双向通信</b>?