项目简介
本项目是一个上位机+下位机系统。上位机基于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任务:下位机实时数据更新
上位机功能
- 以折线图形式实时显示下位机数据。支持同时连接多个下位机,当记录到新数据时,写入SQLite进行保存
- 可以通过SQLite数据库按照下位机ID、起止时间查询历史记录
- 向下位机发送指令
- 当温度或湿度超过设定的报警阈值时,支持发出警报
- 自动管理下位机的连接与断开,使用心跳检测保证下位机在线状态
上位机指令
目前支持2种上位机指令:
F:<秒数>:该指令用于让下位机修改上报数据的频率,单位为秒,必须是整数。R::该指令用于让下位机立刻进行一次数据上报。
使用说明
下位机部分
OLED显示数据
OLED显示的数据包括设备ID、数据上传周期、最新传感器值。
- 设备ID的取值范围为0~8,其中0为无效ID;
- 数据上传周期是不小于1的整数,单位为秒;
- 最新传感器值分别展示了当前的温度值和湿度值。
连接上位机
下位机通电以后,ESP模块会自动尝试连接上位机。连接成功后按下KEY3,用户LED灯亮起,代表数据上传功能已打开。
修改设备ID
下位机通电以后,自动获取一个下位机ID,该ID默认值为0,0是无效ID,需要手动调整为1~8范围内的有效值:
- 按下KEY1,OLED上的设备ID值增加1,并标有?标记,代表该ID暂未生效;
- 按下KEY2,将当前选中的设备ID值代入程序中,同时?标记消失;
- 注:ID为0时,ID后将显示*标记,代表该ID无效,带有该ID的数据包不会被上位机识别为有效数据。
- 注2:当多个下位机设备具有相同的ID时,上位机将会认为这些都是同一个下位机设备。
上位机部分
上位机功能将以页面为单位进行讲解。
主页面
主页面包含一个温湿度实时监测表、时钟、传感器数据展示窗、设备选择器、温湿度列表。其中:
- 时钟展示了当前的时间;
- 设备选择器可用来选择目前连接至上位机的下位机设备;
- 传感器数据展示窗可展示当前选中的下位机最新更新的传感器数据,以及最新一次更新数据的时间;
- 温湿度实时监测表展示当前选中的下位机的实时温湿度变化曲线;
- 温湿度列表展示当前所有在线的下位机的最新温湿度数据。
历史页面
历史页面用来查询特定ID的下位机在特定时间区间内的温湿度变化曲线。利用界面右侧的设备选择器选中特定下位机ID,并输入查询的时间区间,点击查询按钮,该段时间的温湿度变化曲线即可在左侧温湿度图标中显示。
设置页面
设置页面用以进行相关系统设置。
报警阈值设置:设定温湿度报警的上下限,当有设备上报的温湿度数据超过报警阈值时,上位机将发出警告。
下位机上报频率设置:可以修改目标下位机的数据上报周期。
所有设置通过Qt的QSettings类统一管理,重启后设置不丢失。
关于页面
展示作者信息和主页。
