一、项目概述与整体架构 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_


![[C++]算法双指针 复写0-171主机测评](https://www.171host.com/wp-content/uploads/2026/09/20260910013601-6aa2098179e1b-220x150.png)


