\u2190 \u2192 \u7ffb\u9875 \u00b7 B \u9759\u6001 \u00b7 ESC \u7d22\u5f15
嵌入式课程设计
01 / 16
嵌入式课程设计
多线程环境监测系统
基于 RT-Thread 与 STM32L475
面向农业机器人的传感器中心节点
四线程并发采集温湿度、光照、六轴姿态共计 11 维数据
AHT10AP3216CICM-20608RT-ThreadSTM32L475VET6
基于 RT-Thread 的多线程环境监测系统设计与实现
— · —
Act I · Context
02 / 16
Act I · Context
智慧农业
精准感知 · 智能决策 · 自动执行
农业机器人作为智慧农业的核心载体,依赖多维度环境感知实现自主导航与精准作业。传感器中心节点是机器人与环境交互的「感官系统」。
智慧农业背景与需求分析
— · —
核心指标
03 / 16
系统核心指标
并发线程
4线程
sensor / lcd_thr / event_thr / key_thr
传感器数量
3
AHT10 温湿度 · AP3216C 环境光 · ICM-20608 六轴
数据通道
11
温度·湿度·ALS·IR·PS·三轴加速度·三轴角速度
采集周期
500ms
传感器线程休眠-唤醒循环
LCD 刷新率
250ms
事件驱动刷新,三页菜单显示
片上 SRAM
128KB
128KB SRAM / 512KB Flash,实测 70KB 内存占用
系统核心性能参数
— · —
问题定义
04 / 16
系统架构
多传感器融合
的四层架构
硬件层 → 驱动层 → 内核层 → 应用层
自底向上的四层抽象中,RT-Thread 内核提供线程调度、IPC 通信、时钟管理等基础服务,应用层四个线程按优先级并发,实现实时环境感知。
系统总体架构 · 自底向上四层
系统总体架构
Fig.1 · 系统总体架构
系统架构概览
— · —
硬件平台
05 / 16
硬件平台一览
温湿度传感器
Fig.2 · 温湿度传感器 AHT10
AP3216C
Fig.3 · 光照接近传感器 AP3216C
六轴陀螺仪加速度计
Fig.4 · 六轴 IMU ICM-20608
LCD
Fig.5 · LCD 显示模块
3+1
三种传感器
+ 一块 LCD 屏
I²C × 2 + SPI × 1
4
物理按键
KEY0–KEY3
GPIO 中断
硬件平台
— · —
Act II · Design
06 / 16
Act II · Design
系统设计
自底向上的四层架构 · 四大线程并发协作
Hardware → Driver → Kernel (RT-Thread) → Application,消息队列串联数据流,事件标志位驱动 UI 刷新,互斥锁保护共享结构体。
消息队列事件标志互斥量邮箱
系统架构设计
— · —
线程模型
07 / 16
四线程任务划分
01
key_thr
按键扫描线程
优先级 6,周期 20ms
GPIO 中断 + 消抖
→ 发送事件到事件线程
02
event_thr
事件处理线程
优先级 12,周期 100ms
接收按键 / 传感器事件
→ 更新共享数据结构
03
sensor
传感器采集线程
优先级 12,周期 500ms
AHT10 + AP3216C + ICM20608
→ 关中断原子写入
04
lcd_thr
LCD 显示线程
优先级 12,周期 250ms
事件标志触发刷新
→ 三页菜单切换显示
IPC 通信矩阵
MQ
消息队列
sensor → lcd_thr
传递传感器数据
EF
事件标志
通知 lcd_thr
数据就绪 / 按键按下
MUT
互斥量
保护共享数据结构
原子读写上下文
MB
邮箱
key_thr → event_thr
按键值异步投递
线程模型与 IPC
— · —
IPC 通信
08 / 16
线程间通信
IPC 通信机制
消息队列 · 事件标志 · 互斥量 · 邮箱
消息队列
传感器线程将 11 维数据打包为结构化消息,发送到 lcd_thr 的消息队列,实现异步解耦
MQ
事件标志
数据就绪 / 按键事件两个标志位,lcd_thr 以 250ms 周期轮询,事件驱动 UI 刷新
EF
互斥量
保护传感器数据共享结构体,关中断执行原子读写,防止数据撕裂
MUT
邮箱
key_thr 检测按键后通过邮箱投递按键值到 event_thr,实现异步事件分发
MB
线程间数据通信流
Fig.6 · 线程间数据通信流
IPC 通信机制
— · —
Act III · Implementation
09 / 16
Act III · Implementation
系统实现
启动流程 → 传感器采集 → LCD 显示 → 事件分发
从板级初始化到线程创建,从外设驱动到数据可视化,四个阶段环环相扣,RT-Thread 调度器作为「心脏」驱动整个系统运转。
系统实现
— · —
启动流程
10 / 16
初始化序列
系统启动流程
01
板级初始化
时钟配置 · GPIO · I²C · SPI · 串口
02
外设驱动注册
AHT10 · AP3216C · ICM20608 · LCD
03
线程创建
4 线程 + IPC 对象初始化
RT-Thread 启动后依次执行硬件初始化、外设驱动装载、IPC 对象创建和四个线程动态创建,系统进入并发运行状态。
main.c · 启动序列
系统启动流程
Fig.7 · 系统启动流程
启动流程
— · —
传感器采集
11 / 16
传感器线程
传感器采集线程
500ms 周期 · 关中断原子写入
采集周期
rt_thread_mdelay(500) 休眠 500ms,唤醒后轮询三传感器
500 ms
AHT10
I²C 读取温湿度,温度 ±0.3°C,湿度 ±2%RH
I²C1
AP3216C
I²C 读取环境光 (ALS)、红外 (IR)、接近感应 (PS)
I²C2
ICM-20608
SPI 读取三轴加速度 + 三轴角速度,共 6 维数据
SPI
采集完成后关中断,将 11 维数据原子写入共享结构体,通过消息队列发送到 lcd_thr,设置事件标志位。
传感器采集线程
— · —
方案对比
12 / 16
裸机轮询 vs RT-Thread 方案对比
Before
裸机轮询方案
架构
单 while(1) 循环,顺序执行
实时性
传感器采集阻塞按键响应
扩展性
新增传感器需重构轮询逻辑
LCD 刷新
与采集耦合,刷新率不稳定
After
RT-Thread 四线程方案
架构
四线程并发,RTOS 调度器抢占
实时性
按键最高优先级 6,20ms 响应
扩展性
新增传感器仅需创建新线程
LCD 刷新
独立线程,250ms 稳定周期
方案对比
— · —
事件分发
13 / 16
事件驱动架构
事件分发链路
按键中断
GPIO EXTI
触发回调
key_thr
20ms 消抖
→ 邮箱投递
event_thr
解析按键
→ 设置事件标志
lcd_thr
响应标志
→ 页面切换
按键事件从硬件中断到 UI 响应的完整传递链:GPIO → key_thr (消抖) → 邮箱 → event_thr → 事件标志 → lcd_thr → LCD 页面刷新。
事件传递链 · 四环节
按键事件完整传递链
Fig.9 · 按键事件完整传递链
事件分发
— · —
Act IV · Result
14 / 16
Act IV · Result
测试与展望
2 小时稳定运行 · 70KB 内存占用
系统在 2 小时压力测试中零崩溃,四个线程状态正常,内存占用仅 70KB。未来可向无线传感网络、AI 决策模块和机器人自主导航方向扩展。
0 崩溃70KB 内存2h 稳定性4 线程活跃
测试与展望
— · —
难点攻克
15 / 16
技术难点与解决方案
三大难点
难点 01
数据一致性
传感器采集与 LCD 读取共享内存,存在竞争条件。多线程环境下若不加保护,LCD 可能读到半更新数据。
难点 02
实时响应
按键需 20ms 级响应,同时不能阻塞传感器采集和 LCD 刷新,优先级分配需精心设计。
难点 03
内存受限
STM32L475 仅 128KB SRAM,四个线程栈 + 消息队列 + 驱动 buffer 需严格把控,避免栈溢出。
解决策略
方案 01
互斥锁
传感器写入前获取互斥锁,关中断执行原子操作,写入完成后释放锁并发送消息队列。
方案 02
优先级设计
key_thr 优先级 6(最高),确保按键立即响应;其余三线程优先级 12,RT-Thread 时间片轮转调度。
方案 03
栈空间裁剪
根据各线程实际需求分配栈空间:key_thr 512B,event_thr 1KB,sensor 2KB,lcd_thr 2KB,实测稳定。
难点与解决方案
— · —
致谢
16 / 16
致谢
感谢 RT-Thread 开源社区提供的优秀 RTOS 内核
感谢正点原子探索者 STM32F4 开发板的硬件平台支持
最终效果演示
Fig.10 · 最终效果演示
基于 RT-Thread 的多线程环境监测系统 · 农业机器人传感器中心
致谢
— · —