基于MQTT的温湿度采集服务

基于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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值