• [技术干货] 将 CoAP 协议设备接入 EMQX Cloud
    随着物联网技术的发展与普及,越来越多的智能设备具备了网络连接与数据传输能力。物联网场景中设备大多都是资源限制型的,比如 CPU、RAM、Flash、网络宽带等。尤其是由电池供电的设备,对传输协议的功耗以及带宽非常敏感,直接使用 TCP 和 HTTP 协议来实现设备与平台之间的数据交换无法满足设备对低功耗的要求。为了让这部分设备能够顺利接入网络,CoAP 协议应运而生。作为致力于为物联网各类场景提供数据连接能力的全托管 MQTT 消息服务,EMQX Cloud (https://www.emqx.com/zh/cloud) 也支持 CoAP 协议的设备接入,允许符合某种定义的 CoAP 消息格式向 EMQX Cloud 执行发布、订阅、和接收消息等操作。本文将介绍如何使用 EMQX Cloud 实现 CoAP 协议设备的接入。CoAP 协议简介由于物联网场景复杂多样,设备端硬件条件、网络稳定性、流量限制、设备功耗以及设备连接数量等多方面因素造成物联网设备的消息传递与传统互联网场景有着很大不同,也因此产生了多种物联网通讯协议。CoAP 协议网关作为一种在物联网世界的类 HTTP 的协议,使用在资源受限的物联网设备上,它的详细规范定义在 RFC 7252。协议特性CoAP 参考了很多 HTTP 的设计思路,同时也根据受限资源限制设备的具体情况改良了诸多设计细节,增加了很多实用的功能。如:基于消息模型传输层基于 UDP 协议,支持受限设备使用类似 HTTP 请求的请求/响应模型,HTTP 是文本格式,CoAP 为二进制格式,且比 HTTP 更加紧凑支持双向通信轻量、低功耗支持可靠传输,数据重传,块传输,确保数据可靠到达支持 IP 多播支持观察模式支持异步通信市场状况相比于 MQTT,CoAP 更加轻量、开销更低,在某些特定的设备和网络环境下更为合适,EMQX Cloud 以及部分公有云物联网平台都提供提供了 CoAP 接入能力。CoAP 协议接入 EMQX Cloud创建部署新建部署,在 EMQX Cloud 部署页面,获取到公网连接地址:120.77.x.x。开通 CoAP 接入网关CoAP 接入网关目前处于内测阶段,您可以提交工单开启接入能力。开通后 CoAP 接入网关地址是您的部署连接地址,即 120.77.x.x,端口为 udp 5683 。连接到部署、发布订阅消息libcoap 是一个非常易用的 CoAP 客户端库,此处我们使用它作为 CoAP 客户端来测试 EMQX Cloud CoAP 接入网关的功能。安装部署可参考如下示例。git clone http://github.com/obgm/libcoap cd libcoap ./autogen.sh ./configure --enable-documentation=no --enable-tests=no make1、发布示例我们使用 libcoap 往 EMQX Cloud 部署发布一条消息:主题名称为:"topic1"Client ID 为:"client1"用户名为:"emqx"密码为:"public"Payload 为:"hello,EMQX Cloud"# CoAP 终端发送消息 "hello EMQX Cloud",topic 为 topic1 ./examples/coap-client -m put -e "hello,EMQX Cloud" "coap://120.77.x.x:5683/mqtt/topic1?c=client1&u=emqx&p=public"接下来,我们使用 MQTT X 订阅对应主题 topic1,即可看到消息已成功发布。2、订阅示例我们使用 libcoap 订阅一个主题:主题名称为:"topic1"Client ID 为:"client1"用户名为:"emqx"密码为:"public"Payload 为:"hello,EMQX Cloud"接下来,我们使用 MQTT X 发送 "hello,EMQX Cloud" 给 topic1 主题。# CoAP 终端订阅 topic1 主题,-s 20表示订阅维持20秒 ./examples/coap-client -m get -s 20 "coap://120.77.x.x:5683/mqtt/topic1?c=client1&u=emqx&p=public"在这期间,如果主题 topic1 上有消息产生,libcoap 便会收到该条消息。至此,我们完成了使用 CoAP 协议网关接入 EMQX Cloud 的全部流程。
  • [技术干货] 基于STM32+华为云IOT设计的智慧路灯
    ## 1. 前言 随着工业和城市的快速发展,道路照明系统的产业也在迅速发展,并趋于复杂化,为了更经济地控制和维护复杂的路灯系统,市面上各大科技公司开发了各种路灯控制系统,并且路灯都连上物联网云端,连上了政府网络,可以远程了解路灯的工作情况,运行情况。 为了方便了解物联网平台,学习物联网开发,了解智慧路灯的开发,本文就采用华为云IOT物联网平台,选择STM32作为主控芯片,再配合相关的传感器完成智慧路灯开发。 ## 2. 具体实现的功能以及相关的硬件 当前设计的智慧路灯采用NBIOT模块-BC20连接华为云物联网服务器,上传路灯的各种参数信息:环境光强度、太阳能充电板电压、锂电池电量等信息。设计了一款手机APP,可以通过华为云物联网平台的应用侧提供的开发接口,获取路灯上传的参数信息,并且可以在手机APP上远程手动控制路灯开关,设置路灯的开启和关闭时间等。 智慧路灯的的主控芯片采用STM32F103C8T6、NBIOT联网模块采用BC20,BC20内置了MQTT协议,可以通过AT指令连接物联网平台实现通信。智慧路灯采用锂电池供电,并且配有太阳能充电板,可以使用太阳进行充电补偿电量。使用了功率监控器,电池电量检测芯片,可以检测充电效率、电流、电压、电池电量等信息。BC20带了GPS功能,可以上报路灯的GPS位置到云端服务器,手机APP获取之后,可以调用百度地图显示出路灯的位置。 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651904879488714598.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651905049808717896.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651907396097600830.png) ## 3. 硬件选型 ### 3.1 STM32F103C8T6 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651904497591300685.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651904527344889029.png) ### 3.2 太阳能板 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651904575437993531.png) ### 3.3 锂电池充电模块 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651904609320735583.png) ### 3.4 功率检测模块 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651904636385170917.png) ### 3.5 BH1750光敏传感器 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651904688679971707.png) ### 3.6 LED灯 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651904838431500575.png) ### 3.7 BC20-NBIOT模块 ```cpp 型号: BC20+BD+GPS 品牌: 创思 产地: 中国大陆 接口类型: TTL 适用场景: NBIOT 尺寸: 40x40x12mm 工作电流: 0.5A 支持TCP/IP协议: 支持传输速率: 115200Kbps 工作电压: 5V 是否支持语音电话: 否 模块类型: 其他 是否支持短信: 否 支持制式标准: GSM/GPRS(2G) 是否支持电话簿: 否 ``` ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651904930578302165.png) ## 4. 创建产品与设备 ### 4.1 创建产品 地址:https://www.huaweicloud.com/?locale=zh-cn ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651905286055616975.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651905310302336085.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651905346120995930.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651905355961192856.png) ### 4.2 自定义模型 地址: https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-dev/all-product/7211833377cf435c8c0580de390eedbe/product-detail/6276134223aaf461a0f6e515 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651905386151313445.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651905410391442819.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651905446626914086.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651905488528458906.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651905530969110052.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651905576622186479.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651907496604673562.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651907619226102945.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651907632415683435.png) ### 4.3 创建设备 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651905637622855511.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651905648217271693.png) ```cpp { "device_id": "6276134223aaf461a0f6e515_1126626497", "secret": "12345678" } ``` ### 4.4 MQTT密匙生成 创建完产品、设备之后,接下来就需要知道如何通过MQTT协议登陆华为云服务器。 官方的详细介绍在这里: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html#ZH-CN_TOPIC_0240834853__zh-cn_topic_0251997880_li365284516112 属性上报格式: https://support.huaweicloud.com/api-iothub/iot_06_v5_3010.html ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220506/1651816169416838509.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220506/1651816116025678829.png) MQTT设备登陆密匙生成地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/ ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651905876017870520.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651905895870778100.png) ```cpp DeviceId 6276134223aaf461a0f6e515_1126626497 DeviceSecret 12345678 ClientId 6276134223aaf461a0f6e515_1126626497_0_0_2022050706 Username 6276134223aaf461a0f6e515_1126626497 Password 73ebe0779dbd5b2e2fd3db8ab8f642b78d7a532576f2e14d2799d4f78d37bcc8 ``` 华为云物联网平台的域名是: `161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com` 华为云物联网平台的IP地址是:`121.36.42.100` 在软件里参数填充正确之后,就看到设备已经连接成功了。 接下来打开设备页面,可以看到设备已经在线了。 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651906054497415539.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651906094257661687.png) ### 4.5 主题订阅与发布 ```cpp //订阅主题: 平台下发消息给设备 $oc/devices/6276134223aaf461a0f6e515_1126626497/sys/messages/down //设备上报数据 $oc/devices/6276134223aaf461a0f6e515_1126626497/sys/properties/report //上报的属性消息 (一次可以上报多个属性,在json里增加就行了) {"services": [{"service_id": "led","properties":{"GPS":"lat:12.345,lng:45.678"}}]} ``` 通过MQTT客户端软件模拟上报测试: ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651906237198890692.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651906251726890308.png) ### 4.6 应用侧开发 为了更方便的展示设备数据,与设备完成交互,还需要开发一个配套的上位机,官方提供了应用侧开发的API接口、SDK接口,为了方便通用一点,我这里采用了API接口完成数据交互,上位机软件采用QT开发。 帮助文档地址: ttps://support.huaweicloud.com/api-iothub/iot_06_v5_0034.html 设备属性就是设备上传的传感器状态数据信息,应用侧提供了API接口,可以主动向设备端下发请求指令;设备端收到指令之后需要按照约定的数据格式上报数据;所以,要实现应用层与设备端的数据交互,需要应用层与设备端配合才能完成。 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220506/1651817418902323890.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220506/1651817464627894213.png) ## 5. STM32程序设计 STM32连接华为云IOT的工程案例: https://download.csdn.net/download/xiaolong1126626497/81993720 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651906611891210428.png) ### 5.1 BC20连接华为云物联网服务器-调试 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651906746794397200.png) ```cpp 连接MQTT服务器 AT+QMTOPEN=0,"a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com",1883 OK +QMTOPEN: 0,0 登录MQTT服务器 命令格式: AT+QMTCONN=,,, AT+QMTCONN=0,"6210e8acde9933029be8facf_dev1_0_0_2022021913","6210e8acde9933029be8facf_dev1","6cea55404b463e666cd7a6060daba745bbaa17fe7078dfef45f8151cdf19673d" OK +QMTCONN: 0,0,0 订阅主题 命令格式: AT+QMTSUB=,,"”,[,"”,…] AT+QMTSUB=0,1,"$oc/devices/6210e8acde9933029be8facf_dev1/sys/messages/down",2 OK +QMTSUB: 0,1,0,2 发布主题 命令格式:AT+QMTPUB=,,,,"","" 先发送指令: AT+QMTPUB=0,0,0,0,"$oc/devices/6210e8acde9933029be8facf_dev1/sys/properties/repor" 等待返回 ">" 接着发送数据.不需要加回车。 "{"services": [{"service_id": "gps","properties":{"longitude":12.345,"latitude":33.345}}]}" 数据发送完毕,再发送结束符。 十六进制的值--0x1a 。某些串口调试助手可以适应ctrl+z 快捷键输入0xA 等待模块返回"OK",到此数据发送完成。 OK +QMTPUB: 0,0,0 ``` ### 5.2 测试模块 第一步接上之后,串口调试助手选择波特率为115200,勾选软件上的发送新行选项。发送`AT`过去,正常模块会返回`OK`。 ```cpp 查询模块是否正常 AT OK 获取卡号,查询卡是否插好 AT+CIMI 460041052911195 OK 激活网络 AT+CGATT=1 OK 获取网络激活状态 AT+CGATT? +CGATT: 1 OK 查询网络质量 AT+CSQ +CSQ: 26,0 OK AT+CEREG=? //检查网络状态 +CEREG: 0,1 //找网成功 OK ``` ### 5.3 keil工程代码 ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651906862424769895.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651906872248234568.png) ![image.png](https://bbs-img.huaweicloud.com/blogs/img/20220507/1651906882983740280.png) ### 5.4 功率检测 ```cpp #include "INA226.h" #include "delay.h" // 接线说明: // 模拟IIC: //IIC_SCL -- 时钟线PB6(推挽、开漏输出) //IIC_SDA -- 双向数据线PB7 INA226 ina226_data; //初始化INA226 void INA226_Init(void) { IIC_Init(); INA226_SendData(INA226_ADDR1,CFG_REG,0x8000); //重新启动 INA226_SendData(INA226_ADDR1,CFG_REG,0x484f); //设置转换时间204us,求平均值次数128,采样时间为204*128,设置模式为分流和总线连续模式 INA226_SendData(INA226_ADDR1,CAL_REG,CAL); //设置分辨率 //INA226_SendData(INA226_ADDR1,CAL_REG,0x0012);//设置分流电压转电流转换参数 INA226_Get_ID(INA226_ADDR1); //获取ina226的id } //设置寄存器指针 void INA226_SetRegPointer(u8 addr,u8 reg) { IIC_Start(); IIC_Send_Byte(addr); IIC_Wait_Ack(); IIC_Send_Byte(reg); IIC_Wait_Ack(); IIC_Stop(); } //发送,写入数据 void INA226_SendData(u8 addr,u8 reg,u16 data) { u8 temp=0; IIC_Start(); IIC_Send_Byte(addr); IIC_Wait_Ack(); IIC_Send_Byte(reg); IIC_Wait_Ack(); temp = (u8)(data>>8); IIC_Send_Byte(temp); IIC_Wait_Ack(); temp = (u8)(data&0x00FF); IIC_Send_Byte(temp); IIC_Wait_Ack(); IIC_Stop(); } //读取数据 u16 INA226_ReadData(u8 addr) { u16 temp=0; IIC_Start(); IIC_Send_Byte(addr+1); IIC_Wait_Ack(); temp = IIC_Read_Byte(1); temp=8; temp |= IIC_Read_Byte(0); IIC_Stop(); return temp; } //1mA/bit u16 INA226_GetShunt_Current(u8 addr) { u16 temp=0; INA226_SetRegPointer(addr,CUR_REG); temp = INA226_ReadData(addr); if(temp&0x8000) temp = ~(temp - 1); return temp; } //获取id void INA226_Get_ID(u8 addr) { u32 temp=0; INA226_SetRegPointer(addr,INA226_GET_ADDR); temp = INA226_ReadData(addr); ina226_data.ina226_id = temp; } //获取校准值 u16 INA226_GET_CAL_REG(u8 addr) { u32 temp=0; INA226_SetRegPointer(addr,CAL_REG); temp = INA226_ReadData(addr); return (u16)temp; } //1.25mV/bit u16 INA226_GetVoltage(u8 addr) { u32 temp = 0; INA226_SetRegPointer(addr,BV_REG); temp = INA226_ReadData(addr); return (u16)temp; } //2.5uV/bit u16 INA226_GetShuntVoltage(u8 addr) { int16_t temp = 0; INA226_SetRegPointer(addr,SV_REG); temp = INA226_ReadData(addr); if(temp&0x8000) temp = ~(temp - 1); return (u16)temp; } //获取电压 void GetVoltage(float *Voltage)//mV { *Voltage = INA226_GetVoltage(INA226_ADDR1)*Voltage_LSB; } //获取分流电压 void Get_Shunt_voltage(float *Voltage)//uV { *Voltage = (INA226_GetShuntVoltage(INA226_ADDR1)*INA226_VAL_LSB);//如需矫正电流分流参数请将这里改为2.5 } //获取电流 void Get_Shunt_Current(float *Current)//mA { *Current = (INA226_GetShunt_Current(INA226_ADDR1)* CURRENT_LSB); } //获取功率= 总线电压 * 电流 void get_power()//W { GetVoltage(&ina226_data.voltageVal); //mV Get_Shunt_voltage(&ina226_data.Shunt_voltage); //uV Get_Shunt_Current(&ina226_data.Shunt_Current); //mA Get_Power(&ina226_data.Power); ina226_data.Power_Val = ina226_data.voltageVal*0.001f * ina226_data.Shunt_Current*0.001f; //mV*mA } //获取功率装载值,ina226内部计算的的功率,由于未经校准,故不采用 u16 INA226_Get_Power(u8 addr) { int16_t temp=0; INA226_SetRegPointer(addr,PWR_REG); temp = INA226_ReadData(addr); return (u16)temp; } //获取功率,ina226内部计算,不准确,不采用 void Get_Power(float *Power)//W { *Power = (INA226_Get_Power(INA226_ADDR1)*POWER_LSB); } //不设置报警,舍弃 /* u8 INA226_AlertAddr() { u8 temp; IIC_Start(); IIC_Send_Byte(INA226_GETALADDR); IIC_Wait_Ack(); temp = IIC_Read_Byte(1); IIC_Stop(); return temp; } */ ``` ### 5.5 BH1750环境光强度 ```cpp #include "bh1750.h" float Read_BH1750_Data() { unsigned char t0; unsigned char t1; float t; u8 r_s=0; IIC_Start(); //发送起始信号 IIC_WriteOneByteData(0x46); r_s=IIC_GetACK();//获取应答 if(r_s)printf("error:1\r\n"); IIC_WriteOneByteData(0x01); r_s=IIC_GetACK();//获取应答 if(r_s)printf("error:2\r\n"); IIC_Stop(); //停止信号 IIC_Start(); //发送起始信号 IIC_WriteOneByteData(0x46); r_s=IIC_GetACK();//获取应答 if(r_s)printf("error:3\r\n"); IIC_WriteOneByteData(0x01); r_s=IIC_GetACK();//获取应答 if(r_s)printf("error:4\r\n"); IIC_Stop(); //停止信号 IIC_Start(); //发送起始信号 IIC_WriteOneByteData(0x46); r_s=IIC_GetACK();//获取应答 if(r_s)printf("error:5\r\n"); IIC_WriteOneByteData(0x10); r_s=IIC_GetACK();//获取应答 if(r_s)printf("error:6\r\n"); IIC_Stop(); //停止信号 DelayMs(100); //等待 IIC_Start(); //发送起始信号 IIC_WriteOneByteData(0x47); r_s=IIC_GetACK();//获取应答 if(r_s)printf("error:7\r\n"); t0=IIC_ReadOneByteData(); //接收数据 IIC_SendACK(0); //发送应答信号 t1=IIC_ReadOneByteData(); //接收数据 IIC_SendACK(1); //发送非应答信号 IIC_Stop(); //停止信号 t=(((t08)|t1)/1.2); return t; } ```
  • [行业资讯] OPCUA+MQTT构建物联网通用框架(转)
    写在前面:为了应对标准化和跨平台的趋势,更好的推广OPC,OPC基金会在OPCDA成功应用的基础上推出了一个新的OPC标准——OPC UA,OPCUA不再基于分布式组件对象模型(DCOM),而是以面向服务架构(SOA)为基础,因此,在未来的若干年中,OPCUA将逐步取代OPCDA,成为新一代的OPC标准,助力工业4.0。而提起MQTT,或许大家有些陌生。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。具有轻量、简单、开放和易于实现的特点,尤其在IOT领域应用非常广泛。物联网一直都是一个很热门的话题,而数据上云,也是现在工业上很普遍的一个需求。至于如何实现,各个厂家都提供了各种不同的解决方案,无分好坏,最适合的就是最好的。刚看完一篇名为《OPCUA+MQTT=物联网扩展的热门组合》的公众号文章之后,文思泉涌,想着如何将OPCUA与MQTT联合起来,构建一个物联网通用框架,实现数据远传。01PART整体网络架构很多时候,我们的需求是这样的:现场有N台不同的设备或系统,每台设备或者系统的协议是各不相同的,希望可以用一种通用并且简单的方法,将这些数据传到云端,实现远程访问。这样的需求,在上位机中其实是物联网最典型的应用之一,那么采用OPCUA+MQTT或许是个不错的选择,整体的框架设计如下:图表 1 整体网络架构为了实现整体功能,这里的设备层,采用Modbus Slave,基于Modbus TCP协议来做仿真测试,增加5个变量,分为为压力1-压力5,对应地址从40001-40010,数据类型为浮点型,运行Modbus Slave仿真结果如下:图表 2 ModbusTCP服务器02PART服务层至于服务层,主要是OPCUA服务器的开发应用,这里我们有两个选择,一种是采用第三方的OPC软件,比如Kepware、Knight、Matrikon这些公司的产品,这种比较容易,做下相关配置即可,另外一种方式就是自己开发,相对来说难度要大一些。这里我使用自己开发的一款软件——上位机CMS配置一体化软件,通过简单配置,在10秒内,实现了ModbusTCP客户端数据通信,结果如下:图表 3 ModbusTCPClient通信测试然而,这部分,仅仅是实现了ModbusTCP客户端的功能,如果要实现OPCUA服务器的功能,需要激活一下OPCUA服务器,在服务器节点下添加一台OPCUA服务器即可,添加完成后,保存重新运行,结果如下: 图表 4 开启OPCUAServer为了测试OPCUA服务器是否开启成功,需要进行测试,可以使用官方软件UAExpert软件来测试一下:图表 5 OPCUAClient通信测试03PART数据层(1)在实现数据层功能之前,需要创建一个MQTT服务器,这里基于.NET CORE编写了一个MQTT服务器的程序,并在阿里云服务器中部署运行(这里要注意开放端口1883),运行效果如下: 图表 6 MQTT服务器(2)MQTT服务器创建完成之后,重新打开一个CMS配置软件来进行OPCUAClient的功能测试,上一节中的UAExpert是官方的OPCUA客户端软件,仅用于测试使用,这里的使用的CMS配置软件的OPCUAClient是自己开发的客户端程序,经过配置之后,运行结果如下: 图表 7 OPCUAClient(3)在CMS配置人家的服务器节点中,右击添加一个MQTTClient,根据MQTT服务器配置相关IP、用户、密码、主题及更新时间等信息,具体如下:图表 8 MQTT客户端配置(4)配置完成后点击启动按钮,整体运行之后,可以看到MQTT连接成功,并按照设定的周期将最新的数据发布到指定的主题中,效果如下:图表 9 启动MQTT客户端(5)打开MQTT服务器,也可以看到不断地有数据发布过来,这里为了便于观察结果,将压力1的数据仿真成每秒加1,MQTT服务器数据接收如下:图表 10 MQTT服务器数据接收04PART应用层通过以上的相关部署,即可实现整个OPCUA+MQTT的实现,实际应用时,只需要开启一个MQTT客户端,连接指定的MQTT服务器,并订阅相应的主题,即可获取到设备层的实时数据,这里使用一个常用的MQTT客户端软件,即MQTT.fx: 图表 11 MQTT.fx通信测试写在最后:本文旨在结合当下主流的OPCUA统一架构和MQTT通信协议,实现一种数据上云的途径,对于自动化行业的上位机工程师来说,可以拓展大家的思路。未来更多是IT和OT相结合的一种趋势,因此,作为每个工控技术人员,都要时刻保持危机感,不断学习,不断进步,这样才能更好地面对未来工业的快速发展。       原文标题 : OPCUA+MQTT实现数据上云
  • [问题求助] 有大佬能帮忙给代码加注释吗,MQTT连接云平台
    【功能模块】通过oc_mqtt_profile_connect()函数连接平台。具体代码如下: static int task_main_entry(void) { app_msg_t *app_msg; uint32_t ret ; WifiConnect(CONFIG_WIFI_SSID, CONFIG_WIFI_PWD); //连接WIFI dtls_al_init(); mqtt_al_init(); oc_mqtt_init(); //初始化MQTT g_app_cb.app_msg = queue_create("queue_rcvmsg",10,1); if(NULL == g_app_cb.app_msg){ printf("Create receive msg queue failed"); } oc_mqtt_profile_connect_t connect_para; (void) memset( &connect_para, 0, sizeof(connect_para)); connect_para.boostrap = 0; connect_para.device_id = CONFIG_APP_DEVICEID; //设备ID connect_para.device_passwd = CONFIG_APP_DEVICEPWD;//设备密钥 connect_para.server_addr = CONFIG_APP_SERVERIP; //服务器IP地址 connect_para.server_port = CONFIG_APP_SERVERPORT; //服务器端口 connect_para.life_time = CONFIG_APP_LIFETIME; connect_para.rcvfunc = msg_rcv_callback; connect_para.security.type = EN_DTLS_AL_SECURITY_TYPE_NONE; ret = oc_mqtt_profile_connect(&connect_para); if((ret == (int)en_oc_mqtt_err_ok)){ g_app_cb.connected = 1; printf("oc_mqtt_profile_connect succed!\r\n"); } else { printf("oc_mqtt_profile_connect faild!\r\n"); }【操作步骤&问题现象】1.【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【小熊派】【mqtt】连接到mqtt服务器出现问题
    【功能模块】D11_iot_cloud_oc_infrared目录下iot_cloud_oc_sample.c【操作步骤&问题现象】1、如果我不想连接到华为lot平台,而是其他mqtt服务器平台,这些参数应该填什么以及另外需要修改什么【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 基于STM32+华为云IOT设计的云平台监控系统
    ## 1. 前言 智能系统作为新兴产业,是国家重点发展产业之一。国外自美国在1984年建设出真正的智能建筑至今为止已经有30多年的历史了。由于智能家居的安全、高效、便捷以,及智能化等独特魅力,使智能家居行业在2003年逐步进入我国的家居市场,但是由于我国起步晚,使得智能家居行业标准在我国家居市场上并不统一。随着全球资源的不断减少以及环境的破坏,“节能环保”成为了全球科技发展的首要要求,而“全球智能化”在节能环保方面的优势使得智能家居成为了发展主流,因此具有十分广阔的市场前景。同时,随着科技的进步,传统建筑已经不能满足现代人对生活方面舒适度的需求,而智能系统也在不知不觉间渗入我们的生活。 智能家居(smart home)以住宅为平台,利用嵌入式单片机为核心控制器来实现无 线通信、安全防范及自动控制技术的智能家居环境的系统集成,用以实现对智能家居 环境的远程安防监控,环境监测以及各个子系统的控制,构建了高效智能的住宅设施 与家庭安全的管理系统,家居智能性、安全性,便利性和舒适性等都有显著提高,有效的提高了人们生活品质。 智能家居不仅提供舒适宜人且高品位的家庭生活空间,实现更智能的家庭安防系统;还将家居环境由原来的被动静止结构转变为具有能动智慧的工具,提供全方位的信息交互功能。物联网中的无线传感器应用对家庭的智能防灾,灯光控制,以及家电联网都提供了一种很好的解决办法。而且使用GPRS通信模块,可以将家庭中的突发事件信息告知户主,并且进行智能报警。这样就极大降低了家庭意外灾难的损失。 本次设计结合现代生活的具体需求,设计出一套基于华为云IOT设计的云平台监控系统,可以远程实时查看家里光照强度、温湿度等信息,支持在云端控制家里的电器设备,实现远程控制。 ## 2. 具体需求 主要实现对光照强度、温湿度等信息的实时监测,将相关信息、设备状态信息等实时显示,通过ESP8266wifi模块进行联网可实现远程数据传输,利用华为云IOT物联网云平台,MQTT传输协议,调用华为云IOT平台提供的接口设计上位机实现远程控制显示。 硬件选项要求: (1)ESP8266 串口WIFI,用来与OneNet进行远程通信。 (2)DHT11 温度传感器,检测本地环境的温度湿度信息。 (3)继电器,来模拟控制家里的电器。 (4)BH1750 光敏传感器,检测环境光强度 (5)MQ135 空气质量传感器。可以检测可燃气体、烟雾浓度,实现火警预警。 (6)OLED显示屏显示本地的传感器的参数情况,实时展示 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816433167571724.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816358823524611.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816377088412534.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816394037745009.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816406700181087.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816417082333207.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816439064981259.png) ## 2. 登录华为云创建云端产品与设备 ### 2.1 创建产品 华为运官网: https://www.huaweicloud.com/ ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816482525496099.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816495395323886.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816506997730696.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816516479652095.png) ```cpp MQTT (1883) a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com ``` 我们设备接入的协议选择MQTT,端口对应是1883 **接下来继续创建产品,点击产品页面,点击右上角创建产品:** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816534738576369.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816543464302497.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816550839426645.png) ### 4.2 创建设备 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816566080892973.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816579410807069.png) ### 4.3 产品模型定义 这一步就是设置上报设备的属性,也就是设备的数据类型定义。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816594806369792.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816605306814257.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816613714151961.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816623466171100.png) ### 3.4 生成MQTT登录密匙 创建完产品、设备之后,接下来就需要知道如何通过MQTT协议登陆华为云服务器。 官方的详细介绍在这里: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html#ZH-CN_TOPIC_0240834853__zh-cn_topic_0251997880_li365284516112 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816646165869974.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816655516705506.png) MQTT设备登陆密匙生成地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/ ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816677130321615.png) ### 3.5 使用MQTT客户端软件登录 所有的参数已经得到,接下来采用MQTT客户端登录华为云进行测试。 下面这个软件是自己开发的,为了方便测试MQTT协议登录。 华为云物联网平台的域名是: `a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com` 华为云物联网平台的IP地址是: `121.36.42.100` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816703266948105.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816714811811690.png) ### 3.6 上报数据 官方文档: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html#ZH-CN_TOPIC_0240834853__zh-cn_topic_0251997880_li365284516112 在这个文档里介绍了MQTT上报数据的格式。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816734255334377.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816743973974989.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816753994728612.png) **总结的格式:** ```cpp //订阅主题: 平台下发消息给设备 $oc/devices/61a580fad28ce3028832c2d8_esp8266_iot/sys/messages/down //设备上报数据 $oc/devices/61a580fad28ce3028832c2d8_esp8266_iot/sys/properties/report //上报的属性消息 (一次可以上报多个属性,在json里增加就行了) {"services": [{"service_id": "dht11","properties":{"DHT11-C":50}}]} ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816773290205537.png) ## 4. STM32设备端代码 串口上会输出当前程序运行的状态信息,可以打开串口调试助手查看。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/13/1649816796928984357.png)
  • [技术干货] OPCUA+MQTT构建物联网通用框架
    写在前面:为了应对标准化和跨平台的趋势,更好的推广OPC,OPC基金会在OPCDA成功应用的基础上推出了一个新的OPC标准——OPC UA,OPCUA不再基于分布式组件对象模型(DCOM),而是以面向服务架构(SOA)为基础,因此,在未来的若干年中,OPCUA将逐步取代OPCDA,成为新一代的OPC标准,助力工业4.0。而提起MQTT,或许大家有些陌生。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。具有轻量、简单、开放和易于实现的特点,尤其在IOT领域应用非常广泛。物联网一直都是一个很热门的话题,而数据上云,也是现在工业上很普遍的一个需求。至于如何实现,各个厂家都提供了各种不同的解决方案,无分好坏,最适合的就是最好的。刚看完一篇名为《OPCUA+MQTT=物联网扩展的热门组合》的公众号文章之后,文思泉涌,想着如何将OPCUA与MQTT联合起来,构建一个物联网通用框架,实现数据远传。01PART整体网络架构很多时候,我们的需求是这样的:现场有N台不同的设备或系统,每台设备或者系统的协议是各不相同的,希望可以用一种通用并且简单的方法,将这些数据传到云端,实现远程访问。这样的需求,在上位机中其实是物联网最典型的应用之一,那么采用OPCUA+MQTT或许是个不错的选择,整体的框架设计如下:图表 1 整体网络架构为了实现整体功能,这里的设备层,采用Modbus Slave,基于Modbus TCP协议来做仿真测试,增加5个变量,分为为压力1-压力5,对应地址从40001-40010,数据类型为浮点型,运行Modbus Slave仿真结果如下:图表 2 ModbusTCP服务器02PART服务层至于服务层,主要是OPCUA服务器的开发应用,这里我们有两个选择,一种是采用第三方的OPC软件,比如Kepware、Knight、Matrikon这些公司的产品,这种比较容易,做下相关配置即可,另外一种方式就是自己开发,相对来说难度要大一些。这里我使用自己开发的一款软件——上位机CMS配置一体化软件,通过简单配置,在10秒内,实现了ModbusTCP客户端数据通信,结果如下:图表 3 ModbusTCPClient通信测试然而,这部分,仅仅是实现了ModbusTCP客户端的功能,如果要实现OPCUA服务器的功能,需要激活一下OPCUA服务器,在服务器节点下添加一台OPCUA服务器即可,添加完成后,保存重新运行,结果如下: 图表 4 开启OPCUAServer为了测试OPCUA服务器是否开启成功,需要进行测试,可以使用官方软件UAExpert软件来测试一下:图表 5 OPCUAClient通信测试03PART数据层(1)在实现数据层功能之前,需要创建一个MQTT服务器,这里基于.NET CORE编写了一个MQTT服务器的程序,并在阿里云服务器中部署运行(这里要注意开放端口1883),运行效果如下: 图表 6 MQTT服务器(2)MQTT服务器创建完成之后,重新打开一个CMS配置软件来进行OPCUAClient的功能测试,上一节中的UAExpert是官方的OPCUA客户端软件,仅用于测试使用,这里的使用的CMS配置软件的OPCUAClient是自己开发的客户端程序,经过配置之后,运行结果如下: 图表 7 OPCUAClient(3)在CMS配置人家的服务器节点中,右击添加一个MQTTClient,根据MQTT服务器配置相关IP、用户、密码、主题及更新时间等信息,具体如下:图表 8 MQTT客户端配置(4)配置完成后点击启动按钮,整体运行之后,可以看到MQTT连接成功,并按照设定的周期将最新的数据发布到指定的主题中,效果如下:图表 9 启动MQTT客户端(5)打开MQTT服务器,也可以看到不断地有数据发布过来,这里为了便于观察结果,将压力1的数据仿真成每秒加1,MQTT服务器数据接收如下:图表 10 MQTT服务器数据接收04PART应用层通过以上的相关部署,即可实现整个OPCUA+MQTT的实现,实际应用时,只需要开启一个MQTT客户端,连接指定的MQTT服务器,并订阅相应的主题,即可获取到设备层的实时数据,这里使用一个常用的MQTT客户端软件,即MQTT.fx: 图表 11 MQTT.fx通信测试写在最后:本文旨在结合当下主流的OPCUA统一架构和MQTT通信协议,实现一种数据上云的途径,对于自动化行业的上位机工程师来说,可以拓展大家的思路。未来更多是IT和OT相结合的一种趋势,因此,作为每个工控技术人员,都要时刻保持危机感,不断学习,不断进步,这样才能更好地面对未来工业的快速发展。       原文标题 : OPCUA+MQTT实现数据上云
  • [问题求助] 在线开发MQTT协议的智慧路灯时一直激活不了设备
  • [技术干货] OPCUA+MQTT构建物联网通用框架
    写在前面:为了应对标准化和跨平台的趋势,更好的推广OPC,OPC基金会在OPCDA成功应用的基础上推出了一个新的OPC标准——OPC UA,OPCUA不再基于分布式组件对象模型(DCOM),而是以面向服务架构(SOA)为基础,因此,在未来的若干年中,OPCUA将逐步取代OPCDA,成为新一代的OPC标准,助力工业4.0。而提起MQTT,或许大家有些陌生。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。具有轻量、简单、开放和易于实现的特点,尤其在物联网 IOT领域应用非常广泛。物联网一直都是一个很热门的话题,而数据上云,也是现在工业上很普遍的一个需求。至于如何实现,各个厂家都提供了各种不同的解决方案,无分好坏,最适合的就是最好的。刚看完一篇名为《OPCUA+MQTT=物联网扩展的热门组合》的公众号文章之后,文思泉涌,想着如何将OPCUA与MQTT联合起来,构建一个物联网通用框架,实现数据远传。01PART整体网络架构很多时候,我们的需求是这样的:现场有N台不同的设备或系统,每台设备或者系统的协议是各不相同的,希望可以用一种通用并且简单的方法,将这些数据传到云端,实现远程访问。这样的需求,在上位机中其实是物联网最典型的应用之一,那么采用OPCUA+MQTT或许是个不错的选择,整体的框架设计如下:图表 1 整体网络架构为了实现整体功能,这里的设备层,采用Modbus Slave,基于Modbus TCP协议来做仿真测试,增加5个变量,分为为压力1-压力5,对应地址从40001-40010,数据类型为浮点型,运行Modbus Slave仿真结果如下:图表 2 ModbusTCP服务器02PART服务层至于服务层,主要是OPCUA服务器的开发应用,这里我们有两个选择,一种是采用第三方的OPC软件,比如Kepware、Knight、Matrikon这些公司的产品,这种比较容易,做下相关配置即可,另外一种方式就是自己开发,相对来说难度要大一些。这里我使用自己开发的一款软件——上位机CMS配置一体化软件,通过简单配置,在10秒内,实现了ModbusTCP客户端数据通信,结果如下:图表 3 ModbusTCPClient通信测试然而,这部分,仅仅是实现了ModbusTCP客户端的功能,如果要实现OPCUA服务器的功能,需要激活一下OPCUA服务器,在服务器节点下添加一台OPCUA服务器即可,添加完成后,保存重新运行,结果如下: 图表 4 开启OPCUAServer为了测试OPCUA服务器是否开启成功,需要进行测试,可以使用官方软件UAExpert软件来测试一下:图表 5 OPCUAClient通信测试03PART数据层(1)在实现数据层功能之前,需要创建一个MQTT服务器,这里基于.NET CORE编写了一个MQTT服务器的程序,并在阿里云服务器中部署运行(这里要注意开放端口1883),运行效果如下: 图表 6 MQTT服务器(2)MQTT服务器创建完成之后,重新打开一个CMS配置软件来进行OPCUAClient的功能测试,上一节中的UAExpert是官方的OPCUA客户端软件,仅用于测试使用,这里的使用的CMS配置软件的OPCUAClient是自己开发的客户端程序,经过配置之后,运行结果如下: 图表 7 OPCUAClient(3)在CMS配置人家的服务器节点中,右击添加一个MQTTClient,根据MQTT服务器配置相关IP、用户、密码、主题及更新时间等信息,具体如下:图表 8 MQTT客户端配置(4)配置完成后点击启动按钮,整体运行之后,可以看到MQTT连接成功,并按照设定的周期将最新的数据发布到指定的主题中,效果如下:图表 9 启动MQTT客户端(5)打开MQTT服务器,也可以看到不断地有数据发布过来,这里为了便于观察结果,将压力1的数据仿真成每秒加1,MQTT服务器数据接收如下:图表 10 MQTT服务器数据接收04PART应用层通过以上的相关部署,即可实现整个OPCUA+MQTT的实现,实际应用时,只需要开启一个MQTT客户端,连接指定的MQTT服务器,并订阅相应的主题,即可获取到设备层的实时数据,这里使用一个常用的MQTT客户端软件,即MQTT.fx: 图表 11 MQTT.fx通信测试写在最后:本文旨在结合当下主流的OPCUA统一架构和MQTT通信协议,实现一种数据上云的途径,对于自动化行业的上位机工程师来说,可以拓展大家的思路。未来更多是IT和OT相结合的一种趋势,因此,作为每个工控技术人员,都要时刻保持危机感,不断学习,不断进步,这样才能更好地面对未来工业的快速发展。转载自https://iot.ofweek.com/2022-03/ART-132200-11000-30551999.html
  • [技术干货] BC20-NBIOT模块通过MQTT协议连接华为云服务器调试过程
    当前这篇帖子介绍STM32+BC20连接华为云物联网平台,实现与上位机之间进行数据交互,完成真实的产品开发。 ### 1.1 BC20模块 BC20是一款高性能、低功耗、多频段、支持 GNSS 定位功能的 NB-IoT 无线通信模块。BC20 在设计上兼容移远通信 GSM/GPRS/GNSS 系列的 MC20 模块,方便客户快速、灵活的进行产品设计和升级。BC20 提供丰富的外部接口和协议栈,同时支持中国移动 OneNET 物联网云平台,为客户的应用提供极大的便利。 BC20支持北斗、GPS、QZSS 等多星座卫星系统解调算法,其定位更加精准,抗多路径干扰能力更强,比传统的单GPS 模块具有更多优势。另外,BC20 模块中内置 LNA 和低功耗算法:前者保证更高的灵敏度,后者保证低功耗模式下更低的耗流。 BC20 模块较传统 NB-IoT+GNSS 方案体积减少 40%。凭借其紧凑尺寸、超低功耗和超宽工作温度范围,BC20 在各种应用中占具更大优势;其主要应用领域为:自行车和摩托车防盗、宠物追踪、金融财产追踪及行车记录仪等等。 C20 模块集成了 NB-IoT 和 GNSS(GPS+BeiDou) 双系统,在网络交互的同时, 实现 GNSS 系统的 快速、精准定位, 满足客户低功耗与高定位精度的应用场景。 **相比传统的具有单一 GPS 功能的模块, BC20 的主要优势如下:** a. 内嵌的 GNSS 模块,支持 GPS+BeiDou 双系统定位: 相同环境下可使用的卫星数量更多, 搜星的 b. 时间更短, 可加快定位速度, 提高定位精度; c. NB 和 GNSS 组合的小尺寸模块, 具备优良的环境适应性, 具备低功耗、抗干扰、高精度的特性; d. 内置 Sensor Hub 及领先的 PDR 算法,完美提升定位精度; e. 智能的 AGPS 辅助定位功能,加快冷启动模式下的定位速度 淘宝商店地址: https://m.tb.cn/h.fOCCkgV?sm=5ffdfe?tk=MkB92eHI0ZV ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20223/9/1646813846885977137.png) 模块上有两排接口,一个是GPS信号输出接口,一个是BC20控制接口。 使用USB转TTL模块,将BC20板子与电脑连起来,调试板子是否正常。 ### 1.2 测试模块 第一步接上之后,串口调试助手选择波特率为115200,勾选软件上的发送新行选项。发送`AT`过去,正常模块会返回`OK`。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20223/9/1646813893170107839.png) ### 1.3 上电初始化操作 ```cpp 查询模块是否正常 AT OK 获取卡号,查询卡是否插好 AT+CIMI 460041052911195 OK 激活网络 AT+CGATT=1 OK 获取网络激活状态 AT+CGATT? +CGATT: 1 OK 查询网络质量 AT+CSQ +CSQ: 26,0 OK AT+CEREG=? //检查网络状态 +CEREG: 0,1 //找网成功 OK ``` ### 1.4 开启GPS定位 **官方文档:** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20223/9/1646813924487545819.png) ```cpp 激活GPS,要等一段时间 AT+QGNSSC=1 OK 查询激活状态,1表示成功激活 AT+QGNSSC? +QGNSSC: 1 OK 获取一次GPS定位语句 AT+QGNSSRD="NMEA/RMC" +QGNSSRD: $GNRMC,120715.00,A,3150.78179,N,11711.93433,E,0.000,,310818,,,A,V*19 OK ``` ### 1.5 连接MQTT服务器 下面通过MC20的AT指令连接华为云服务器,上传数据测试。 官方文档: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20223/9/1646813956364180141.png) ```cpp 连接MQTT服务器 AT+QMTOPEN=0,"a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com",1883 OK +QMTOPEN: 0,0 登录MQTT服务器 命令格式: AT+QMTCONN=,,, AT+QMTCONN=0,"6210e8acde9933029be8facf_dev1_0_0_2022021913","6210e8acde9933029be8facf_dev1","6cea55404b463e666cd7a6060daba745bbaa17fe7078dfef45f8151cdf19673d" OK +QMTCONN: 0,0,0 订阅主题 命令格式: AT+QMTSUB=,,"”,[,"”,…] AT+QMTSUB=0,1,"$oc/devices/6210e8acde9933029be8facf_dev1/sys/messages/down",2 OK +QMTSUB: 0,1,0,2 发布主题 命令格式:AT+QMTPUB=,,,,"","" 先发送指令: AT+QMTPUB=0,0,0,0,"$oc/devices/6210e8acde9933029be8facf_dev1/sys/properties/repor" 等待返回 ">" 接着发送数据.不需要加回车。 "{"services": [{"service_id": "gps","properties":{"longitude":12.345,"latitude":33.345}}]}" 数据发送完毕,再发送结束符。 十六进制的值--0x1a 。某些串口调试助手可以适应ctrl+z 快捷键输入0xA 等待模块返回"OK",到此数据发送完成。 OK +QMTPUB: 0,0,0 ```
  • [问题求助] ESP8266通过AT指令连接华为云平台,用的MQTT
    【功能模块】ESP8266通过AT指令连接华为云平台【操作步骤&问题现象】我已经通过esp8266连接到华为云平台了,可以用华为云平台给esp8266发送指令,但是不知道怎么通过esp8266给平台发送指令,我买的是安信可的esp8266,使用AT指令,板子是arduino
  • [行业资讯] 卫健委修订《综合医院建筑设计规范》透露医疗物联网发展方向,真趣科技引领未来趋势
    当前医疗物联网应用处于蓬勃发展的阶段,各种物联网技术、协议和应用等,给医院的智能化规划提出了新的挑战。2月8日,国家卫生健康委规划司发布《综合医院建筑设计规范》(局部修订征求意见稿)(下称《征求意见稿》),向社会公开征求意见。《征求意见稿》中针对智能化系统提出了多项新增内容。其中,关于医疗物联网系统和信息网络系统提出的新增内容,为医疗物联网的未来发展指引了明确方向。新增内容:宜设置医疗物联网系统,物联网基站应支持多种通讯协议或具备协议扩展功能,物联网应用系统应结合医院的需求设计。条文说明:当前医疗物联网应用处于蓬勃的发展阶段,实现的技术手段和应用平台种类繁多,设计应结合医院的实际管理需求设计适合医院管理水平的物联网应用系统,基础网络应具备扩展性,满足将来增加系统的需求。医疗物联网应用快速发展,通讯协议繁多,各类基站、网关重复建设、反复施工不仅造成了巨大的资源浪费,也给医院后期运维带来了很大负担,从而制约了医院信息化、智能化的进一步发展。《征求意见稿》提出,应结合医院的实际管理需求,设计具有高度融合性、扩展性等物联网基础网络,以满足将来增加系统及应用的需求。经过行业的共同探索,医疗物联网目前已经迈入了一网融合的3.0时代。引领医疗物联网3.0时代的医位通®物联网,将通信、定位、导航一网融合,支持蓝牙、RFID、ZigBee、UWB、钛准®、LoRaWAN、Sub-1G等多种通讯协议,兼容5G、Wi-Fi,且具备协议扩展功能。不仅将市场主流通讯协议一网融合,解决了一网一建的问题,并且通过技术创新,解决了并发受限等问题。新增内容:宜在全院区设置局域网无线AP点。条文说明:目前WIFI、物联网、5G医疗专网等无线网技术发展较快,各种应用也层出不穷,应根据各医院自身的各类移动应用需要,在医院独立部署或融合部署WIFI、物联网、5G医疗专网等不同类型的无线网络。对Wi-Fi网、物联网、5G医疗专网等不同类型无线网络的融合部署要求,结合对物联网的扩展性要求,透露了未来医院网络一体化的发展趋势。医位通®物联网基于顶层设计,结合医院物联网碎片化建设痛点和物联网应用发展需要,创导轻量化部署方式,既提供独立部署物联网方案,也提供内置物联网模组及外接物联网单元等灵活多样化“Wi-Fi+物联网”混合组网方案,支持泛在物联网协议接入,灵活适用于新建医院和存量医院,大大降低施工成本同时,为医院网络一体化发展提供了很好的融合解决方案,满足医院各类应用不断增加的发展需求。目前,医位通®物联网的独立部署方案及混合组网方案均已在全国众多三甲医院落地,包括江西省肿瘤医院、川北医学院附属医院、浙江省台州医院等,持续推进医院加速智慧化建设步伐。
  • [行业资讯] 在物联网应用开发中是否该用MQTT v5.0?
    【51CTO.com快译】于1999年面市的MQTT,最初被用于油气管道与远程卫星之间的通信。目前它作为一种工具,被广泛地用在各种规模的部署中,以连接多种类型的物联网 (IoT)设备。由于是基于TCP/IP的网络协议,因此MQTT采用的是发布方-订阅方(publisher-subscriber)的通信模型。它的轻量级特性足以让其运行在IoT设备上,而其强大的功能又确保了它能够在不稳定的网络条件下工作。MQTT的工作原理MQTT协议是由如下元素构成:• 发布方(Publisher):设备通过主题将消息发送给订阅方。• 主题(Topic):每个资源都有一个唯一的标识符。发布方将消息发送至主题,然后将其传递给订阅方。• 订阅方(Subscriber):作为终端设备,订阅方通过主题从发布方处接收消息。• 代理(Broker):服务器作为中央枢纽,负责发布方和订阅方之间的组织级通信。下图展示了简单的MQTT通信逻辑。如果某个云平台不适合使用MQTT的通信方式来开发系统,则可以改用hbmqtt、gmqtt和paho-mqtt lib。服务质量级别(QoS)是MQTT协议的关键功能,作为消息发送方和接收方之间的约定,它定义了系统传递特定消息的能力。客户端可以选择与其所处网络的可靠性,以及应用程序的逻辑,相匹配的服务级别。由于MQTT能够通过重新传输的机制,来管理并保证消息的传递(即使是底层的传输并不可靠),因此QoS可以让不可靠网络中的通信更加安全。为何在物联网的开发中要用到MQTT?凭借其“节能(energy-efficient)”的数据传输方式,MQTT往往被用在CPU和内存(RAM)功率有限的低功耗设备上,以及如下场景用例中:• 高效的通信。MQTT的低数据量和低能耗特性,使其成为实时的、基于文本的消息传递应用的首选。• 安全性。在家庭安防系统中,MQTT系统的QoS机制可以确保重要消息的成功传递,进而确保危险警告能够发送给居民。• 消息汇总。MQTT使得组织能够有效地,从诸如智能手机或汽车传感器 等多个来源收集数据。• 同步传感器。例如,多个火灾报警探测器可以相互通信,以辨别危险是否真的存在。• 医疗物联网应用。通过多个传感器去监控出院患者的健康参数。• 车联网 。与HTTP不同,MQTT能够在客户端和代理之间保持持久性的会话。该特性对于车联网特别实用。例如,当车辆离开了蜂窝网络的盲区,会话能够重新连接,继续平稳地收发数据,而无需进行复杂的HTTP握手。MQTT的优势• 效率是MQTT的一大亮点,它通过诸如AMQP的竞争协议,让数据的传输更加顺畅。用户可以快速、轻松地实现轻量级的MQTT协议架构。• 发送的数据包越少,网络的使用率就越低。• 其低功耗特性非常适合连接物联网设备。• MQTT可以实现更有效的数据分发。• 该协议可以更轻松地实现遥感(remote sensing)和控制。MQTT的劣势当然,MQTT并非在所有场景中都是理想选择。MQTT协议在客观上存在着如下劣势:• 对于拥有250个以上设备的系统而言,快速传输周期是至关重要的。不过它与CoAP(Constrained Application Protocol)相比,会在传输周期上慢一些。• MQTT可以运行在灵活的主题订阅系统上。而CoAP使用的是稳定的资源发现系统。• MQTT虽然用到了TLS/SSL,可是它缺乏安全加密能力。• 与其他竞品相比,MQTT协议难以创建全局性的可扩展网络。MQTT v5.0的功能概述通过各种新功能,MQTT v5.0可以实现如下目标:• 提高大型系统的性能。MQTT v5.0以一种适当的架构,简化并协调上万台设备之间的通信。• 错误报告。MQTT v5.0协议将返回码重命名为原因码(reason code),以指示更多类型的错误。• 实现常规交互。MQTT v5.0规范化了设备间交互的重复方式,并定义了它们如何响应请求的能力。• 增加了可扩展的机制。MQTT v5.0新的功能包括:添加自定义的属性,指定内容的类型或负载的格式。• 更好的支持。特别是对于希望通过MQTT来提高生产率的小型用户而言,能够从中受益。MQTT v5.0与MQTT 3.1.1的基本功能1.通信功能• 可以通过负载内部的身份验证方法,以及身份验证类数据的属性,来实现增强的身份验证。• 可以使用“会话过期间隔”属性。例如,可以在主题内包括订阅的时间,消息会被存储的时限等。• 可以内置化地限制客户端和服务器端的最大数据包的体积(待传输的字节数)和最大接收量(客户端或服务器同时发送消息的数量)。• 通过“待延迟的间隔”属性,实现对消息的延迟发送。• “服务器参考”或“服务器重定向”属性,可以协助将数据包传输到不同的代理或服务器处。2.发布功能• 消息到期间隔,可用于设置消息的保留期限。• 负载格式标识符和内容类型属性,可被定义为二进制字节、UTF-8或MIME类型。• 支持主题别名。例如,通过将topic/v1/device/赋予别名“1”,可以最大程度地减少所需的数据包的数量。• MQTT协议的“响应主题”,类似HTTP协议的响应请求方案(response-request scheme)。3.订阅功能• 非本地发布,可以让用户选择不接收客户端发布的消息。• 留存消息控制可以控制消息的排序。• 订阅标识符,可用于在订阅中识别服务器。• 共享订阅,可通过其他标志和过滤功能,来实现更灵活的订阅。4.一般特征• 在MQTT v3.1.1中,服务器无法提供有关在建立通信、发布消息、以及订阅主题等不同阶段的问题与错误原因。但是,v5.0可以提供所有ACK消息的原因码。• 与MQTT 3.1不同,在MQTT v5.0中,客户端和服务器端可以彼此传递有关掉线信息的数据包。• 不同的用户属性可以被存储在各种键值中。MQTT v5.0在小型系统部署中的示例下面让我们来看一个带有基于Python的客户端利用MQTT v5.0本地网络的示例。在客观总结其优缺点的同时,我们还会将其与MQTT v3.1.1的网络进行比较。场景简述假设有一栋实现了局域网(LAN)覆盖的建筑物。其中某些房间被安装了三种设备--独立的运动传感器、照相传感器和音频传感器。其主机设备位于LAN之中,并通过无线或网线的方式连接到路由器上。它能够定期从独立的设备上收集或处理数据,并且将这些数据存储在本地数据库中。目前,我们使用SQLLite数据库或更简单的替代方法,仅在收到三种传感器的消息后,才会被激活工作。目标保证主机设备与独立设备之间的通信,并在主机端提供本地数据库的部署和通信。应用要求• 从传感器到主机设备的所有消息,都必须遵从MQTT v5.0附加属性的限制(包括:传输给主题消息的字节数限制等)。• 来自主题的消息必须是MIME类型,以便于在主机端进行快速编码。• 消息必须存储在本地数据库的实例中。设备要求• 独立设备:带有已连接的传感器,而且能够访问本地网络的x86或基于ARM的设备(如,Raspberry Pi)。• 主机设备:具有MQTT代理、且能够处理来自独立设备消息的基于x86或基于ARM的设备。支持MQTT v5.0和Python的代理虽然paho-mqtt是两种常见的代理。但是,由于它们并无内置的MQTT v5.0代理,因此无法实现网络的本地部署。对此,我们采用支持MQTT v5.0的Mosquitto作为代理。其配套的文档链接为--https://mosquitto.org/。它能够代理大约200到300个设备,且一次性仅支持一个连接。基于Python的系统如何与MQTT v5.0一起使用在Python开发人员看来,MQTT v5.0协议里的库和文档并不多。其唯一的Python 客户端便是上面提到的gmqtt和paho-mqtt。MQTT v5.0本地网络的优缺点优点• 无需诸如GCP(Google Cloud Platform)或AWS之类的云服务提供商,也不需要用于本地IoT系统的WAN连接,便可实现LAN内自主设备的全面交互。• 网络延迟和数据传输速度。传输速度仅取决于本地设备的硬件功能。在LAN环境中,通过放置设备可以最大程度地减少延迟。• 与竞品相比,MQTT的能效更高。• 网络安全性高。由于本地网络不会暴露到WAN中,因此带有消息的数据包不会被本地网络之外实体捕获或跟踪到。同时,MQTT v5.0协议提供了服务器与客户端之间的相互身份验证。此外,MQTT还可以使用TLS证书的安全连接和数据传输。• 可以将数据包的各种限制,作用于网络内的代理上。• 其容器化特征更易于模拟和调试。缺点• 用于处理消息的线程应当实现并行管理,以确保设备的正常运行。• 开发人员必须定期进行调试和排障,并且必须使用安全的SSH,来保护主机和独立设备之间的WAN连接。• MQTT协议不支持流式传输。• 由于无法实现大型的文件传输,因此需要专用的bucket上传或HTTP协议。• 代理无法智能地管理数据。当然,在断开连接期间,数据可以被存储一段时间。MQTT v5.0较v3.1.1的改进之处• 存储附加数据的属性• 载荷格式的指示符类型包括:字节、UTF-8或UTF-8字符串对• 请求/响应模式• 客户端连接和断开的原因码• 会话到期与控制MQTT v5.0可以简化数据负载的处理和解析,具有对消息、连接和会话进行单独且精确控制的能力。而且,它能够通过属性来传输附加数据,开发者可以据此创建更为复杂的IoT解决方案。MQTT v5.0的挑战• 在生产环境中,开发者需要管理那些用于在独立设备上,并行发布和侦听消息的进程与线程。• 在paho-mqtt之类的代码包中,各种类的实现过程并不清晰,而且可参考的文档十分有限。• 由于文档匮乏,因此开发者很难安装代理,并将其升级到MQTT v5.0。• 为了识别网络中的设备,我们需要将IP发现器添加到系统中。到底是否该选用MQTT v5.0?总的说来,如果您拥有在设备与主机之间进行消息通信的托管式代理设备,而且物联网的规模不大,那么将MQTT v5.0用于本地IoT设备间的通信则为首选。原文标题:MQTT 5 vs. MQTT v3.1.1 for IoT App Development,作者:Daniil Liadov【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】
  • [技术干货] 物联网通信协议汇总
    物联网曾被认为是继计算机、互联网之后,信息技术行业的第三次浪潮。随着基础通讯设施的不断完善,尤其是 5G 的出现,进一步降低了万物互联的门槛和成本。物联网本身也是 AI 和区块链应用很好的落地场景之一,各大云服务商也在纷纷上架物联网平台和服务。物联网通讯是物联网的一个核心内容,目前物联网的通讯协议并没有一个统一的标准,比较常见的有MQTT、CoAP、DDS、XMPP 等,在这其中,MQTT(消息队列遥测传输协议)应该是应用最广泛的标准之一。目前,MQTT 已逐渐成为 IoT 领域最热门的协议,也是国内外各大物联网平台最主流的传输协议,阿里云 IoT 物联网平台很多设备都是通过 MQTT 接入。1、MQTT 简介《MQTT 协议规范中文版》一书中对 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)进行了描述:MQTT 是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、 简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT)。----MQTT 协议中文版与 HTTP 协议一样,MQTT 协议也是应用层协议,工作在 TCP/IP 四层模型中的最上层(应用层),构建于 TCP/IP协议上。MQTT 最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。如今,MQTT 成为了最受欢迎的物联网协议,已广泛应用于车联网、智能家居、即时聊天应用和工业互联网等领域。目前通过 MQTT 协议连接的设备已经过亿,这些都得益于 MQTT 协议为设备提供了稳定、可靠、易用的通信基础。2、MQTT 的主要特性MQTT 协议是为工作在低带宽、不可靠网络的远程传感器和控制设备之间的通讯而设计的协议,它具 有以下主要的几项特性:①、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。②、基于 TCP/IP 提供网络连接。主流的 MQTT 是基于 TCP 连接进行数据推送的,但是同样也有基于 UDP 的版本,叫做 MQTT-SN。③、支持 QoS 服务质量等级。根据消息的重要性不同设置不同的服务质量等级。④、小型传输,开销很小,协议交换最小化,以降低网络流量。这就是为什么在介绍里说它非常适合"在物联网领域,传感器与服务器的通信,信息的收集",要知道嵌入式设备的运算能力和带宽都相对薄弱,使用这种协议来传递消息再适合不过了,在手机移动应用方面,MQTT 是一种不错的 Android 消息推送方案。⑤、使用 will 遗嘱机制来通知客户端异常断线。⑥、基于主题发布/订阅消息,对负载内容屏蔽的消息传输。⑦、支持心跳机制。3、MQTT 历史MQTT 协议最初版本是在 1999 年建立的,该协议的发明人是的 Andy Stanford-Clark 和 Arlen Nipper。MQTT 最初是用于石油管道的传感器与卫星之间数据传输。他们当时正在开发一个利用卫星通讯监控 输油管道的项目,为了实现这个项目要求,他们需要开发一种用于嵌入式设备的通讯协议,这种通讯协议必须满足以下条件:⚫ 易于实现,服务器必须要实现成千上万个客户端的接入⚫ 数据传输的服务质量可控,根据数据的重要性和特性,设置不同等级的服务质量⚫ 占用带宽小,单次数据量小,但不能出错⚫ 必须能够适应高延迟、掉线、断网等网络通信不可靠的风险⚫ 设备连接状态可知,云端与设备端保持长连接通过以上几个条件可知:⚫ MQTT 服务器可以连接大量的远程传感器和控制设备,与远程客户端保持长连接,具有一定的实 时性。⚫ 云端向设备端发送消息,设备端可以在最短的时间内接收到并作出回应。⚫ MQTT 更适合需要实时控制的场合,尤其适合执行器。⚫ 云端与客户端需要保持长连接,要能够获取到设备的连接状态,就需要时不时地发送心跳包,这就不会省电,所以,MQTT 并不适合低功耗场合。可以看出,MQTT 从诞生之初就是专为低带宽、高延迟或不可靠的网络而设计的。虽然历经几十年的更新和变化,以上这些特点仍然是 MQTT 协议的核心特点。但是与最初不同的是,MQTT 协议已经从嵌入式系统应用拓展到开放的物联网(IoT)领域。4、MQTT 版本目前 MQTT 主流版本有两个,分别是 MQTT3.1.1 和 MQTT5。MQTT3.1.1 是在 2014 年 10 月发布的,而 MQTT5 是在 2019 年 3 月发布的。虽然 MQTT3.1.1 与 MQTT5 在时间相差了将近五年,但是 MQTT3.1.1作为一个经典的版本,目前仍然是主流版本,能够满足大部分实际需求。MQTT5 是在 MQTT3.1.1 的基础上进行了升级,因此 MQTT5 是完全兼容 MQTT3.1.1 的。而 MQTT5 是 在 MQTT3.1.1 的基础上添加了更多的功能、补充完善 MQTT 协议。5、MQTT 协议MQTT 是一种基于客户端-服务端架构(C/S)的消息传输协议,所以在 MQTT 协议通信中,有两个最为重要的角色,它们便是服务端和客户端。1)服务端MQTT 服务端通常是一台服务器(broker),它是 MQTT 信息传输的枢纽,负责将 MQTT 客户端发送来的信息传递给 MQTT 客户端;MQTT 服务端还负责管理 MQTT 客户端,以确保客户端之间的通讯顺畅,保证 MQTT 信息得以正确接收和准确投递。2)客户端MQTT 客户端可以向服务端发布信息,也可以从服务端收取信息;我们把客户端发送信息的行为称为 “发布”信息。而客户端要想从服务端收取信息,则首先要向服务端“订阅”信息。“订阅”信息这一操作 很像我们在使用微信时“关注”了某个公众号,当公众号的作者发布新的文章时,微信官方会向关注了该公众号的所有用户发送信息,告诉他们有新文章更新了,以便用户查看。3)MQTT 主题上面我们讲到了,客户端想要从服务器获取信息,首先需要订阅信息,那客户端如何订阅信息呢?这里我们要引入“主题(Topic)”的概念,“主题”在 MQTT 通信中是一个非常重要的概念,客户端发布信息以及订阅信息都是围绕“主题”来进行的,并且 MQTT 服务端在管理 MQTT 信息时,也是使用“主题”来控制的。客户端发布消息时需要为消息指定一个“主题”,表示将消息发布到该主题;而对于订阅消息的客户端 来说,可通过订阅“主题”来订阅消息,这样当其它客户端或自己(当前客户端)向该主题发布消息时,MQTT 服务端就会将该主题的信息发送给该主题的订阅者(客户端)。服务端如何通过“主题”来控制客户端之间的信息通讯,看下图实例:在以上图示中一共有三个 MQTT 客户端,它们分别是开发板、手机和电脑。MQTT 服务端在管理 MQTT通信时使用了“主题”来对信息进行管理。比如上图所示,假设我们需要利用手机和电脑获取开发板在运行过程中 SoC 芯片的温度,那么首先电脑和手机这两个客户端需要向 MQTT 服务器订阅主题“芯片温度”;接下来,当开发板客户端向服务端的“芯片温度”主题发布信息(假设信息的内容就是当前的温度值)后,服务端就会首先检查都有哪些客户端订阅了“芯片温度”这一主题的信息,而当它发现订阅了该主题的客户端有一个手机和一个电脑,于是服务端就会将刚刚收到的“芯片温度”信息转发给订阅了该主题的手机和电脑客户端。通过以上的这种实例,手机和电脑便可以获取到开发板运行时 SoC 芯片的温度值。以上实例中,开发板是“芯片温度”主题的发布者,而手机和电脑则是该主题的订阅者。值得注意的是,MQTT 客户端在通信时,角色往往不是单一的,一个客户端既可以作为信息发布者也 可以同时作为信息订阅者。如下图所示:上图中的所有客户端都是围绕“LED 控制”这一主题进行通信。此时,对于“LED 控制”这一主题来 说,手机和电脑客户端成为了 MQTT 信息的发布者而开发板则成为了 MQTT 信息的订阅者(接收者)。所以由此可知,针对不同的主题,MQTT 客户端可以切换自己的角色,它们可能对主题 A 来说是信息发布者,但是对于主题 B 就成了信息订阅者,所以一个 MQTT 客户端它的角色并不是固定的,所以大家一定要理解“主题”这个概念。4)MQTT 发布/订阅特性从以上实例我们可以看到,MQTT 通信的核心枢纽是 MQTT 服务端,它负责将 MQTT 客户端发送来的信息传递给 MQTT 客户端,还负责管理 MQTT 客户端,以确保客户端之间的通讯顺畅,保证 MQTT 信息得以正确接收和准确投递。正是因为有了服务端对 MQTT 信息的接收、储存、处理和发送,客户端在发布和订阅信息时,可以相 互独立、且在空间上可以分离、时间上可以异步,这就是 MQTT 发布/订阅的特性:客户端相互独立、空间上可分离、时间上可异步,具体介绍如下:⚫ 客户端相互独立:MQTT 客户端是一个个独立的个体,它们无需了解彼此的存在,依然可以实现信息交流。⚫ 空间上分离:空间上分离相对容易理解,MQTT 客户端以及 MQTT 服务端它们在通信时是处于同一个通信网络中的,这个网络可以是互联网或者局域网;只要客户端联网,无论他们远在天边还是近在眼前,都可以实现彼此间的通讯交流;其实网络通信本就是如此,所以并不是 MQTT 通信所特有的。⚫ 时间上可异步:MQTT 客户端在发送和接收信息时无需同步。这一特点对物联网设备尤为重要,前面我们也介绍了,MQTT 从诞生之初就是专为低带宽、高延迟或不可靠的网络而设计的,高延迟和不可靠网络必然就会导致时间上的异步;物联网设备在运行过程中发生意外掉线是非常正常的情况。6、总结向大家介绍了 MQTT 通信的基本原理,在 MQTT 通信中,1 个服务端、多个客户端之间围绕“主题”进行了通信,所以重要在于大家需要理解各个客户端的相互关系以及服务端在其中所起的作用,并且理解“主题”这个概念以及 MQTT 发布/订阅模式的特性,后面向大家介绍具体的通信过程时,要迅速的反应过来。注意:对于 MQTT 发布/订阅模式的特性,我们总结的几个特点中都有一个“可”字。这 个“可”字意味着客户端彼此之间可以独立,空间可以分离,时间可以异步。在我们实际应用中,客户端之间的关系既可以独立也可以相互依存。在空间上,既可以相距甚远,也可以彼此相邻。在时间上,既可以异步也可以同步。这个“可”字所体现的是 MQTT 通讯的灵活性。————————————————原文链接:https://blog.csdn.net/yangxueyangxue/article/details/122654426
  • [技术干货] 在docker上安装、运行mqtt服务器以及nodered
    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 # 1.配置docker CE 这里我们使用阿里云的镜像。虽然我们使用的是华为云ESC服务器,但仍然适用哦~~ 分别执行以下步骤(使用的是ubuntu服务器,Centos的可以去查看阿里云容器镜像): ``` # step 1:更新 sudo apt-get update # step 2: 安装必要的系统工具 sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common # step 3: 安装GPG证书 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - # step 4: 写入软件源信息 sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" # step 5: 更新 sudo apt-get -y update # step 6:安装Docker-CE sudo apt-get -y install docker-ce ``` 成功安装后,输入docker -v可查看docker版本。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202202/06/112004ujxiouq5wvamtgic.png) # 2.获取镜像 **获取emq镜像** 更多信息请查看EMQx官网:emqx.com ``` docker pull emqx/emqx-ee ``` **获取nodered镜像** - nodered的1.0系列在docker hub上已经改名为nodered/node-red. - nodered的0.20.x在docker hub上仍然叫nodered/node-red-docker. ``` docker pull nodered/node-red ``` # 3.查看镜像 输入命令 ``` docker images ``` 如下图 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202202/06/112447e6h8ctulasiyip6o.png) # 4.运行 - 运行EMQ ``` docker run emqx ``` 停止 ``` docker stop emqx ``` - 运行nodered ``` docker run -it -p 1880:1880 --name nodered nodered/node-red ``` 此命令开启nodered运行后,会一直占用终端,可以使用ctrl + p +q,将进程转到后台运行,日志不会打印在终端上 查看当前docker进程 ps:ip:18083打开emq web页面,默认账号:admin 密码:public;ip:1880打开nodered web页面
总条数:174 到第
上滑加载中