返回项目列表

基于STM32与i.MX6ULL的多设备采集系统

2026-07-13C/C++QtLinuxSTM32FreeRTOS

一个使用Linux开发板与STM32的上位机下位机项目。

基于STM32与i.MX6ULL的多设备采集系统

项目简介

本项目是一个上位机+下位机系统。上位机基于Qt与野火i.MX6ULL mini开发板进行开发。下位机基于STM32与FreeRTOS环境开发。

  • 上位机用Qt完成UI界面开发,并实现了ESP-01S模块的驱动开发。可实现实时采集数据展示、回溯历史数据、下位机控制等功能。
  • 下位机可实现采集温湿度传感器的数据,并将数据上传给上位机系统。与上位机的通信采用TCP协议完成。

硬件系统

下位机硬件系统

  • 主控芯片:STM32F103C8T6
  • 温湿度传感器:SHT30模块
  • 无线通信模块:ESP-01S(AT指令系统)
  • 按钮模块
  • OLED显示屏:在下位机上显示当前数据、设备id、上报频率等信息

上位机硬件系统

  • 野火i.MX6ULL mini开发板
  • 4.3寸电容触摸屏
  • ESP-01S模块

通信方式

下位机与上位机通过ESP-01S实现通信。

  • 上位机的ESP-01S模块使用AP模式,上电后自动创建一个热点
  • 下位机的ESP-01S模块使用SAT模式,上电后自动连接上位机创建的热点

下位机上报温湿度传感器的数据协议为:ID:<下位机ID>,TEM:<温度值>,HUM:<湿度值>。其中:

  • 下位机ID是下位机的设备ID,该ID可以通过下位机的按键1、2进行修改。可选值为0~8,其中0被认为是不可用ID。上位机收到ID为0的设备的消息时,不进行处理。
  • 温度值湿度值均为浮点数,整数部分有3位(不足3位时补充前导0),小数部分有1位,例如005.8。温度值有+-前缀。

下位机心跳ID:<下位机ID>。下位机保证每15秒至少上报一次数据。如果15秒内都没有温湿度数据上报,则上报一次心跳,用于保持下位机在线。如果上位机超过30秒(给予1倍容忍时间)未收到下位机的任何消息,则可认为下位机掉线。

下位机功能

基于FreeRTOS实现任务循环,主要任务如下:

  • ESP任务:与上位机进行TCP通信,支持断线重连
  • SHT任务:按照一定频率进行传感器采样
  • KEY任务:检测按键事件
  • OLED任务:下位机实时数据更新

上位机功能

  1. 以折线图形式实时显示下位机数据。支持同时连接多个下位机,当记录到新数据时,写入SQLite进行保存
  2. 可以通过SQLite数据库按照下位机ID、起止时间查询历史记录
  3. 向下位机发送指令
  4. 当温度或湿度超过设定的报警阈值时,支持发出警报
  5. 自动管理下位机的连接与断开,使用心跳检测保证下位机在线状态

上位机指令

目前支持2种上位机指令:

  • F:<秒数>:该指令用于让下位机修改上报数据的频率,单位为秒,必须是整数。
  • R::该指令用于让下位机立刻进行一次数据上报。

使用说明

下位机部分

OLED显示数据

OLED显示的数据包括设备ID、数据上传周期、最新传感器值。

  • 设备ID的取值范围为0~8,其中0为无效ID;
  • 数据上传周期是不小于1的整数,单位为秒;
  • 最新传感器值分别展示了当前的温度值和湿度值。

连接上位机

下位机通电以后,ESP模块会自动尝试连接上位机。连接成功后按下KEY3,用户LED灯亮起,代表数据上传功能已打开。

修改设备ID

下位机通电以后,自动获取一个下位机ID,该ID默认值为0,0是无效ID,需要手动调整为1~8范围内的有效值:

  1. 按下KEY1,OLED上的设备ID值增加1,并标有?标记,代表该ID暂未生效;
  2. 按下KEY2,将当前选中的设备ID值代入程序中,同时?标记消失;
  3. 注:ID为0时,ID后将显示*标记,代表该ID无效,带有该ID的数据包不会被上位机识别为有效数据。
  4. 注2:当多个下位机设备具有相同的ID时,上位机将会认为这些都是同一个下位机设备。

上位机部分

上位机功能将以页面为单位进行讲解。

主页面

主页面包含一个温湿度实时监测表、时钟、传感器数据展示窗、设备选择器、温湿度列表。其中:

  • 时钟展示了当前的时间;
  • 设备选择器可用来选择目前连接至上位机的下位机设备;
  • 传感器数据展示窗可展示当前选中的下位机最新更新的传感器数据,以及最新一次更新数据的时间;
  • 温湿度实时监测表展示当前选中的下位机的实时温湿度变化曲线;
  • 温湿度列表展示当前所有在线的下位机的最新温湿度数据。

历史页面

历史页面用来查询特定ID的下位机在特定时间区间内的温湿度变化曲线。利用界面右侧的设备选择器选中特定下位机ID,并输入查询的时间区间,点击查询按钮,该段时间的温湿度变化曲线即可在左侧温湿度图标中显示。

设置页面

设置页面用以进行相关系统设置。

报警阈值设置:设定温湿度报警的上下限,当有设备上报的温湿度数据超过报警阈值时,上位机将发出警告。

下位机上报频率设置:可以修改目标下位机的数据上报周期。

所有设置通过Qt的QSettings类统一管理,重启后设置不丢失。

关于页面

展示作者信息和主页。

项目地址

https://gitee.com/LeeHojou/master-slaver-system