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

审核编辑:汤梓红

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

    关注

    2526

    文章

    48110

    浏览量

    740114
  • 通信
    +关注

    关注

    18

    文章

    5706

    浏览量

    134405
  • 服务器
    +关注

    关注

    12

    文章

    8120

    浏览量

    82524
  • 云平台
    +关注

    关注

    1

    文章

    1084

    浏览量

    38521
  • MQTT
    +关注

    关注

    5

    文章

    538

    浏览量

    21978

原文标题:四、代码实现

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

收藏 人收藏

    评论

    相关推荐

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

    RS485可以采用二线和四线两种方式,二线制可以实现真正的多点双向通信
    发表于 08-21 17:25 3514次阅读
    基于RS485的多点<b class='flag-5'>双向通信</b>电路<b class='flag-5'>实现</b>设计

    单线双向通信协议

    请问有没有什么开放的单线双向通信协议,想学习下,谢谢
    发表于 06-10 14:57

    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 11次下载