news 2026/6/20 22:04:58

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32F103C8 + FreeRTOS + ESP32 学习记录(一):从零搭建联网天气时钟站(硬件篇)

STM32F103C8 + FreeRTOS + ESP32 学习记录(一):项目概述与硬件准备

学习时间:2026年6月18日
学习阶段:项目初识与硬件准备

一、项目背景与目标

最近在 CSDN 上看到一个非常有意思的嵌入式项目——基于 STM32F103C8T6 + FreeRTOS + ESP32 的袖珍联网天气时钟站。这个项目将多个模块集成在一块小小的开发板上,实现了网络校时、天气获取、温度监测和彩色显示等功能,代码量控制得相当精简(仅 19.9KB Flash 占用),非常适合作为学习 FreeRTOS 和嵌入式系统设计的实战案例。

我的学习目标

  1. 理解 FreeRTOS 在多任务嵌入式系统中的应用- 学习如何用 FreeRTOS 管理多个任务
  2. 掌握 STM32 与 ESP32 的串口通信(AT 指令)- 实现网络连接功能
  3. 学习在资源受限环境下(20KB RAM)进行系统设计- 体验嵌入式开发的资源优化
  4. 完成整个项目的复现与功能验证- 从硬件到软件,完整走一遍开发流程

为什么选择这个项目?

  • 综合性高:涵盖了传感器、显示、网络、RTOS 等多个知识点
  • 资源适中:STM32F103C8T6 资源有限但够用,适合学习优化
  • 实用性强:最终能做出一个可用的天气时钟站
  • 社区支持好:相关模块都有成熟的驱动和教程

目录

  • 一、项目背景与目标
  • 二、硬件清单与模块介绍
    • 2.1 STM32F103C8T6 (Blue Pill)
    • 2.2 ESP-01S WiFi模块
    • 2.3 SSD1306 OLED 显示屏
    • 2.4 MPU6050 六轴传感器模块
  • 三、开发环境搭建
    • 3.1 软件工具准备
    • 3.2 硬件连接示意图(含MPU6050)
    • 3.3 创建基础工程
  • 四、MPU6050 陀螺仪模块介绍与代码(小白学习路线)
    • 4.1 MPU6050 是什么?能做什么?
    • 4.2 硬件连接确认
    • 4.3 软件准备:获取驱动库
    • 4.4 基础代码:初始化与原始数据读取
    • 4.5 下一步:数据可视化与姿态解算
  • 四、FreeRTOS 任务规划
    • 4.1 任务间通信
  • 五、下一步计划

最近在 CSDN 上看到一个非常有意思的嵌入式项目——基于 STM32F103C8T6 + FreeRTOS + ESP32 的袖珍联网天气时钟站。这个项目将多个模块集成在一块小小的开发板上,实现了网络校时、天气获取、温度监测和彩色显示等功能,代码量控制得相当精简(仅 19.9KB Flash 占用),非常适合作为学习 FreeRTOS 和嵌入式系统设计的实战案例。

我的学习目标

  1. 理解 FreeRTOS 在多任务嵌入式系统中的应用
  2. 掌握 STM32 与 ESP32 的串口通信(AT 指令)
  3. 学习在资源受限环境下(20KB RAM)进行系统设计
  4. 完成整个项目的复现与功能验证

二、硬件清单与模块介绍

📋 硬件清单总览

本项目使用了以下核心硬件模块,总成本约 100-150 元,非常适合学生和爱好者:

模块型号/规格数量主要功能参考价格
主控MCUSTM32F103C8T6 (Blue Pill)1系统主控,运行FreeRTOS,处理传感器数据¥15-25
Wi-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-M3,72MHz主频
  • 存储:64KB Flash,20KB 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),可硬件解算姿态角
  • 特点:集成度高,数据稳定,广泛用于平衡小车、无人机、手机等
  • 学习重点
    1. I2C通信原理
    2. 原始数据读取与转换
    3. DMP库使用(简化姿态解算)
    4. 姿态角(Roll/Pitch/Yaw)理解

🛠️ 其他必备工具

  1. USB转TTL串口模块(CH340/CP2102):用于程序下载和串口调试
  2. ST-Link V2 下载器:调试和下载程序到 STM32
  3. 万用表:检查电路连接,避免短路
  4. 面包板电源模块:提供稳定的 3.3V/5V 电源

三、开发环境搭建

3.1 软件工具准备(新手必看)

🖥️ 开发软件
  1. Keil MDK-ARMSTM32CubeIDE(二选一)

    • Keil:传统,稳定,但需要注册(有社区版)
    • STM32CubeIDE:免费,集成 CubeMX,推荐新手使用
    • 作用:STM32程序编写、编译、调试
  2. STM32CubeMX(强烈推荐)

    • 图形化配置 STM32 引脚和功能
    • 自动生成初始化代码
    • 集成 FreeRTOS 配置
  3. 串口调试助手

    • 推荐:XCOM、SSCOM、Putty
    • 作用:查看 ESP8266 AT 指令交互,调试串口通信
  4. 网络调试工具

    • Postmancurl:测试天气 API 接口
    • 网络调试助手:测试 TCP/UDP 通信
📚 学习资源
  1. FreeRTOS 源码

    • 官网下载:https://www.freertos.org/
    • 或通过 STM32CubeMX 直接配置生成(更简单)
  2. MPU6050 驱动库

    • GitHub 搜索 “MPU6050” 或 “i2cdevlib”
    • 推荐使用带 DMP 的版本:MPU6050_6Axis_MotionApps20
  3. OLED 驱动库

    • 搜索 “SSD1306 I2C STM32”
    • 很多现成的驱动可用
🔧 环境搭建步骤(新手跟做)
  1. 安装 STM32CubeIDE(约 1GB,需要耐心等待)
  2. 安装 STM32CubeMX(如果单独使用)
  3. 准备串口调试工具
  4. 下载 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)│ └─────────────────────────────────────────────────────┘
🔌 连接要点说明(新手必读)
  1. I2C 总线共享问题

    • OLED (SSD1306) 和 MPU6050 理论上可以共用一组 I2C 引脚 (PB6/PB7)
    • 地址不同(OLED通常0x78,MPU6050默认0x68)
    • 新手建议:分开连接,避免地址冲突,调试更简单
  2. 电源稳定是关键

    • 所有模块共用 3.3V 和 GND
    • ESP-01S 功耗较大,必须在其 VCC 引脚附近并联100μF 电解电容稳压
    • 建议使用面包板电源模块,不要直接从开发板取电
  3. MPU6050 特殊引脚

    • AD0 引脚:接地时 I2C 地址为 0x68,接 3.3V 时地址变为 0x69
    • 新手建议:直接接地,使用默认地址 0x68
  4. 防接反技巧

    • 红色线接 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;xTimeQueue=xQueueCreate(5,sizeof(TimeData_t));// 示例:创建显示刷新信号量SemaphoreHandle_t xDisplaySemaphore;xDisplaySemaphore=xSemaphoreCreateBinary();

五、下一步计划

本篇(第一部分)主要完成项目概述和硬件准备。在接下来的第二部分中,我将重点介绍:

  1. FreeRTOS 任务具体实现
  2. ESP8266 AT 指令通信详解
  3. 网络时间获取与天气 API 调用
  4. OLED 显示驱动编写

第三部分将完成:

  1. 系统整合与调试
  2. 功耗优化与稳定性测试
  3. 项目总结与扩展建议

学习心得:通过这个项目的硬件准备阶段,我深刻体会到嵌入式系统设计需要综合考虑硬件资源、通信协议和实时性要求。STM32F103C8T6虽然资源有限,但配合FreeRTOS可以很好地管理多个任务,为后续的软件实现打下坚实基础。

遇到的问题

  1. ESP-01S 的 3.3V 供电要稳定,否则容易掉线
  2. OLED的I2C地址需要确认(通常0x78或0x7A)

解决方案

  1. 给ESP-01S单独增加100μF电容稳压
  2. 通过I2C扫描工具确认OLED地址

提示:在开始编程前,务必用万用表检查所有电源和地线连接,避免短路烧毁芯片。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 22:04:17

Adapter Framework 架构深读,SAP PI 连接外部世界的 Java 中枢

做 SAP PI 或 PO 集成项目时,很多问题表面上看是某个 Adapter 的参数没配对,某个 Communication Channel 起不来,某条消息卡在队列里,或者某个自定义 Module 抛了异常。真正追下去,往往会落到同一个核心位置,Adapter Framework。它不只是一个运行时组件,更像 SAP PI 在 …

作者头像 李华
网站建设 2026/6/20 21:52:49

完整老旧设备兼容指南:安全高效的系统升级方案

完整老旧设备兼容指南:安全高效的系统升级方案 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为你的旧Mac无法升级到最新系统而烦恼吗&#…

作者头像 李华
网站建设 2026/6/20 21:44:36

全域视联无断点 三维数智重构智慧港口管控新生态技术解析方案

一、方案总览1.1 行业背景与现存痛点当前国内枢纽港口普遍进入自动化、数字化转型深水区,岸桥、堆场、闸口、航道、集疏运路网分区域独立建设监控、TOS 调度、安防、设备运维多套系统,形成四大行业共性瓶颈:视频感知割裂,全域存在…

作者头像 李华
网站建设 2026/6/20 21:43:54

云原生时代后端技术栈的演进与趋势

在数字技术迅猛发展的浪潮中,云原生(Cloud Native)正以前所未有的速度重塑着后端技术的版图。从传统的单体架构到微服务,再到如今的云原生架构,每一次变革都伴随着技术栈的深刻演进与趋势的重新定义。云原生时代&#…

作者头像 李华
网站建设 2026/6/20 21:37:18

GPT-4o架构解析:低延迟语音与原生多模态统一建模

1. 这不是又一个“升级版”,而是一次交互范式的重置GPT-4o不是GPT-4的简单迭代,它是一次从底层架构到人机交互逻辑的系统性重构。我盯着发布会视频逐帧回放了三遍,又在自家服务器上搭了测试环境反复验证,确认它真正颠覆的不是参数…

作者头像 李华
网站建设 2026/6/20 21:36:47

百度网盘解析工具终极指南:3步获取高速下载链接

百度网盘解析工具终极指南:3步获取高速下载链接 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的下载速度而烦恼吗?百度网盘解析工具ba…

作者头像 李华