本文以实现串口mqtt服务器为项目目标,展开讲解,介绍如何通过esda工具和mpc-zc1平台,进行应用开发,逐步完成项目需求。
简介
工业串口服务器,以提供串口与网络服务器之间的 双向数据透明传输 为核心业务。在不用修改原有产品系统的情况下,为串口设备提供了便捷的联网通道,即扩展了物联网功能,又保障了原有系统的稳定性。
串口端主要为 rs-232、485、422 等接口,网络端通常为 tcp、udp、mqtt、http 等协议服务器。
本文以实现 串口mqtt服务器 为项目目标,展开讲解,介绍如何通过 esda 工具和 mpc-zc1 平台,进行应用开发,逐步完成项目需求。
前期准备
可通过 esda mpc-zc1 入门篇相关文章,掌握 esda 基本开发流程:
esda mpc-zc1 入门(一)—— 软件安装esda mpc-zc1 入门(二)—— led 控制一、项目需求
项目开发前,先对项目需求进行梳理和拆解,主要有以下几点:
支持串口通信;
支持mqtt通信;
串口与mqtt服务器实现数据透传;
支持串口和mqtt服务器控制 led 显示。
* 本文仅以 led 作为扩展业务,可根据实际需求进行扩展。
二、业务框图
根据项目需求,大致将系统划分为以下几大模块:
1. 串口通信
实现串口的数据收发功能;
实现串口基本参数配置功能(波特率、奇偶校验位、数据位)。
2. mqtt通信
实现mqtt客户端功能;配置目标服务器地址、端口;发布和订阅指定主题。3. 数据解析
解析数据流中的控制命令
4. 数据分发
将解析出来的数据分发到其他模块
业务开发
可通过 esda mpc-zc1 入门篇相关文章,掌握 esda 基本开发流程:
一、串口通信
实现串口通信模块,需要使用到串口相关的 awflow 节点,包括 serial_ex、serial_in_ex、serial_out_ex 3个节点。1. 节点介绍1.1 serial_ex串口配置节点,属于隐式节点,不会被显示在画布中,需要配套对应的功能节点一起使用。1.1.1 属性
名称(name): 节点名称,用于索引查找本节点;显示名称(displayname): 用于画布上显示的名称;端口(port): 用于索引串口设备;波特率(baudrate): 串口波特率参数;字节大小(bytesize): 数据位参数;奇偶校验(parity): 串口奇偶校验位参数;停止位(stopbits): 串口停止位参数;流控(flowcontrol): 串口流控模式配置;帧超时(frame_timeout): 收到数据后的总体等待时间;帧长度(frame_length): 期望收据的数据长度;码间超时(intersymbol_timeout): 字节间的最大超时时间。其中 帧超时、帧长度、码间超时 可用于分包应用,3个参数可同时使用,任意一个条件满足都会触发分包。
* 配置节点(config类型)只存在节点属性,不具备输入输出功能。
1.2 serial_in_ex
串口接收节点,负责读取指定串口接收到的数据。1.2.1 属性
名称(name): 节点名称,用于索引查找本节点;
显示名称(displayname): 用于画布上显示的名称;
配置节点名称(config): 绑定一个串口配置节点;1.2.2 输入* pump类型节点通常不具备数据输入。1.2.3 输出
payload: 读取到串口接收的数据,字符串(可按二进制提取);
payloadlength: 数据长度,uint32_t 类型;
payloadtype: payload 的数据类型,用于后续节点数据处理;
istream: 数据流对象,保存着串口接收的原始数据流;
*当帧超时、帧长度、码间超时 其中任意参数有效时,输出payload 格式,否则输出 istream。
1.3 serial_out_ex
串口发送节点,将上级节点输出的数据发送至串口发送接口。
1.3.1 属性
名称(name): 节点名称,用于索引查找本节点;
显示名称(displayname): 用于画布上显示的名称;
配置节点名称(config): 绑定一个串口配置节点。
1.3.2 输入
payload: 负载数据,字符串类型(也可按二进制转换);
payloadlength: 负载数据长度,uint32_t类型;
payloadtype: 指示payload的数据类型;
istream: 数据流对象。
* 支持输入 payload 和 istream 数据,优先使用 istream。
1.3.3 输出
* sink类型节点通常不具备数据输出。
2. 回发验证我们通过一个串口数据回发功能来验证串口通信模块。
2.1 添加节点
添加 serial_in_ex 和 serial_out_ex 节点到画布上。
2.2 配置节点
双击 serial_in_ex 节点,打开属性面板。
选择 “添加新的 serial_ex 节点” ,点击编辑配置,进入配置节点属性面板。
串口设备:uart1;
波特率:115200;
字节大小:8bits;
奇偶校验:none
停止位:1bits;
流控:none;
帧超时:100;
帧长度:0;
码间超时:0。
点击添加,完成配置。
可以看到已经创建了一个新的配置节点,名为 serial_ex,继续点击完成,结束接收节点的配置。
同样的,双击 serial_out_ex 节点,打开属性面板,直接选择刚刚创建的配置节点。
点击完成,保存配置。
2.3 绘制流图
将 serial_in_ex 与 serial_out_ex 节点进行连接。
2.4 下载验证
确保硬件正确连接。
选择流图下载接口。
点击下载。
完成流图下载,通过串口工具进行数据回发测试。
二、mqtt通信实现 mqtt 通信模块,需要使用到相关的awflow节点,包括 mqtt_config、mqtt_in、mqtt_out 3个节点。
1. 节点介绍1.1 mqtt_config
mqtt 配置节点,属于隐式节点,不会被显示在画布中,需要配套对应的功能节点一起使用。
1.1.1 属性
名称(name): 节点名称,用于索引查找本节点;
显示名称(displayname: 用于画布上显示的名称;
主机地址(host): 目标服务器域名(ip地址);
端口(port): 目标服务器网络端口;
重连间隔(retry-interval):mqtt后台服务重连时间间隔,单位毫秒;
客户端id(client-id):mqtt客户端id;
用户名(user-name):mqtt客户端用户名;
密码(password):mqtt客户端密码;
保活包发送间隔(keep-alive-interval): 保活数据包发送周期,单位秒;
清除会话(clean-session): 使能自动清除历史会话;
上线主题服务质量等级(online-topic-qos): 上线qos服务质量;
上线主题(online-topic-topic): 上线主题;
上线主题数据(online-topic-data): 上线主题数据;
遗嘱主题服务质量等级(last-will-qos): 遗嘱qos服务质量;
遗嘱主题(last-will-topic): 遗嘱主题;
遗嘱主题数据(last-will-data): 遗嘱主题数据;
使能ssl(enable-ssl): 使能ssl加密功能;
根证书路径(root-ca-ssl): 根证书文件全路径;
客户端证书路径(client-certificate-path): 客户端证书文件全路径;
客户端密钥路径(client-private-key-path): 客户端密钥文件全路径。
mqtt 配置属性项比较多,但好在节点中已经内置了常用的默认配置,用户仅需根据应用修改所需属性项即可。
* 配置节点(config类型)只存在节点属性,不具备输入输出功能。
1.2 mqtt_in
mqtt 订阅节点,提供订阅指定主题的功能。
1.2.1 属性
名称(name): 节点名称,用于索引查找本节点;显示名称(displayname): 用于画布上显示的名称;主题(topic): 配置需要订阅的主题;消息质量(qos):qos主题服务质量等级;配置(config): 绑定一个mqtt配置节点。1.2.2 输入
pump类型节点通常不具备数据输入。
1.2.3 输出
topic: 主题标识,字符串类型;payload: 负载数据,指针(pointer)类型;payloadlength: 负载数据长度,uint32_t类型。1.3 mqtt_out
mqtt 发布节点,向服务器发布指定主题数据。
1.3.1 属性
名称(name): 节点名称,用于索引查找本节点;
显示名称(displayname): 用于画布上显示的名称;
消息质量(qos):qos主题服务质量等级;
保留标志(retain): 使能主题信息在服务器保留;
主题(topic): 发布的主题;
配置(config): 绑定一个mqtt配置节点。
1.3.2 输入
topic: 发布主题名称;payload: 负载数据;payloadlength: 负载数据长度,uint32_t类型;1.3.3 输出
* sink类型节点通常不具备数据输出。2. 回发验证我们通过一个mqtt数据回发功能来验证mqtt通信模块。2.1 添加节点添加 mqtt_in 和 mqtt_out 节点到画布上。
2.2 配置节点
双击 mqtt_in_ex 节点,打开属性面板。
选择 “添加新的 mqtt 节点” ,点击编辑配置,进入配置节点属性面板。
该节点已经内置好大部分常用的配置信息,此处,我们仅修改3个必须的属性项:
主机地址:broker.emqx.io;
端口号:1883;
重连间隔:1000。
点击添加,完成配置。
可以看到已经创建了一个新的配置节点,名为 mqtt,同时我们配置一个订阅主题 esda-mqtt-down ,继续点击完成,结束接收节点的配置。
同样的,双击 mqtt_out 节点,打开属性面板,直接选择刚刚创建的配置节点,同时配置一个发布主题 esda-mqtt-up 。
点击完成,保存配置。
2.3 绘制流图
将 mqtt_in 与 mqtt_out 节点进行连接。
2.4 下载验证
确保硬件正确连接,需要4g天线,以及一张可正常联网的sim卡。
选择流图下载接口。
点击下载。
完成流图下载后,可通过mqtt客户端工具进行数据回发测试。
此处我们选择 mqttx,下载链接
https://www.emqx.com/zh/downloads/mqttx/1.8.2/mqttx-setup-1.8.2-x64.exe
下载结束并完成mqttx客户端的安装,启动mqttx客户端软件。
点击新建连接,创建mqtt连接,如下进行配置。
点击连接,完成客户端配置,进入连接后,添加订阅主题。
订阅 mpc-zc1 发布的主题 esda-mqtt-up 。
最后发布 mpc-zc1 订阅的主题 esda-mqtt-down 。
输入发布的内容 esda mqtt test message!,点击发布主题,随后可以收到 mpc-zc1 回发同样的内容。
三、串口mqtt透传
前面我们已经完成串口通信、mqtt通信功能,并进行数据回发测试,接下来我们要完成本项目的核心功能,串口与mqtt服务器之间的数据透明传输。
从前面两次数据回发的流图中,我们很容易想象到如下图所示的方式进行流图变换。
没错,只需将2条回发的数据流进行交换连接,即可达到2个通信接口的数据透明传输。为了流图简洁性,我们进行节点的位置调整,如下所示。
下载流图,进行透传测试,效果如下图。
至此,我们完成串口服务器的核心功能,数据透明传输。后续我们会继续围绕串口服务器项目,进行业务的扩展,增加透传命令来控制设备上的led。
【版权声明】本文为zlg开发者社区用户原创内容,未经授权不得转载。欢迎更多用户到社区交流互动、创作博文,一经采用,可获得百元京东e卡。
理解函数指针、函数指针数组、函数指针数组的指针
基础知识对于程序员到底重不重要
新零售面临的三个物联网陷阱和如何预防
对于3C锂电池的性能测试可选用大电流弹片微针模组
全网最通俗易懂SPWM入门教程
EsDA MPC-ZC1 应用——串口服务器(一)
万用表的使用方法步骤 万用表的hFE功能怎么用
AI芯片首战瞄准安防行业 新品接踵面世
多路复用LCD与Zilog的Z8 Encore微控制器的编程
亚光电子拟成立合资公司 主要面向在微波射频芯片领域
制冷系统部件构成有哪些类型 制冷系统部件检查内容有哪些
互联网大会有哪些“黑科技”?
第三届中国半导体联盟理事会在2019集微半导体峰会上同期举行
大普微宣布量产搭载Marvell Bravera™ SC5主控企业级PCIe 5.0 SSD
分线报警主机室内探测器应用
电子消毒柜臭氧发生器电子电路图
RFID技术的发展可以为企业带来什么
NDON图像传感器插座怎么样
几款不错的场效应管功放电路图
工业互联网平台整合数据与应用,5G智慧钢铁十大应用场景