FastBond4挑战部分-基于XIAO ESP32S3与MPU6050的蓝牙姿态交互系统设计与实现
该项目使用了KiCad软件、Arduino语言、XIAO ESP32S3开发板和MPU6050姿态传感器,实现了一个姿态感知与手机端实时显示系统的的设计,它的主要功能为:采集硬件姿态变化数据,经过姿态解算后通过蓝牙发送到手机端,并在手机端实时显示姿态变化效果。
标签
mpu6050
FastBond活动
Seeed XIAO
42漫游者
更新2026-04-21
55
KiCad文件
全屏

一、背景介绍

随着智能硬件和人机交互技术的发展,基于姿态感知的交互方式越来越常见,例如体感控制、动作识别、空间姿态演示、移动端可视化交互等。这类系统通常需要完成“传感器采集 - 数据处理 - 无线传输 - 图形显示”的完整闭环,既涉及硬件电路设计,也涉及嵌入式程序开发和上位机显示设计,因此具有较强的综合实践价值。

在实际应用中,很多姿态传感项目存在一些不足。例如,有的方案只能在串口上输出原始数据,缺乏直观展示效果;有的方案虽然能够显示姿态信息,但硬件结构较为松散,主要依赖杜邦线连接,不利于长期使用和作品展示;还有一些方案在无线交互和移动端可视化方面不够完善,难以形成完整的演示体验。

针对上述问题,我设计并实现了一个基于 XIAO ESP32S3 与 MPU6050 的姿态交互项目 MotionCube。该项目利用 MPU6050 采集姿态变化信息,通过 XIAO ESP32S3 对数据进行处理后,经蓝牙发送到手机端,实现硬件姿态变化与手机画面同步变化的效果。同时,我还完成了原理图和 PCB 底板设计,使整个项目从“功能验证”进一步提升到“可展示、可扩展”的完整作品形态。


二、项目介绍

本项目名称为 MotionCube 姿态交互系统
项目的核心思路是:当用户转动带有 MPU6050 传感器的硬件模块时,系统实时采集加速度和角速度数据,并通过姿态解算算法得到姿态角信息,再由 XIAO ESP32S3 通过 BLE 将数据发送到手机端,最终在手机 App 中实时显示姿态变化效果。

项目完成后实现了以下几个主要功能:

  • 通过 MPU6050 实时获取姿态相关原始数据
  • 对加速度计和陀螺仪数据进行融合处理,得到稳定的姿态角
  • 通过 XIAO ESP32S3 的蓝牙功能向手机端发送数据
  • 在手机端实时显示硬件姿态变化效果
  • 通过按键实现姿态采集功能的运行时开关
  • 使用板载 LED 指示当前功能状态
  • 设计专用 PCB 底板,提高整体结构稳定性和展示完整度

本项目适合作为姿态感知、蓝牙交互、传感器应用和嵌入式软硬件联合设计的基础案例,也能够为后续的体感控制、空间交互和智能终端设计提供参考。


三、硬件设计

1. 硬件器件组成

本项目主要使用到以下硬件:

  • XIAO ESP32S3:作为主控芯片,负责传感器通信、姿态解算、蓝牙数据发送和按键状态处理
  • MPU6050:六轴传感器模块,内部集成三轴加速度计和三轴陀螺仪,用于采集姿态变化数据
  • 按键:用于控制姿态采集功能的开启与关闭
  • XIAO 板载 LED:用于显示当前姿态功能的运行状态
  • PCB 底板:用于安装和连接各模块,提高结构稳定性和作品完整度
  • 手机端 App:用于接收 BLE 数据并实时显示姿态变化效果

2. 方案框图

本项目的系统框图主要由五个部分组成:

  • 姿态采集模块:MPU6050
  • 主控处理模块:XIAO ESP32S3
  • 控制输入模块:按键
  • 状态显示模块:板载 LED
  • 移动端显示模块:手机 Appimage.png

整体数据流向为:
MPU6050 -> XIAO ESP32S3 -> BLE -> 手机 App

控制流为:
按键 -> XIAO ESP32S3 -> 功能开关/LED 状态变化

3. 硬件设计思路

硬件部分的设计重点是实现一个简洁可靠的姿态采集与显示系统。
MPU6050 与 XIAO ESP32S3 之间通过 I2C 总线连接,其中 SDA 和 SCL 分别连接到 XIAO 默认 I2C 引脚。电源部分由 XIAO 提供 3.3V 供电,保证传感器和主控工作在统一电压下。按键一端接入主控 IO 口,另一端接地,程序中使用内部上拉输入方式读取按键状态。板载 LED 则直接作为状态指示灯使用,无需额外增加外接 LED。

为了提高调试和展示的便利性,项目采用模块化思路设计 PCB,即 XIAO ESP32S3 和 MPU6050 模块通过母座安装在底板上。这样既便于首次打样调试,也方便后续更换模块和扩展接口。

4. 原理图设计

原理图主要分为以下几个部分:

  • XIAO ESP32S3 主控部分
  • MPU6050 传感器连接部分
  • 按键输入部分
  • 电源和地线连接部分

其中:

  • 3V3 -> MPU6050 VCC
  • GND -> MPU6050 GND
  • D4 -> SDA
  • D5 -> SCL
  • D1 -> 按键
  • 按键另一端 -> GND

由于程序中启用了 INPUT_PULLUP,因此按键无需外接上拉电阻,按下时输入电平为低。
此外,项目使用 XIAO 板载用户 LED 作为状态指示灯,因此无需在原理图中额外增加 LED 及限流电阻。

image.png

5. PCB 设计

PCB 使用 KiCad 进行设计,采用双层板结构。
在布局时,我主要考虑了以下几个因素:

  • XIAO ESP32S3 的 USB 接口需要朝向板边,方便下载程序和供电
  • MPU6050 模块要便于插拔,同时尽量靠近主控,以缩短 I2C 走线长度
  • 按键应布置在板边,便于手动操作
  • 模块间距不能过小,保证焊接和装配方便
  • 底层尽量铺地,提高供电与信号稳定性

PCB 设计完成后,整个系统由原来的模块连线实验状态,转变为更规整、更适合展示的硬件作品。

只打了一次板子“本次优先以功能实现和调试便利为主”。

image.png


四、软件设计

1. 软件总体思路

软件设计主要包括以下几个部分:

  • 串口和 I2C 初始化
  • MPU6050 初始化与数据读取
  • 姿态解算
  • BLE 服务配置与数据发送
  • 按键检测与状态切换
  • 手机端姿态显示

程序上电后,首先初始化串口、I2C 总线和 MPU6050,确认传感器能够正常通信;随后配置 BLE 服务和特征值,准备向手机端发送姿态数据;进入主循环后,程序周期性读取 MPU6050 原始数据,通过姿态融合算法计算 roll 和 pitch,并通过 BLE 通知发送给手机端;同时程序持续检测按键输入,用于控制姿态功能开关,并通过板载 LED 显示状态。

2. 姿态解算思路

MPU6050 可以同时提供加速度计和陀螺仪数据。
其中,加速度计可以用于估计静态倾角,但容易受到动态运动干扰;陀螺仪适合反映短时转动变化,但长时间积分容易漂移。为了解决这个问题,项目中采用了互补滤波方法,将加速度计和陀螺仪数据融合,获得更平稳的姿态角结果。

这样做的好处是:

  • 响应速度较快
  • 输出较稳定
  • 算法实现简单
  • 适合当前项目的演示需求

3. 蓝牙传输设计

在数据传输方面,本项目使用 XIAO ESP32S3 的 BLE 功能实现与手机端的无线通信。
程序中创建了自定义 BLE 服务和特征值,并按照固定格式发送姿态角数据。手机端在连接设备后,可以持续接收 roll  pitch 数据并实时更新显示内容。

相较于有线串口显示,BLE 方案更加灵活,也更符合移动端交互展示的需求。

4. 按键与状态控制

为了增强交互性,项目中增加了按键控制功能。
按键接入 XIAO 的 D1 引脚,采用内部上拉输入方式,并通过软件防抖实现稳定检测。按下按键后,可以切换姿态采集功能的启用与关闭状态。与此同时,程序会控制 XIAO 板载 LED 亮灭,用于提示当前运行状态:

  • LED 亮:姿态功能开启
  • LED 灭:姿态功能关闭

这一设计虽然简单,但使整个项目更完整,也体现了嵌入式交互系统的基本设计思路。

5. 关键代码说明

软件中的关键代码主要集中在以下几个部分:

  • MPU6050 初始化与原始寄存器读取
  • 互补滤波姿态解算
  • BLE 服务初始化和数据通知

本项目在姿态解算部分采用了互补滤波算法。程序首先利用加速度计计算倾角,再将陀螺仪角速度积分得到短时姿态变化,最后按一定权重对两者进行融合。这样既保留了陀螺仪响应快、平滑性好的优点,又利用加速度计对长期漂移进行修正,从而得到较稳定的姿态角结果。该部分代码是本项目姿态显示功能实现的核心。

image.png



五、硬件功能展示

在功能展示时,本项目最直观的表现就是“硬件姿态变化,手机端同步显示”。

当用户手持硬件并进行倾斜、旋转时,MPU6050 会实时感知姿态变化,XIAO ESP32S3 负责完成数据计算和无线发送,手机 App 中的图形显示会随之同步变化。整个过程能够比较直观地体现出:

  • 传感器采集正常
  • 姿态解算正常
  • 蓝牙传输正常
  • 手机端解析与显示正常

此外,通过按键还可以控制姿态功能的启停,板载 LED 同步显示状态,使整个作品不仅能“看见姿态变化”,也具备了基本的人机交互能力。

image.png

image.png

image.png


六、设计中遇到的难题和解决方法

在项目实现过程中,我主要遇到了以下几个问题。

1. 姿态数据不够稳定
初始阶段直接使用原始数据进行显示时,画面抖动较明显,显示效果不理想。后来通过对加速度计和陀螺仪数据进行融合,并调整采样间隔和滤波参数,最终提升了姿态显示的稳定性。

2. 手机端与蓝牙数据联调较麻烦
硬件端与手机端之间不仅要保证能连接成功,还要保证发送格式和解析格式完全一致。调试中通过同时观察串口输出和手机端显示,逐步统一了数据格式,解决了连接正常但显示异常的问题。

3. 模块化硬件结构不够规整
最开始如果只靠杜邦线连接,各模块虽然可以工作,但结构比较松散,也不利于后续展示。为了解决这个问题,我进一步完成了原理图和 PCB 底板设计,使硬件结构更加清晰,整体性更好。

4. 初次进行 PCB 设计经验不足
在进行 PCB 设计时,一开始对母座封装选择、模块布局和接口预留考虑不够充分。后来通过反复检查模块尺寸、接口方向和 USB 位置,逐步完成了较为合理的 PCB 布局方案,但是因为gnd net的放置问题,还是有有一个脚位没有接地。


七、心得体会

通过本次项目,我对软硬件结合设计的完整流程有了更深入的理解。
从最初的项目构思,到器件选择、原理图设计、PCB 布线,再到程序编写、手机端联调和最终展示,每一个环节都需要认真思考和不断调整。相比只做单一的软件编程或单一的硬件连接,这种完整项目更能锻炼综合能力。

本项目让我体会最深的一点是:一个看起来简单的“姿态显示”功能,背后实际上涉及传感器通信、数据处理、算法融合、蓝牙传输、界面显示以及结构设计等多个方面。只有把这些部分真正串联起来,项目才算完整。

如果后续继续改进,我希望从以下几个方向继续优化:

  • 进一步完善手机端界面效果
  • 增加更多姿态参数或交互模式,有一些比较实用的idea。
  • 优化 PCB 外观与结构布局

总体来说,本项目达到了预期目标,完成了一个能够实时感知姿态并在手机端同步显示的完整系统,也让我积累了从硬件到软件、从原理验证到成品化表达的实践经验。


附件下载
MotionCube_source_with_apk_20260416.zip
MotionCube_hardware_package_20260416.zip
团队介绍
本人独立完成本项目,主要负责项目方案设计、硬件电路设计、PCB绘制、嵌入式程序编写以及系统调试。平时对嵌入式开发、传感器应用和智能硬件设计较感兴趣,希望通过本项目提升自己在软硬件协同开发方面的实践能力。
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号