实现的功能

该模块上电后主动以mobusRTU协议,通过本模块的串口将气体检测仪的4路传感器数据读取

模块上电后连接指定WiFi,通过MQTT协议将读取到的数据以JSON格式推送到指定服务器。

具体细分为如下几个小过程:

  1. 模块上电后主动连接到指定WiFi
  2. 模块连接到指MQTT服务器
  3. 模块通过modbusRTU协议主动读取设备数据
  4. 模块主动将读取到的数据推送到mqtt服务器

配置环境

  1. PC系统(Windows 10 专业版 21H1)
  2. WIFI AP(使用手机共享2.4G热点)
  3. USB转485通讯模块

配置软件

  1. Advanced_IP_Scanner
  2. IOTServiceSetupX64_3.0.03
  3. modbusPLC Simulator
  4. mosquitto-2.0.11

Advanced_IP_Scanner

局域网设备扫描软件,在该处用于获取局域网内HF2211S从AP中获取到的IP地址。

IOTServiceSetupX64_3.0.03

用于发现并配置HF2211S

modbusPLC Simulator

用于模拟气体探测仪,可以查看从模块发来的报文,便于调试modbusRTU主站。

mosquitto-2.0.11

MQTT服务端软件,HF2211S将485口读取到的数据不做解析,转发到MQTT服务器。

配置截图

安装前文中提到的配置软件

电脑连接模块自带的WiFi

打开配置软件,会自动显示搜索到的局域网内的模块,点击设备编辑,进入设备配置界面

主要设置如下参数

  1. WIFI模式 STA

​ STA无线名称、密码

  1. 连接协议相关信息

​ 协议:MQTT、订阅主题、发布主题、服务器端地址、端口号

  1. 串口信息

​ 波特率、数据位、停止位、校验位

基本参数设置设置完成后,点击高级设置,再点击编辑脚本,导入串口脚本,实现模块主动读取设备数据及数据上送功能。

将如下脚本存储为txt文件,并导入脚本

key=""

cmd01=[0x05,0x03,0x01,0x33,0x00,0x37,0xF4,0x6B]
cmd02=[0x05,0x03,0x02,0x33,0x00,0x37,0xF4,0x2F]
cmd03=[0x05,0x03,0x03,0x33,0x00,0x37,0xF5,0xD3]
cmd04=[0x05,0x03,0x04,0x33,0x00,0x37,0xF4,0xA7] num=0 TIMER HeartBeat 500
num=num+1
IF(num==1)
SEND(UART,uart0,cmd01)
key="CH1"
END
IF(num==2)
SEND(UART,uart0,cmd02)
key="CH2"
END
IF(num==3)
SEND(UART,uart0,cmd03)
key="CH3"
END
IF(num==4)
SEND(UART,uart0,cmd04)
key="CH4"
num=0
END
END RECV UART uart0
DATA=INPUT
DATA_S=DATA.hexString()
DATA_B="{\"key\":\""+key+"\",\"value\":\""+DATA_S+"\"}"
SEND(SOCK,netp,DATA_B)
END

上述代码部分说明

cmd01=[0x05,0x03,0x01,0x33,0x00,0x37,0xF4,0x6B]  //需要通过发送的命令1
ER HeartBeat 500 //500毫秒执行一次命令

设备状态查看

串口报文捕获

05 03 01 33 00 37 F46B
05036E000003E800000000000000000000000000000000000000000000000000004248000043480000000000000000000000000000AC5C00170000000000000000000000000000000000000000B08800170000000038DD0028FFFF4398000000000000000000000000000000000006000120B7 05 03 02 33 00 37 F42F
05036E0000001E00000000000000000000000000000000000000000000000000004190000041B80000000000000000000000000000E5A20008333341A7000000000000000000000000000200009C75000000000000E84B0008333341A7000000000000000000000000000000000006000184D1 05 03 03 33 00 37 F5D3
05036E00000064000000000000000000000000000000000000000000000000FFFF419F0000424800000000000000000000000000008D8300170000000000000000000000000000000000020000899E001700000000F18300350000424800000000000000000000000000000000000600016049 05 03 04 33 00 37 F4A7
05036E000003E800000000000000000000000000000000000000000000000000004248000043480000000000000000000000000000AC3600170000000000000000000000000000000000000000B08800170000000038DD0028FFFF4398000000000000000000000000000000000006000100C1

MQTT报文捕获

{"key":"CH1","value":"05036E000003E800000000000000000000000000000000000000000000000000004248000043480000000000000000000000000000AC5C00170000000000000000000000000000000000000000B08800170000000038DD0028FFFF4398000000000000000000000000000000000006000120B7"}

{"key":"CH2","value":"05036E0000001E00000000000000000000000000000000000000000000000000004190000041B80000000000000000000000000000E5A20008333341A7000000000000000000000000000200009C75000000000000E84B0008333341A7000000000000000000000000000000000006000184D1"}

{"key":"CH3","value":"05036E00000064000000000000000000000000000000000000000000000000FFFF419F0000424800000000000000000000000000008D8300170000000000000000000000000000000000020000899E001700000000F18300350000424800000000000000000000000000000000000600016049"}

{"key":"CH4","value":"05036E000003E800000000000000000000000000000000000000000000000000004248000043480000000000000000000000000000AC3600170000000000000000000000000000000000000000B08800170000000038DD0028FFFF4398000000000000000000000000000000000006000100C1"}

附:气体检测仪地址表

{"key":"CH2","value":"05036E 0000001E00000000000000000000000000000000000000000000000000004190000041B80000000000000000000000000000E5A20008333341A7000000000000000000000000000200009C75000000000000E84B0008333341A70000000000000000000000000000000000060001 84D1"}

MQTT报文中,value值中,头部 3个字节 05036E 尾部2个字节CRC校验 84D1去除,中间部分为对应通道的数据。

MQTT报文中,第二通道氧气实时浓度对应的报文为 3333 41A7,对应浮点数: 20.899999618530273

通讯 Modbus RTU 9600 n 8 1 5
Point VirRegAddr ASDU
可燃气体(通道1) 1
量程 40308 2个字节,Byte0:量程高位Byte1:量程低位
低报警点(float) 40319 float
A1报警点(float) 40321 float
A2报警点(float) 40323 float
实时浓度(float) 40334 float
报警状态 40336 2个字节 Byte0:0x00
Byte0: 0x00 正常
0x01 断线
0x02 超量程
0x03 A2
0x04 A1
存储模式 40361 2个字节, Byte0:保留0x00;
Byte1=0x00;关闭
Byte1=0x01 自动
Byte1=0x02 手动
Byte1=0x03 单点
存储周期 40362 2个字节,Byte0:高位 Byte1:低位
氧气(通道2) 2
量程 40564 50302
低报警点(float) 40575 float
A1报警点(float) 40577 float
A2报警点(float) 40579 float
实时浓度(float) 40590 float
报警状态 40592
存储模式 40617
存储周期 40618
硫化氢(通道3) 3
量程 40820 50303
低报警点(float) 40831 float
A1报警点(float) 40833 float
A2报警点(float) 40835 float
实时浓度(float) 40846 float
报警状态 40848
存储模式 40873
存储周期 40874
一氧化碳(通道4) 4
量程 41076 50304
低报警点(float) 41087 float
A1报警点(float) 41089 float
A2报警点(float) 41091 float
实时浓度(float) 41102 float
报警状态 41104
存储模式 41129
存储周期 41130
实时时间(年分) 40023 2个字节, Byte0:年份高位 Byte1:年份低位
实时时间(月,日) 40024 2个字节, Byte0:月 Byte1:日
实时时间(时,分) 40025 2个字节, Byte0:时 Byte1:分
实时时间(秒) 40026 2个字节, Byte0: 0x00 Byte1: 秒
仪器地址 40027 2个字节 Byte0:保留0x00 Byte1:仪器地址
仪器报警开关 40029 2个字节 Byte0:声音报警开关(0x0关,0x01开)Byte1: 光电报警开关(0x00关,0x01开)
恢复出厂设置 40039 2个字节Byte0:保留0x00当往Byte1中写入0x01时则进行恢复出厂设置

汉枫Wi-Fi串口服务器HF2211S应用案例的更多相关文章

  1. 41.1、shell编程案例

    1.案例1(表达式案例): 开发shell脚本分别实现以定义变量,脚本传参以及read读入的方式比较2个整数大小.用条件表达式(禁if) 进行判断并以屏幕输出的方式提醒用户比较结果: [root@ba ...

  2. Appium、selenium与Robot Framework

    Robot Framework + Appium Appium-Python-Client: 与Appium Library和Appium Server的交互Appium Library通过Appii ...

  3. 【Win10 应用开发】扫描和连接Wi-fi网络

    老周今天带大家去“扫雷”了,别当真,是扫描并连接指定无线网络,时尚一点叫Wi-fi. 所以,今天的任务要求你的设备至少有1张无线网卡,目前老周没看到过有N张无线网卡的设备.像笔记本.平板等设备都可以, ...

  4. 全文检索引擎 Solr 部署与基本原理

    全文检索引擎 Solr 部署与基本原理 搜索引擎Solr环境搭建实例 关于 solr , schema.xml 的配置说明 全文检索引擎Solr系列-–全文检索基本原理 一.搜索引擎Solr环境搭建实 ...

  5. Solr搭建大数据查询平台

    参考文章:http://www.freebuf.com/articles/database/100423.html 对上面链接的补充: solr-5.5.0版本已被删除,新url:http://mir ...

  6. java 单利模式

    首先何为单利模式: 单利模式即多次调用同一个对象的时候,只有一个实例(这里所谓的实例就是,假如创建了两个对象,它们的hashCode相同) 下面是相关代码: 1 创建一个对象Singleton类 pa ...

  7. 我与solr(五)--关于schema.xml中的相关配置的详解

    先把文件的代码贴上来: <?xml version="1.0" encoding="UTF-8" ?> <!-- 版权说明... --> ...

  8. Solr:文本分析

    文本分析时搜索引擎的核心工作之一,对文本包含许多处理步骤,比如:分词.大写转小写.词干化.同义词转化等.简单的说,文本分析就说将一个文本字段的值转为一个一个的token,然后被保存到Lucene的索引 ...

  9. Solr:Schema设计

    本文已挪至  http://www.zhoujingen.cn/blog/8546.html Solr将数据以结构化的方式存入系统中,存储的过程中可以对数据建立索引,这个结构的定义就是通过schema ...

随机推荐

  1. nodejs-安装/helloworld/npm

    安装---------------------------------------------------------------- http://nodejs.cn/download/ 完成之后确定 ...

  2. MAC地址格式

    随机配置一个mac地址,发现有的会报出Cannot assign requested address. 错误码是EADDRNOTAVAIL. 检查不是组播地址也不是全0地址. 组播地址就是第一个字节最 ...

  3. Day004 选择结构

    选择结构 if单选择结构(if) if双选择结构(if...else...) if多选择结构(if..else if...else) 嵌套的if结构 switch多选择结构 switch语句中的变量类 ...

  4. c++debug&注意事项 自用 持续更新

    cin后回车程序直接退出: 加system("pause");在return 0;前面 C++ 控制cout输出的小数位数 C++中的cout.setf().cout.precis ...

  5. 【Azure Developer】使用Microsoft Graph API 批量创建用户,先后遇见的三个错误及解决办法

    问题描述 在先前的一篇博文中,介绍了如何使用Microsoft Graph API来创建Azure AD用户(博文参考:[Azure Developer]使用Microsoft Graph API 如 ...

  6. JS数组的操作方法汇总

    数组的增删 push():添加到最后 pop():取出最后一个 shift():取出第一个 unshift():添加到第一个 splice() : 返回删除的数组,如果没有则为空数组,会改变原数组.可 ...

  7. 有哪些适合中小企业使用的PaaS平台?

    对于中小企业来说,在业务上同样需要工作流.应用平台来进行支持,但是,面对诸如ERP等动辄好几十万的费用来说,完全是在增加运营成本.如何解决中小企业对于业务应用.工作流管理的需求问题呢?使用PaaS低代 ...

  8. 简单聊聊内存逃逸 | 剑指offer - golang

    问题 简单讲讲golang的内存逃逸吗? 解析 什么是内存逃逸 在程序中,每个函数块都会有自己的内存区域用来存自己的局部变量(内存占用少).返回地址.返回值之类的数据,这一块内存区域有特定的结构和寻址 ...

  9. [Linux] Linux命令行与Shell脚本编程大全 Part.3

    Shell Shell 是管理命令行的程序(包在内核外的壳) 不同Shell版本演化关系如下,一般Linux中会自动安装Sh和Bash(Bash比Sh好写,Zsh最好用) .bashrc:Bash 的 ...

  10. [刷题] 343 Integer Break

    要求 给定一个正数n,可将其分割成多个数字的和,求让这些数字乘积最大的分割方法(至少分成两个数) 示例 n=2,返回1(2=1+1) n=10,返回36(10=3+3+4) 实现 回溯遍历(n^2,超 ...