STM32物联网终端实战:从传感器到云端的低功耗设计
STM32物联网终端实战:从传感器到云端的低功耗设计
一、项目背景与挑战分析
1.1 物联网终端典型需求

(示意图说明:传感器数据采集 → 本地处理 → 无线传输 → 云端存储)
在工业物联网场景中,终端设备需满足以下核心需求:
- 超低功耗:电池供电设备需工作3年以上
- 数据可靠性:恶劣环境下保证传输成功率
- 实时响应:关键事件触发即时上报
1.2 开发难点解析
问题1:传感器数据漂移
温度/湿度传感器受电磁干扰导致数据异常
解决方案:卡尔曼滤波算法 + 硬件屏蔽设计
问题2:网络通信丢包
2G/NB-IoT网络在移动场景下丢包率高达15%
解决方案:应用层重传协议 + 数据压缩
问题3:低功耗与实时性矛盾
矛盾点:深度睡眠模式无法及时响应事件
平衡方案:RTC唤醒 + 事件驱动架构
二、硬件设计与关键器件选型
2.1 硬件架构设计
+-------------------+ +-----------------+
| STM32L476低功耗MCU |<--->| SHT35温湿度传感器 |
+-------------------+ +-----------------+| SPI |v v
+-------------------+ +-----------------+
| ESP8266 WiFi模块 | | BH1750光照传感器|
+-------------------+ +-----------------+
2.2 器件选型对比表
| 器件 | 型号 | 功耗(mA) | 接口 | 适用场景 |
|---|---|---|---|---|
| 主控MCU | STM32L476 | 0.3(睡眠) | - | 低功耗数据处理 |
| 温湿度传感器 | SHT35 | 0.08 | I2C | 工业级高精度测量 |
| 无线模块 | ESP8266 | 70(发射) | SPI | 短距离高速传输 |
| 光照传感器 | BH1750 | 0.05 | I2C | 环境光监测 |
三、软件架构与核心代码实现
3.1 低功耗任务调度设计
// 基于FreeRTOS的混合调度方案
void vApplicationIdleHook(void) {if(xTaskGetTickCount() - lastActive > SLEEP_TIMEOUT) {enter_stop_mode(); // 进入STOP模式}
}// 中断唤醒处理
void EXTI0_IRQHandler(void) {if(EXTI->PR & EXTI_PR_PR0) {xTaskResumeFromISR(sensorTask); // 唤醒传感器任务EXTI->PR = EXTI_PR_PR0; // 清除中断标志}
}
3.2 传感器数据滤波算法
// 卡尔曼滤波器实现
typedef struct {float q; // 过程噪声协方差float r; // 观测噪声协方差float x; // 最优估计值float p; // 估计误差协方差float k; // 卡尔曼增益
} KalmanFilter;float kalman_update(KalmanFilter *kf, float measurement) {// 预测阶段kf->p = kf->p + kf->q;// 更新阶段kf->k = kf->p / (kf->p + kf->r);kf->x = kf->x + kf->k * (measurement - kf->x);kf->p = (1 - kf->k) * kf->p;return kf->x;
}// 传感器数据采集线程
void sensor_task(void *pvParameters) {KalmanFilter temp_filter = {.q=0.01, .r=0.1, .x=25.0};while(1) {float raw_temp = sht35_read_temp();float filtered = kalman_update(&temp_filter, raw_temp);xQueueSend(temp_queue, &filtered, portMAX_DELAY);vTaskDelay(pdMS_TO_TICKS(1000));}
}
四、网络通信可靠性优化
4.1 应用层重传协议设计
// 数据包结构体
#pragma pack(push, 1)
typedef struct {uint16_t seq; // 序列号uint8_t retry:3; // 重试次数uint8_t type:5; // 数据类型uint32_t crc; // CRC32校验uint8_t payload[32];
} app_packet_t;
#pragma pack(pop)// 发送状态机
typedef enum {STATE_IDLE,STATE_WAIT_ACK,STATE_RETRY
} tx_state_t;void network_task(void *pvParameters) {static tx_state_t state = STATE_IDLE;static uint8_t retry_count = 0;static app_packet_t pending_pkt;while(1) {switch(state) {case STATE_IDLE:if(xQueueReceive(tx_queue, &pending_pkt, 0)) {send_packet(pending_pkt);state = STATE_WAIT_ACK;retry_count = 0;}break;case STATE_WAIT_ACK:if(receive_ack(pending_pkt.seq)) {state = STATE_IDLE;} else if(retry_count < MAX_RETRY) {state = STATE_RETRY;} else {log_error("Packet lost: %d", pending_pkt.seq);state = STATE_IDLE;}break;case STATE_RETRY:send_packet(pending_pkt);retry_count++;state = STATE_WAIT_ACK;break;}vTaskDelay(pdMS_TO_TICKS(10));}
}
4.2 数据压缩算法对比
| 算法 | 压缩率 | RAM占用 | 适用场景 |
|---|---|---|---|
| LZ4 | 2:1 | 2KB | 实时性要求高 |
| Zlib | 3:1 | 16KB | 存储受限环境 |
| Huffman | 1.5:1 | 1KB | 小数据包优化 |
五、功耗优化实战
5.1 功耗测量对比

(横轴:工作模式,纵轴:电流/mA)
5.2 电源管理代码实现
void enter_stop_mode(void) {// 关闭外设时钟__HAL_RCC_GPIOA_CLK_DISABLE();__HAL_RCC_SPI1_CLK_DISABLE();// 配置唤醒源HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);// 进入STOP模式HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);// 唤醒后初始化SystemClock_Config();MX_GPIO_Init();
}
六、项目验证与效果展示
6.1 测试数据记录表
| 测试项 | 指标要求 | 实测结果 |
|---|---|---|
| 待机功耗 | <50uA | 32uA |
| 数据上报成功率 | >99.5% | 99.8% |
| 温度测量精度 | ±0.5℃ | ±0.3℃ |
七、常见问题解答
Q1:如何选择无线通信模块?
A:根据传输距离和功耗需求选择:
- 短距离(<100m):ESP8266
- 中距离(<1km):LoRa
- 广域覆盖:NB-IoT
Q2:传感器数据异常如何调试?
A:按以下步骤排查:
- 检查I2C波形是否正常
- 验证供电电压稳定性
- 添加软件滤波算法
对本项目感兴趣可点赞收藏和关注,谢谢支持!
后续资源下载
- 完整工程代码
- 硬件原理图
- 视频演示
- 开发工具链:
- STM32CubeIDE
- VSCode + PlatformIO
相关文章:
STM32物联网终端实战:从传感器到云端的低功耗设计
STM32物联网终端实战:从传感器到云端的低功耗设计 一、项目背景与挑战分析 1.1 物联网终端典型需求 (示意图说明:传感器数据采集 → 本地处理 → 无线传输 → 云端存储) 在工业物联网场景中,终端设备需满足以下核心需…...
SQLite Select 语句详解
SQLite Select 语句详解 SQLite 是一个轻量级的数据库管理系统,以其简洁的设计和高效的性能被广泛应用于各种场景。在 SQLite 中,SELECT 语句是用于查询数据库中的数据的命令。本文将详细介绍 SQLite 的 SELECT 语句,包括其基本语法、常用功…...
[实现Rpc] 客户端划分 | 框架设计 | common类的实现
目录 3. 客户端模块划分 3.1 Network模块 3.2 Protocol模块 3.3 Dispatcher模块 3.4 Requestor模块 3.5 RpcCaller模块 3.6 Publish-Subscribe模块 3.7 Registry-Discovery模块 3.8 Client模块 4. 框架设计 4.1 抽象层 4.2 具象层 4.3 业务层 ⭕4.4 整体设计框架…...
【SFRA】笔记
GK_SFRA_INJECT(x) SFRA小信号注入函数,向控制环路注入一个小信号。如下图所示,当前程序,小信号注入是在固定占空比的基础叠加小信号,得到新的占空比,使用该占空比控制环路。 1.2 GK_SFRA_COLLECT(x, y) SFRA数据收集函数,将小信号注入环路后,该函数收集环路的数据,以…...
基于Python的Diango旅游数据分析推荐系统设计与实现+毕业论文(15000字)
基于Python的Diango旅游数据分析推荐系系统设计与实现毕业论文指导搭建视频,带爬虫 配套论文1w5字 可定制到某个省份,加40 基于用户的协同过滤算法 有后台管理 2w多数据集 可配套指导搭建视频,加20 旅游数据分析推荐系统采用了Python语…...
为什么docker 容器有的没有PORTS
容器的 PORTS 列没有显示端口映射信息,而 sonatype/nexus3:3.77.1 容器有显示,可能是由以下几个原因导致的: 1. --networkhost 参数的使用 正如前面提到的,当你使用 --networkhost 参数运行容器时,容器会直接使用宿主…...
国自然青年基金|针对罕见神经上皮肿瘤的小样本影像深度数据挖掘关键技术研究|基金申请·25-02-15
小罗碎碎念 今天和大家分享一个国自然青年基金项目,执行年限为2021.01~2023.12,直接费用为24万元。 该项目聚焦罕见神经上皮肿瘤小样本影像深度数据挖掘技术,致力于攻克小样本数据和临床经验缺乏带来的难题。项目围绕影像规范化、…...
《解锁自然语言处理:让公众正确拥抱AI语言魔法》
在当今数字化浪潮中,自然语言处理(NLP)技术作为人工智能领域的璀璨明珠,正以惊人的速度融入我们的生活。从智能语音助手到智能客服,从机器翻译到内容创作辅助,NLP技术无处不在。然而,如同任何强…...
算法刷题-哈希表的总结
什么时候用数组、什么时候用map呢? 经常会混淆。 混淆1:例如有时候题目可能要求在一大堆元素里找目标元素,要求不能利用用过的字母,这就会让我想到只包含一个键值的set或者是map,但实际上忽略了字母(限定大…...
单细胞转录组画小提琴VlnPlot只显示需要类型细胞
探序基因肿瘤研究院 整理 在R语言中,单细胞转录组数据画小提琴图中,我们如果想只展示出需要的特定细胞类型,可以把这需要展示的细胞类型单独构建成一个Seurat对象,再画图。 例如我们在Seurat对象中的meta.data表格中,…...
Linux 网络安全技巧
网络安全是一个非常重要的课题,基本上你运行的服务后台越多,你就可能打开更多的安全漏洞.如果配置的恰当的话,Linux本身是非常安全可靠的,假使在Linux系统中有某个安全缺陷,由于Linux的源码是开放的,有成千上万的志愿者会立刻发现并修补它。本文旨在介绍用来增强你的…...
泰山派RK3566移植QT,动鼠标时出现屏幕闪烁
总结: 交叉编译到 泰山派rk3566跑调海康摄像头的qt应用程序失败了。 X11无效窗口。 移植QT注意 屏幕分辨率不要改。改了执行QT的时候,framebuffer识别不出设备。 命令行安装QT-Creator sudo install 类似的指令安装Qt-Creator时,可能找不到编…...
Windows桌面系统管理7:国产操作系统与Linux操作系统
Windows桌面系统管理0:总目录-CSDN博客 Windows桌面系统管理1:计算机硬件组成及组装-CSDN博客 Windows桌面系统管理2:VMware Workstation使用和管理-CSDN博客 Windows桌面系统管理3:Windows 10操作系统部署与使用-CSDN博客 Wi…...
百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用
在私有云环境中成功部署 DeepSeek 满血版并实现性能调优,并不是一件容易的事情。选择合适的 GPU 配置、安装相应的环境、成功部署上线业务、加速推理任务加速、支撑多用户并发 …… 完成业务测试,成功融入生产业务中。 为了帮助企业快速实现 DeepSeek 服…...
解锁 AIoT 无限可能,乐鑫邀您共赴 Embedded World 2025
2025 年 3 月 11-13 日,全球规模最大的嵌入式展览会——Embedded World 2025 将在德国纽伦堡盛大开幕。作为物联网和嵌入式技术领域的领先企业,乐鑫信息科技 (688018.SH) 将展示在 AI LLM、HMI、双频 Wi-Fi 6、低功耗 MCU 和 Matter 等领域的最新技术及解…...
LlamaFactory可视化模型微调-Deepseek模型微调+CUDA Toolkit+cuDNN安装
LlamaFactory https://llamafactory.readthedocs.io/zh-cn/latest/ 安装 必须保证版本匹配,否则到训练时,找不到gpu cuda。 否则需要重装。下面图片仅供参考。因为cuda12.8装了没法用,重新搞12.6 cudacudnnpytorch12.69.612.6最新…...
【GPT】从GPT1到GPT3
every blog every motto: Although the world is full of suffering, it is full also of the overcoming of it 0. 前言 从GPT1 到GPT3 1. GPT1 论文: https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/lan…...
openGauss 3.0 数据库在线实训课程18:学习视图管理
前提 我正在参加21天养成好习惯| 第二届openGauss每日一练活动 课程详见:openGauss 3.0.0数据库在线实训课程 学习目标 掌握openGauss视图的管理:创建视图、删除视图、查询视图的信息、修改视图的信息。 课程作业 1.创建表,创建普通视图…...
基于flask+vue的租房信息可视化系统
✔️本项目利用 python 网络爬虫抓取某租房网站的租房信息,完成数据清洗和结构化,存储到数据库中,搭建web系统对各个市区的租金、房源信息进行展示,根据各种条件对租金进行预测。 1、数据概览 将爬取到的数据进行展示ÿ…...
手写简易RPC(实践版)
首先了解rpc rpc-远程过程调用,openFeign,Dubbo都可以算作rpc,以微服务来具体说明,就是在本地不需要去发送请求,通过rpc框架,像调用本地方法一样调用其他服务的方法,本质上还是要经过网络&…...
mysql学习笔记-多版本并发控制
1、什么是ReadView 在 MVCC机制中,多个事务对同一个行记录进行更新会产生多个历史快照,这些历史快照保存在 Undo Log里。如果一个事务想要查询这个行记录,需要读取哪个版本的行记录呢?这时就需要用到 ReadView 了,它帮我们解决了…...
问题记录汇总
记录一些问题 如何分析错误帧问题-CSDN博客...
算法日记20:SC72最小生成树(prim朴素算法)
一、题目: 二、题解 2.1:朴素prim的步骤解析 O ( n 2 ) O(n^2) O(n2)(n<1e3) 0、假设,我们现在有这样一个有权图 1、我们随便找一个点,作为起点开始构建最小生成树(一般是1号),并且存入intree[]状态数组中…...
requests.exceptions.JSONDecodeError: Expecting value: line 2 column 1 (char 1)
requests.exceptions.JSONDecodeError: Expecting value: line 2 column 1 (char requests.exceptions.JSONDecodeError 是 Python 中使用 requests 库进行 HTTP 请求时,当期望返回的响应体为 JSON 格式,但实际响应体不符合 JSON 格式时出现的错误。这个…...
Redis7——基础篇(五)
前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 基础篇: Redis(一)Redis(二)Redis(三)Redis&#x…...
spring boot知识点1
1.什么是spring boot spring boot是spring框架的子项目,主要特点是自动配置,以及内置的tomcat服务器,适合快速开发web与微服务架构 2.spring boot和spring cloud俩者之间的联系 spring boot可单独运行, spring cloud则是用于多…...
从零搭建微服务项目Base(第7章——微服务网关模块基础实现)
前言: 在前面6章的学习中已经完成了服务间的调用实现,即各微服务通过nacos或eureka服务器完成服务的注册,并从nacos中拉取配置实现热更新。当某个服务接口需要调用其他服务时,通过feign定义接口,并通过注解配置服务名…...
pdf转换成word在线 简单好用 支持批量转换 效率高 100%还原
pdf转换成word在线 简单好用 支持批量转换 效率高 100%还原 在数字化办公的浪潮中,文档格式转换常常让人头疼不已,尤其是 PDF 转 Word 的需求极为常见。PDF 格式虽然方便阅读和传输,但难以编辑,而 Word 格式却能灵活地进行内容修…...
嵌入式音视频开发(二)ffmpeg音视频同步
系列文章目录 嵌入式音视频开发(零)移植ffmpeg及推流测试 嵌入式音视频开发(一)ffmpeg框架及内核解析 嵌入式音视频开发(二)ffmpeg音视频同步 嵌入式音视频开发(三)直播协议及编码器…...
SpringBoot速成概括
视频:黑马程序员SpringBoot3Vue3全套视频教程,springbootvue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili 图示:...
