# 基于STM32与i.MX6ULL的多设备采集系统 **Repository Path**: LeeHojou/master-slaver-system ## Basic Information - **Project Name**: 基于STM32与i.MX6ULL的多设备采集系统 - **Description**: 一个上位机+下位机的温湿度采集系统。上位机基于Qt与野火i.MX6ULL mini开发板进行开发。下位机基于STM32与FreeRTOS环境开发。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-10 - **Last Updated**: 2026-07-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于STM32与i.MX6ULL的多设备采集系统 ## 项目简介 本项目是一个上位机+下位机系统。上位机基于Qt与野火i.MX6ULL mini开发板进行开发,可以在Windows和Linux环境下运行。下位机基于STM32与FreeRTOS环境开发。 - 上位机用Qt完成UI界面开发。可实现实时采集数据展示、回溯历史数据、下位机控制等功能。 - 下位机可实现采集温湿度传感器的数据,并将数据上传给上位机系统。与上位机的通信采用TCP协议完成。 --- ## 硬件系统 ### 下位机硬件系统 **电源**:电源采用DC转3.3V/5V芯片与ST-LINK共同供电 - 其中,ESP-01S模块与SHT30模块用电源芯片的3.3V与5V输出端供电 - STM32最小系统板、OLED显示屏等其余硬件使用ST-LINK供电 **STM32最小系统板**: - 主控芯片:STM32F103C8T6 - 电源接线:连接ST-LINK通过USB口供电,并通过两组3.3V和GND端引出,供其他设备供电。 - 电源芯片的GND引脚与STM32最小系统版引出的GND连接 **温湿度传感器**: - 模块型号:SHT30串口模块 - 引脚连接: - TX和RX引脚分别连接MCU的PA3(USART2_RX)和PA2(USART2_TX)引脚 - 5V引脚连接电源模块的5V接线端 - GND引脚连接电源模块的GND接线端 > 温湿度传感器模块功能: > - 提供温湿度原始数据,数据格式为:`R:xxx.xRH yyy.yC\r\n` ,其中 `xxx.x` 和 `yyy.y` 均表示1个小数位的小数值。 > - 模块有2种模式,自动上报和手动读取,自动上报模式下,每秒提供最新的原始数据;手动读取模式下,通过给模块发送串口信息 `Read\r\n` 获取最新的数据。 > - 模式切换串口指令: `Auto\r\n` 切换到自动上报;`Hand\r\n` 切换到手动读取。 **无线通信模块**: - 模块型号:ESP-01S(AT指令系统) - 引脚连接: - TX和RX引脚分别连接MCU的PA10(USART1_RX)和PA9(USART2_TX)引脚 - RST引脚连接STM32的PB12,用于上电后自动复位 - EN引脚、3.3V引脚连接电源芯片的3.3V接线端 - GND引脚连接电源芯片的GND接线端 **按钮模块**: - 按钮1、2、3分别一端接GND,一端接PA4、PA5、PA6 **OLED显示屏**: - VCC和GND接最小系统板引出的3.3V和GND - SCL接PB8、SDA接PB9。用软件模拟I2C ### 上位机硬件系统 上位机硬件采用野火i.MX6ULL mini开发板、4.3寸电容触摸屏、ESP-01S模块进行开发。 ESP-01S模块连接在开发板的UART3排针上。 ## 下位机-上位机通信协议 下位机与上位机通过ESP-01S实现通信。 - 上位机的ESP-01S模块使用AP模式,上电后自动创建一个热点 - 下位机的ESP-01S模块使用SAT模式,上电后自动连接上位机创建的热点 下位机与上位机都使用串口与ESP-01S交互,当上位机收到下位机的消息时,会收到TCP报文:`+IPD,<通道号>,<正文长度>:<正文>`。下位机收到上位机的消息时,收到TCP报文:`+IPD,<正文长度>:<正文>`。 ### 下位机上报数据 下位机上报温湿度传感器的数据协议为:`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倍容忍时间)未收到下位机的任何消息,则可认为下位机掉线。 ### 上位机指令 目前支持2种上位机指令: - `F:<秒数>`:该指令用于让下位机修改上报数据的频率,单位为秒,必须是整数。 - `R:`:该指令用于让下位机立刻进行一次数据上报。 --- ## 快速部署 ### 下位机部署 #### 下位机接线图 ![下位机接线图](下位机接线图.jpg) #### 在Keil中配置下位机工程 1. 使用ST-LINK将STM32与计算机相连,用keil打开下位机工程。 2. 单击`Options for Target`(魔术棒),在`Debug`界面右上角设置Use项,选择`ST-Link Debugger`。 3. 单击`ST-Link Debugger`右侧的`Settings`按钮 - 将`Debug`-`Clock`-`Req`设置为4MHz; - 将`Debug`-`Debug`-`Connect & Reset Options`中的`Connect`项设置为`under Reset`; - 将`Debug`-`Debug`-`Connect & Reset Options`中的`Reset`项设置为`Autodetect`; - 勾选`Flash Download`中的`Reset and Run`、`Erase Full Chip`。 4. 构建项目并烧录。 #### 下位机操作简介 1. 上电后,下位机自动重置ESP-01S模块的RST引脚,并初始化ESP-01S模块 2. OLED显示屏显示当前下位机的设备ID、上报频率、最新温湿度值。 3. 修改下位机ID - 按下按键1,修改设备ID,OLED屏幕上的ID值会变化,例如"id:1?",其中`?`符号表示该id还未生效; - 按下按键2,确认修改设备ID。确认后`?`符号消失,表明该ID已生效; - 0是无效ID,下位机初始化时会自动设置0为默认ID,OLED显示为"id:0\*",其中`*`符号表示该id是无效id。无效id上传的数据包会被上位机忽略。 4. 启动下位机采集:按下按键3可以启动/停止下位机采集,当采集进行中时,用户LED亮起。(LED集成在最小系统板的PC13接口) ### 上位机部署 使用ESP下载器(推荐)或USB-TTL串口模块将ESP-01S模块连接到计算机。 #### 部署到Windows环境 **环境需求**:需要安装QSerialPort模块,且Qt版本不低于Qt5.13 编辑`esp.cpp`文件,找到下面的串口配置代码: ```cpp #if defined(Q_OS_WIN) qDebug() << "Windows环境"; port->setPortName("COM9"); #elif defined(Q_OS_LINUX) || defined(Q_OS_MACOS) qDebug() << "Unix/Linux/macOS环境"; port->setPortName("/dev/ttyUSB0"); #endif ``` 将其中的`"COM9"`修改为ESP-01S模块实际连接的串口。 构建项目。 #### Linux开发板部署 在野火镜像的Ubuntu桌面系统中,用Qt打开本项目,选择ebf_lubancat-release构建套件进行构建。 Linux采用野火Debian系统,已经安装了大部分需要的库。 Linux开发板上要确保安装了`libQt5Charts.so.5`(Qt Charts 模块)和`libQt5SerialPort.so.5`(Qt SerialPort 模块),若未安装可使用下面的命令安装: ```shell sudo apt update sudo apt install libqt5charts5 libqt5serialport5 ``` 需要安装SQLite支持库: ```shell sudo apt update sudo apt install libqt5sql5-sqlite ``` 确保使将ESP-01S模块连接到ttyUSB0串口,如果连接到了其他串口,请仿照上小节,将`"/dev/ttyUSB0"`修改为目标串口。 将编译后的`qt_master`文件传输到开发板的`/usr/local/qt-app/`目录,通过本目录下的`run_myapp.sh`**野火Qt运行脚本启动脚本**运行项目: ```shell sudo /usr/local/qt-app/run_myapp.sh /usr/local/qt-app/qt_master ``` > 如果启动失败且出现`let: not found`错误,可尝试将脚本首行的`#! /bin/sh`修改为`#!/bin/bash` > 若野火开发板系统中存在野火Qt Demo,使用`sudo pkill App`命令终止Demo进程。