基于MQTT的温湿度采集服务
1. 项目概述
thdetect是一个基于RS485的温湿度采集服务程序,通过Modbus-RTU协议读取传感器数据,并将数据通过MQTT协议发布到消息代理服务器。该服务可以作为后台守护进程运行,为上层应用提供实时的温湿度数据。
2. 开发环境
- 处理器:AM3354
- 显示屏:支持触摸功能的LCD屏幕
- 操作系统:Linux 3.2
- LVGL版本:v8.3
- 构建工具:CMake 3.16+
- 交叉编译工具链:arm-arago-linux-gnueabi-gcc 4.5.3
- 源码路径:https://gitcode.com/am335xt3/lvgl/tree/main/servers
PS:gitcode要求打开源码页面,需要先登录账号。
3. 系统架构
系统主要由以下几个部分组成:
- 串口通信模块:负责与RS485温湿度传感器进行Modbus-RTU通信
- 数据采集模块:实现温湿度数据的读取和解析
- MQTT客户端模块:负责将采集到的数据发布到MQTT代理服务器
- 守护进程模块:支持以守护进程方式运行
4. 功能模块设计
4.1 串口通信模块
-
串口配置
- 波特率:4800bps(默认)
- 数据位:8位
- 停止位:1位
- 校验位:无
- 流控制:无
-
关键函数
int serial_config(int fd) // 配置串口参数 int modbus_init(const char *port_name) // 初始化串口设备 void modbus_cleanup(void) // 清理串口资源
4.2 数据采集模块
-
Modbus通信协议
- 从机地址:0x01
- 功能码:0x03(读取保持寄存器)
- 起始寄存器:0x0000
- 寄存器数量:2个(温度和湿度)
-
数据解析
- 湿度值:直接转换(原始值/10)
- 温度值:补码转换(原始值/10)
-
关键函数
int modbus_read_th(float *temperature, float *humidity) // 读取温湿度数据 static uint16_t calc_crc16(const uint8_t *data, int len) // CRC16校验
4.3 MQTT客户端模块
4.3.1 MQTT发布客户端模块
MQTT客户端模块基于mosquitto实现,mosquitto移植请参考:
mosquitto移植到AM335x+Linux系统
-
MQTT配置
- 默认代理服务器:localhost
- 默认主题:sensors/th
- 消息格式:JSON
{ "temperature"

最低0.47元/天 解锁文章
5063

被折叠的 条评论
为什么被折叠?



