1. 项目概述:基于FreeRTOS的智能天气站设计
作为一个嵌入式开发爱好者,我一直想打造一个既能监测室内环境又能获取室外天气的智能设备。这个基于STM32和FreeRTOS的智能天气站项目,完美实现了这个想法。它不仅能够实时采集室内温湿度数据,还能通过WiFi模块获取网络天气信息,最终在OLED屏幕上直观展示。
这个项目的核心价值在于:
- 实时性:采用FreeRTOS实时操作系统,确保数据采集和显示的及时性
- 低成本:主控采用性价比极高的STM32F103C8T6(俗称"蓝莓派"),整套硬件成本控制在百元以内
- 可扩展性:模块化设计方便后续添加更多传感器(如PM2.5、CO2检测)
- 实用性:室内外天气数据对比,为日常生活提供参考
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计与选型解析
2.1 核心硬件组件清单
我选择的硬件配置经过多次迭代优化,在性能和成本之间取得了良好平衡:
| 模块类型 | 具体型号 | 关键参数 | 选型理由 |
|---|---|---|---|
| 主控MCU | STM32F103C8T6 | Cortex-M3内核,72MHz主频 | 性价比高,外设丰富,社区资源充足 |
| WiFi模块 | ESP8266-01S | 支持802.11 b/g/n | 价格低廉,AT指令稳定,功耗适中 |
| 环境传感器 | BMP280 | 温度±0.5℃精度,气压±1hPa精度 | 同时测量温度和气压,I2C接口占用资源少 |
| 显示屏 | 0.96寸OLED | 128x64分辨率,I2C接口 | 显示内容丰富,低功耗,无需背光 |
| 调试接口 | CH340G USB转TTL | 支持3.3V/5V电平 | 方便调试和固件更新 |
2.2 硬件连接要点
在实际焊接和连接时,有几个关键点需要注意:
-
电源管理:
- STM32和ESP8266都使用3.3V供电
- 建议使用AMS1117-3.3稳压芯片,确保供电稳定
- 在电源输入端加入100μF电解电容和0.1μF陶瓷电容滤波
-
I2C总线布局:
- BMP280和OLED共用I2C总线(PB6-SCL,PB7-SDA)
- 总线需接4.7kΩ上拉电阻
- 布线尽量短,避免信号干扰
-
UART连接:
- ESP8266连接USART2(PA2-TX,PA3-RX)
- CH340连接USART1(PA9-TX,PA10-RX)
- 注意交叉连接(MCU的TX接模块的RX)
实际调试中发现:ESP8266-01S的CH_PD引脚必须上拉至3.3V,否则模块无法正常工作。这是新手容易忽略的关键点。
3. 软件架构设计与实现
3.1 FreeRTOS任务规划
系统采用多任务架构,各任务分工明确:
| 任务名称 | 优先级 | 栈大小 | 核心功能 | 关键技术点
