温湿度数据和风速风向数据的读取和计算方法
文章目录
- 温湿度数据和风速风向数据的读取和计算方法
- 1 串行通信数据格式
- 1.1 协议介绍
- 1.2 UART相关参数
- 1.3 UART通信过程
- 2 USB转串口模块的使用
- 3 串口调试助手的使用
- 3.1 串口控制区
- 3.2 发送控制区
- 3.3 接收控制区
- 4 GY-39气象信息模块的原理和使用
- 4.1 功能简介
- 4.2 数据包结构
- 4.3 数据精度
- 5 使用逻辑分析仪捕获UART通信波形
- 5.1 逻辑分析仪的工作原理
- 5.2 逻辑分析仪的主要参数
- 5.3 使用逻辑分析仪捕获GY-39模块的通信波形
- 5.4 使用PC读取GY-39模块的测量数据
- 5.5 GY-39模块测量数据的计算
- 6 RS485与Modbus协议
- 6.1 RS485通信接口原理
- 6.2 Modbus协议原理
- 6.3 Modbus协议帧结构
- 7 PR-3000风速风向模块
- 7.1 模块介绍
- 7.2 接线方式
- 7.3 模块地址设置
- 7.4 Modbus寄存器地址
1 串行通信数据格式
1.1 协议介绍
UART
是异步串行通信协议,可以实现双向全双工传输。UART将数据分成帧,并逐位传输。完整的数据帧由起始位、数据位、奇偶校验位和停止位组成。在传输数据时,两个字符之间存在空闲位,空闲位为逻辑1,表示线路处于等待状态。
1.2 UART相关参数
波特率是每秒传送的二进制码位数,单位为bps。常见的波特率有4800bps
、9600bps
、115200bps
、921600bps
等。
起始位用于表示数据的开始传输,由一个逻辑0的数据位表示。
有效数据的长度常被约定为5、6、7或8位,一般都是8位数据。数据位从低位到高位依次传输。
校验位用于验证数据是否正确,有奇校验(odd)
、偶校验(even)
、0校验(space)
、1校验(mark)
以及无校验(noparity)
等方式。奇校验要求有效数据和校验位中逻辑1的个数为奇数,偶校验要求有效数据和校验位中逻辑1的个数为偶数,0校验和1校验分别要求校验位总是0或1,无校验则不使用校验位。
停止位表示数据传输的结束,一定是逻辑1。常见的停止位数量可以是1位、1.5位或2位。
1.3 UART通信过程
UART通信时,先发送低位,再发送
高位。下面是一个示例:
假设波特率为100bps,每一个比特持续的时间为10ms。原始数据为0110 0011B,即0x63。将该数据转换为UART数据帧:
- 起始位
- 有效数据
- 校验位
- 停止位
0 01100011 1 1(逆序传输)
则UART数据帧为1100 0110 10。
2 USB转串口模块的使用
在调试硬件时,需要使用USB转串口模块将USB接口信号转换为UART接口的TTL信号。
串行通信设备可以采用三线制连接,即两条数据线和一条地线。
- 用于接收数据的数据线用英文RX、Rx或RXD表示,
- 用于发送数据的数据线用英文TX、Tx或TXD表示。
设备1的TX引脚连接设备2的RX引脚,设备1的RX引脚连接设备2的TX引脚。
3 串口调试助手的使用
串口调试助手是一类辅助PC进行串口调试的工具软件。常用的串口调试助手有XCOM、SSCOM、野火多功能调试助手等。此处使用的串口调试助手软件是XCOM V2.0。
3.1 串口控制区
串口控制区用于设定COM号、波特率、停止位长度、数据位长度、奇偶校验类型等。
3.2 发送控制区
发送控制区用于控制发送数据的参数。
- 定时发送:按照一定的周期自动重复发送数据。
- 16进制发送:要发送的数据为41。使用16进制发送会将数据理解为0x41并进行发送;不使用16进制发送会将数据理解为0x34 0x31(即4和1的ASCII码)并进行发送。
- 发送新行:数据后面发送一个’\r\n’。
3.3 接收控制区
接收控制区用于控制接收到的数据的显示格式和流控制方式等。
4 GY-39气象信息模块的原理和使用
4.1 功能简介
GY-39气象信息模块可以测量气压、温度、湿度、光照强度、海拔等多种气象信息。模块内部的芯片可以将数据进行处理。默认的输出方式是UART。
4.2 数据包结构
GY-39模块工作时,会发送光照强度数据包和气象信息数据包。这两种数据包均由包头
、包类型
、数据量
、数据
和校验和
这几个部分组成。
光照强度数据包结构:
- 包头标志(2字节):5A 5A
- 包类型标志(1字节):15
- 数据长度(1字节):04
- 数据(4字节):00 00 FE 40
- 校验和(1字节):0B
气象信息数据包结构:
- 包头标志(2字节):5A 5A
- 包类型标志(1字节):45
- 数据长度(1字节):0A
- 数据(10字节):0B 2D 00 97 C4 3F 12 77 00 9C
- 校验和(1字节):FA
4.3 数据精度
光照强度(单位为lux)、气压(单位为Pa)和海拔(单位为m)的测量结果仅保留整数,因此传输时只需要将整数转换为对应的二进制数。
温度(单位为℃)和湿度(单位为%RH)的测量结果则保留到小数点后两位。在传输时,会先将数值扩大一百倍,然后再转换为对应的二进制数。测量结果有可能是负数,模块会使用补码来表示负数的结果。
5 使用逻辑分析仪捕获UART通信波形
5.1 逻辑分析仪的工作原理
逻辑分析仪可以对通信接口的数据进行实时监测和采集,它的工作原理是:通过探头监测数据流,将并行数据送入比较器进行电平判断后输出,再将判断结果进行采样和顺序存储,最终可以显示出通信波形。
5.2 逻辑分析仪的主要参数
(1) 采样频率。决定了逻辑分析仪可以采集信号的频率范围,一般要高于被测信号4倍以上。
(2) 存储深度。决定了在固定采样频率下可以采集波形的时间长度,存储深度越大可以观察更长时间内的信号变化。
(3) 触发条件。决定了逻辑分析仪开始采集波形的时机,常用的有上升沿、下降沿、高电平和低电平触发。
5.3 使用逻辑分析仪捕获GY-39模块的通信波形
(1) 连接GY-39模块的TX引脚与逻辑分析仪,并将二者与PC连接。
(2) 设置逻辑分析仪的采样频率为2MHz,采样时间为2s。将通道名设置为UART_TX,触发方式为下降沿触发。
(3) 启动逻辑分析仪,自动开始采集和显示GY-39模块的通信波形。波形中的白点代表一帧数据中的数据位。
5.4 使用PC读取GY-39模块的测量数据
(1) 将GY-39模块、USB转串口模块和PC连接。
(2) 在串口调试助手XCOM中打开相应的串口,设置波特率为9600,数据位为8位,停止位为1位。
(3) 打开串口并观察接收到的数据。GY-39模块默认1Hz发送数据,无需任何操作即可接收。
5.5 GY-39模块测量数据的计算
根据数据手册,GY-39模块发送的数据为:
光照强度=(前高8位<<24)|(前低8位<<16)|(后高8位<<8)|后低8位/10 lux
温度=((高8位<<8)|低8位)/100 °C
气压=(前高8位<<24)|(前低8位<<16)|(后高8位<<8)|后低8位 /100 Pa
湿度=(高8位<<8)|低8位/100 %RH
海拔高度=(高8位<<8)|低8位 m
6 RS485与Modbus协议
6.1 RS485通信接口原理
RS485是美国电气工业联合会制定的多点通信接口标准,采用主从通信方式进行工作,适合远距离、高灵敏度的多点通信。RS485接口有A、B两条信号线,采用差分信号的形式工作。在远距离通信时常用的速率为9600bps,此时通信距离可达500~1500米。
6.2 Modbus协议原理
Modbus是一种工业领域常用的串行通信协议,是莫迪康(Modicon)公司于1979年为可编程逻辑控制器的通信而研发的。2004年,中国国家标准委员会正式把Modbus协议作为了国家标准(GB/T 19582.2-2008《基于Modbus协议的工业自动化网络规范 第2部分:Modbus协议在串行链路上的实现指南》)。
Modbus协议广泛应用于自动化控制、环境监测、能源管理、工业自动化、楼宇自控等领域。Modbus协议采用简单、开放、易于实现的特点,能够方便地应用于各种不同的设备之间的通信。
6.3 Modbus协议帧结构
Modbus的数据帧分为四部分:设备地址、功能码、数据、校验码。
设备地址是一个字节,用于指示从机的地址。其中地址0是广播地址,1247是从机可用的地址,248255是保留地址。主机可以通过地址选择通信的对象。
功能码是一个字节,用于指示主机请求的操作。Modbus协议规定了一些常用的功能码,如03功能码是读保持寄存器,16功能码是写多个寄存器等。
数据部分长度不超过252字节。如果是主机发送的帧,则这一部分是主机请求的参数。如果是从机发送的帧,则这一部分是从机返回的数据或者异常码。
校验码是长度为两个字节的数据,用于对设备地址、功能码、数据区的所有字节进行校验。Modbus协议采用CRC16算法进行校验。
根据用途的不同,Modbus帧可以分为主机向从机发送的问询帧和从机向主机发送的应答帧。
7 PR-3000风速风向模块
7.1 模块介绍
该模块由风速模块和风向模块组成。风速模块采用三风杯传感器检测风速,风向模块通过箭头旋转检测风向。
风速风向模块工作电压为10-30V,接口为RS485,最大通信速率为9600bps。
7.2 接线方式
将PR-3000模块的电源、地线、RS485的A、B线接至UART转RS485模块。RS485线不能接反,同一网络下设备地址不能重复。
7.3 模块地址设置
Modbus协议要求同一网络从机地址唯一。风速与风向模块出厂默认地址均为1,使用前需要修改。
7.4 Modbus寄存器地址
根据数据手册,风与风向模块的Modbus寄存器地址如下:
风速模块(地址1):
- 风速值:0x00(高字节)、0x01(低字节),单位0.1m/s。
风向模块(地址2):
- 风向值:0x00,取值0-7,对应北、东北、东、东南、南、西南、西、西北。