STM32F103C8 + FreeRTOS + ESP32 学习记录(一):从零搭建联网天气时钟站(硬件篇)

📅 2026/6/20 22:05:16
STM32F103C8 + FreeRTOS + ESP32 学习记录(一):从零搭建联网天气时钟站(硬件篇)
STM32F103C8 FreeRTOS ESP32 学习记录一项目概述与硬件准备学习时间2026年6月18日学习阶段项目初识与硬件准备一、项目背景与目标最近在 CSDN 上看到一个非常有意思的嵌入式项目——基于 STM32F103C8T6 FreeRTOS ESP32 的袖珍联网天气时钟站。这个项目将多个模块集成在一块小小的开发板上实现了网络校时、天气获取、温度监测和彩色显示等功能代码量控制得相当精简仅 19.9KB Flash 占用非常适合作为学习 FreeRTOS 和嵌入式系统设计的实战案例。我的学习目标理解 FreeRTOS 在多任务嵌入式系统中的应用- 学习如何用 FreeRTOS 管理多个任务掌握 STM32 与 ESP32 的串口通信AT 指令- 实现网络连接功能学习在资源受限环境下20KB RAM进行系统设计- 体验嵌入式开发的资源优化完成整个项目的复现与功能验证- 从硬件到软件完整走一遍开发流程为什么选择这个项目综合性高涵盖了传感器、显示、网络、RTOS 等多个知识点资源适中STM32F103C8T6 资源有限但够用适合学习优化实用性强最终能做出一个可用的天气时钟站社区支持好相关模块都有成熟的驱动和教程目录一、项目背景与目标二、硬件清单与模块介绍2.1 STM32F103C8T6 (Blue Pill)2.2 ESP-01S WiFi模块2.3 SSD1306 OLED 显示屏2.4 MPU6050 六轴传感器模块三、开发环境搭建3.1 软件工具准备3.2 硬件连接示意图含MPU60503.3 创建基础工程四、MPU6050 陀螺仪模块介绍与代码小白学习路线4.1 MPU6050 是什么能做什么4.2 硬件连接确认4.3 软件准备获取驱动库4.4 基础代码初始化与原始数据读取4.5 下一步数据可视化与姿态解算四、FreeRTOS 任务规划4.1 任务间通信五、下一步计划最近在 CSDN 上看到一个非常有意思的嵌入式项目——基于 STM32F103C8T6 FreeRTOS ESP32 的袖珍联网天气时钟站。这个项目将多个模块集成在一块小小的开发板上实现了网络校时、天气获取、温度监测和彩色显示等功能代码量控制得相当精简仅 19.9KB Flash 占用非常适合作为学习 FreeRTOS 和嵌入式系统设计的实战案例。我的学习目标理解 FreeRTOS 在多任务嵌入式系统中的应用掌握 STM32 与 ESP32 的串口通信AT 指令学习在资源受限环境下20KB RAM进行系统设计完成整个项目的复现与功能验证二、硬件清单与模块介绍 硬件清单总览本项目使用了以下核心硬件模块总成本约 100-150 元非常适合学生和爱好者模块型号/规格数量主要功能参考价格主控MCUSTM32F103C8T6 (Blue Pill)1系统主控运行FreeRTOS处理传感器数据¥15-25Wi-Fi 模块ESP-01S (ESP8266)1网络连接获取天气和时间¥8-12显示屏0.96 寸 OLED (SSD1306, I2C)1显示时间、天气、传感器数据¥10-15陀螺仪与加速度计MPU6050 (I2C)1测量三轴加速度、角速度并自带温度传感器¥8-12实时时钟DS1302 (可选)1断电时间保持¥3-5蜂鸣器有源蜂鸣器1整点报时、报警提示¥1-2按键轻触开关3模式切换、设置调整¥1-2电源USB 5V 或 3.7V锂电池1系统供电¥5-10杜邦线母对母、公对母若干连接各模块¥5-10面包板400孔或830孔1方便接线调试¥5-8采购建议可以在淘宝、拼多多或立创商城一次性购买整套搜索STM32F103C8T6开发套件或分别购买。2.1 STM32F103C8T6 (Blue Pill) - 大脑核心ARM Cortex-M372MHz主频存储64KB Flash20KB RAM够用但需要优化外设USART、I2C、SPI、ADC等特点性价比极高社区资源丰富适合学习 FreeRTOS 和传感器驱动新手提示建议购买带 USB 转串口芯片的版本方便调试2.2 ESP-01S WiFi模块 - 网络接口通信方式串口 AT 指令简单易用协议支持 TCP/IP、HTTP作用连接 WiFi从网络API获取天气和时间数据供电注意需要稳定的 3.3V 电源建议在 VCC 和 GND 之间并联 100μF 电容2.3 SSD1306 OLED 显示屏 - 眼睛接口I²C (SCL/SDA)只需要 2 根数据线 电源线分辨率128×64 像素单色但显示效果清晰显示内容时间、日期、天气图标、温度、传感器姿态I2C地址通常为 0x78 或 0x7A可用 I2C 扫描工具确认2.4 MPU6050 六轴传感器模块 - 姿态感知接口I²C (SCL/SDA)兼容3.3V/5V功能三轴加速度计 (±2g/±4g/±8g/±16g)检测倾斜、震动三轴陀螺仪 (±250°/s ~ ±2000°/s)检测旋转内置温度传感器测量芯片温度内置数字运动处理器 (DMP)可硬件解算姿态角特点集成度高数据稳定广泛用于平衡小车、无人机、手机等学习重点I2C通信原理原始数据读取与转换DMP库使用简化姿态解算姿态角Roll/Pitch/Yaw理解️ 其他必备工具USB转TTL串口模块CH340/CP2102用于程序下载和串口调试ST-Link V2 下载器调试和下载程序到 STM32万用表检查电路连接避免短路面包板电源模块提供稳定的 3.3V/5V 电源三、开发环境搭建3.1 软件工具准备新手必看️ 开发软件Keil MDK-ARM或STM32CubeIDE二选一Keil传统稳定但需要注册有社区版STM32CubeIDE免费集成 CubeMX推荐新手使用作用STM32程序编写、编译、调试STM32CubeMX强烈推荐图形化配置 STM32 引脚和功能自动生成初始化代码集成 FreeRTOS 配置串口调试助手推荐XCOM、SSCOM、Putty作用查看 ESP8266 AT 指令交互调试串口通信网络调试工具Postman或curl测试天气 API 接口网络调试助手测试 TCP/UDP 通信 学习资源FreeRTOS 源码官网下载https://www.freertos.org/或通过 STM32CubeMX 直接配置生成更简单MPU6050 驱动库GitHub 搜索 “MPU6050” 或 “i2cdevlib”推荐使用带 DMP 的版本MPU6050_6Axis_MotionApps20OLED 驱动库搜索 “SSD1306 I2C STM32”很多现成的驱动可用 环境搭建步骤新手跟做安装 STM32CubeIDE约 1GB需要耐心等待安装 STM32CubeMX如果单独使用准备串口调试工具下载 FreeRTOS 和传感器驱动库⏱️预计时间完整环境搭建约 1-2 小时取决于网速。3.2 硬件连接示意图含MPU6050以下是核心模块的连接方式引脚以 Blue Pill 为例接线时请务必断电操作STM32F103C8T6 (Blue Pill) 引脚分配 ┌─────────────────────────────────────────────────────┐ │ STM32F103C8T6 │ ├─────────────────────────────────────────────────────┤ │ 模块 引脚 功能 备注 │ ├─────────────────────────────────────────────────────┤ │ ESP-01S PA2 (TX) → RX 串口通信 │ │ (WiFi) PA3 (RX) ← TX │ │ 3.3V → VCC 电源 │ │ GND → GND 地线 │ ├─────────────────────────────────────────────────────┤ │ SSD1306 PB6 → SCL I2C时钟线 │ │ (OLED) PB7 → SDA I2C数据线 │ │ 3.3V → VCC 电源 │ │ GND → GND 地线 │ ├─────────────────────────────────────────────────────┤ │ MPU6050 PB10 → SCL I2C时钟线 │ │ (六轴传感器) PB11 → SDA I2C数据线 │ │ 3.3V → VCC 电源 │ │ GND → GND 地线 │ │ - → AD0 接地(地址0x68)│ └─────────────────────────────────────────────────────┘ 连接要点说明新手必读I2C 总线共享问题OLED (SSD1306) 和 MPU6050 理论上可以共用一组 I2C 引脚 (PB6/PB7)但地址不同OLED通常0x78MPU6050默认0x68新手建议分开连接避免地址冲突调试更简单电源稳定是关键所有模块共用 3.3V 和 GNDESP-01S 功耗较大必须在其 VCC 引脚附近并联100μF 电解电容稳压建议使用面包板电源模块不要直接从开发板取电MPU6050 特殊引脚AD0 引脚接地时 I2C 地址为 0x68接 3.3V 时地址变为 0x69新手建议直接接地使用默认地址 0x68防接反技巧红色线接 VCC黑色线接 GND统一颜色接线前用万用表蜂鸣档检查通断先接电源线再接信号线 接线检查清单接完线逐项打勾STM32 供电正常USB 灯亮ESP-01S VCC-GND 之间有 100μF 电容所有 GND 连接到一起所有 3.3V 连接到一起MPU6050 AD0 引脚接地没有短路万用表检查⚠️安全提示接线时务必断电接完检查无误再上电。四、FreeRTOS 任务规划根据项目需求初步规划以下任务任务名称优先级堆栈大小功能描述Time_Task3256时间获取与显示Weather_Task3512天气数据获取Sensor_Task2192温度采集与显示Display_Task1384OLED刷新管理Key_Task4128按键检测与处理Buzzer_Task5128蜂鸣器控制4.1 任务间通信队列用于任务间传递时间、天气数据信号量用于显示刷新同步事件标志组用于系统状态通知// 示例创建时间数据队列QueueHandle_t xTimeQueue;xTimeQueuexQueueCreate(5,sizeof(TimeData_t));// 示例创建显示刷新信号量SemaphoreHandle_t xDisplaySemaphore;xDisplaySemaphorexSemaphoreCreateBinary();五、下一步计划本篇第一部分主要完成项目概述和硬件准备。在接下来的第二部分中我将重点介绍FreeRTOS 任务具体实现ESP8266 AT 指令通信详解网络时间获取与天气 API 调用OLED 显示驱动编写第三部分将完成系统整合与调试功耗优化与稳定性测试项目总结与扩展建议学习心得通过这个项目的硬件准备阶段我深刻体会到嵌入式系统设计需要综合考虑硬件资源、通信协议和实时性要求。STM32F103C8T6虽然资源有限但配合FreeRTOS可以很好地管理多个任务为后续的软件实现打下坚实基础。遇到的问题ESP-01S 的 3.3V 供电要稳定否则容易掉线OLED的I2C地址需要确认通常0x78或0x7A解决方案给ESP-01S单独增加100μF电容稳压通过I2C扫描工具确认OLED地址提示在开始编程前务必用万用表检查所有电源和地线连接避免短路烧毁芯片。