STM32 大型综合进阶项目|滤波算法 + FreeRTOS 多任务 + LoRa/WiFi 双无线环境监测系统,分层工业级完整工程
一、项目概述与整体架构1.1 项目核心功能1、传感器采集与数字算法:DHT11 温湿度 + ADC 模拟量,滑动均值滤波消除数据抖动2、FreeRTOS 实时多任务调度:采集任务、屏幕刷新、LoRa 收发、WiFi 上传、按键控制完全解耦3、双无线双通道传输LoRa SX1278:厂区 / 农田远距离点对点本地组网,无网络场景离线传输。ESP8266 WiFi:TCP 客户端,局域网电脑 / 手机远程实时查看数据。4、资源同步保护:互斥锁保护串口 / OLED,二值信号量同步按键中断任务5、多重容错机制:无线断线自动重连、传感器读取失败容错、队列缓冲防丢包6、本地人机交互:OLED 实时展示温湿度、电压、LoRa 信号、WiFi 在线状态1.2 四层分层工业架构(进阶项目核心设计思想)1、底层驱动层:ADC、DHT11、OLED、SPI-LoRa、USART-WiFi、EXTI 按键,纯硬件读写,无业务逻辑2、算法处理层:滑动均值滤波、CRC16 校验、数据格式化封装,独立模块可复用3、RTOS 任务层:按功能拆分独立任务,通过队列、信号量、互斥锁完成任务通信4、业务应用层:数据转发、无线上报、人机界面、阈值判断报警1.3 硬件资源分配USART1:ESP8266 WiFi AT 通信(PA9/PA10)。SPI1:SX1278 LoRa 模块。IIC:0.96 寸 OLED(PB6/PB7)。PA0:DHT11 温湿度传感器。PA1:ADC 模拟采集通道。EXTI0 (PA0):按键中断,触发数据手动上传。USART2:调试打印串口。二、核心模块深度原理解析2.1 滑动均值滤波算法(工程降噪刚需)传感器受电源、电磁干扰会出现数值跳变,裸机单次采样数据波动大。滑动均值滤波采用固定长度窗口存储连续采样值,取平均值输出,平滑曲线同时保留实时性。算法优势:计算量极小,单片机无算力压力,适配低速环境采集场景。2.2 FreeRTOS 任务拆分设计逻辑(大型项目关键)拒绝单一大循环,按功能独立、实时性分级划分任务:Task_Sensor(高优先级):定时采集传感器,执行滤波算法Task_LoRa(中优先级):LoRa 点对点收发、本地组网转发Task_WifiUpload(中优先级):WiFi TCP 数据上传Task_OLED(低优先级):屏幕定时刷新,不抢占采集与通信Task_KeyHandle(事件触发):信号量唤醒,处理按键手动上报资源保护规则:OLED、串口为独占硬件,访问全程加互斥锁,避免多任务刷屏乱码、打印交织按键中断释放二值信号量,仅触发任务,中断不做复杂运算2.3 双无线互补通信逻辑LoRa:无基站、远距离、低速率,适合野外、厂区无网线场景,设备间互相转发监测数据WiFi:依赖局域网、高速率,用于机房、办公室远程电脑上位机查看系统自动识别无线连接状态,任一链路断开不影响另一套通信与本地显示。三、极简分层核心源码(标准库 + FreeRTOS)3.1 算法层:filter.h 滑动均值滤波#ifndef __FILTER_H#define __FILTER_H#define FILTER_WIN_SIZE 8 //滤波窗口大小//温湿度、电压双通道滤波float Filter_GetAdc(float new_val);uint8_t Filter_GetTemp(uint8_t new_temp);uint8_t Filter_GetHumi(uint8_t new_humi);#endif#include “filter.h”static float adc_buf[FILTER_