尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

零知派ESP32–基于BMI160的IMU姿态监测系统

零知派ESP32–基于BMI160的IMU姿态监测系统 项目概述本系统以零知派 ESP32 为主控读取 Bosch BMI160 六轴惯性传感器三轴加速度计 三轴陀螺仪在 MCU 上用 Madgwick 算法融合成横滚角Roll、俯仰角Pitch、偏航角Yaw。结果同时送到三路ST7789 1.54 寸 240×240 屏幕本地仪表含角度、水平气泡和状态灯WiFi 热点网页3D 正方体、实时数据、开始/停止记录、一键导出 CSVUSB 串口可选FireWater 协议对接 VOFA在电脑上看 3D数据可写入 ESP32 内部 FlashLittleFS文件名为log_01.csv、log_02.csv等。网页「导出 CSV」即可下载到手机或电脑无需拆机、无需 SD 卡读卡器。适用场景水平校准、短时姿态记录、IMU 教学演示。BMI160 没有磁力计偏航角会随时间缓慢漂移属六轴系统固有限制。项目亮点采集—解算—显示—记录—导出闭环不是只打印原始加速度。双界面不连电脑时看屏幕连热点后用浏览器看 3D 正方体并导出数据。网页 3D 不依赖外网正方体用 CSS 3D 绘制连 ESP32 热点也能转。陀螺零偏校准上电静止约 2.5 秒采集零偏网页可再次校准。I2C 掉线恢复杜邦线接触不良时自动恢复总线并重新初始化传感器。状态一目了然绿正常黄校准中红I2C 故障。项目难点及解决方案难点现象解决BMI160 初始化失败角度全 0检查 3.3V、I2C 地址 0x68/0x69驱动探测两个地址开机立刻校准静止时偏航仍快速漂等陀螺进入 Normal 后再延时丢掉前 0.4 s 样本热点下 Three.js 拉不下来3D 卡住很久网页改用内置 CSS 立方体读 I2C 失败仍推旧姿态画面停在一个角度连续失败则恢复总线屏幕 I2C 灯变红记录占满程序分区无法写 CSV使用partitions.csv划分 LittleFS不要选 huge_app同步 WebServer 占用界面卡顿屏幕 5 Hz、网页轮询约 3 Hz串口 50 Hz目录一、硬件系统部分1.1 硬件清单1.2 接线方案1.3 硬件连接图1.4 实物连接图二、软件架构设计2.1 系统初始化2.2 主循环逻辑三、代码拆分讲解3.1 配置 config.h3.2 驱动 bmi160.cpp3.3 融合 fusion.cpp3.4 屏幕 display.cpp3.5 记录 logger.cpp3.6 网页 web.cpp webpage.h四、操作过程及数据展示4.1 操作步骤4.2 演示视频五、技术原理5.1 工作原理5.2 工作模式配置六、常见问题指引Q1:点开始记录 REC 仍灰Q2:导出是空的或 404Q3:VOFA 打不开串口一、硬件系统部分1.1 硬件清单名称规格数量说明零知派 ESP32ESP324MB Flash1主控BMI160 模块I2C3.3V1六轴 IMUST7789 屏幕240×240SPI1TFT_eSPI 驱动杜邦线 / 排线—若干建议尽量短USB 线供电与烧录1可选接电脑 VOFA电源BMI160 与屏幕均用3.3V禁止给 BMI160 接 5V。1.2 接线方案BMI160I2CBMI160ESP32VCC3.3VGNDGNDSDAGPIO 21SCLGPIO 22SDO/SA0GND → 地址0x68接 3.3V 则为0x69固件会自动尝试另一地址ST7789SPI引脚在 TFT_eSPI 的User_Setup.h中配置ST7789ESP32MOSI / SDAGPIO 23SCLK / SCLGPIO 18CSGPIO 15DCGPIO 13RSTGPIO 4VCC3.3VGNDGNDI2C 与 SPI 分开不要把屏幕的 SDA 接到 GPIO 21。屏幕方向在固件里为tft.setRotation(3)旋转 3。打开零知派开发板选零知派 ESP32分区选带 SPIFFS 的方案工程内已有partitions.csv。库Wire、WiFi、WebServer、LittleFS 随 ESP32 核心提供。1.3 硬件连接图1.4 实物连接图二、软件架构设计工程按功能拆文件主程序只负责调度。文件职责BMI160.inosetup/loop串口命令config.h引脚、热点名、采样率bmi160.h/.cpp传感器初始化、读数、总线恢复fusion.h/.cpp零偏、Madgwick、欧拉角display.h/.cppST7789 界面logger.h/.cppLittleFS 写/列/导出 CSVweb.h/.cppSoftAP HTTPwebpage.h网页 HTML含 CSS 3D 正方体partitions.csv程序区 LittleFS2.1 系统初始化setup()顺序可选点亮 GPIO2 LED串口 115200VOFA 与dump共用运行时不要开串口监视器抢口imu.begin(21, 22, 0x68, 100kHz)软复位、加速度/陀螺 Normal、等 PMU 就绪、再稳定 500 msfusion.beginloggerBegin挂载 LittleFS失败则无法记录displayBegintft.init()setRotation(3)画状态栏webBeginSoftAPBMI160-LOG/12345678HTTP 80若 IMU 成功开始约 2.5 s 陀螺校准前 0.4 s 丢弃2.2 主循环逻辑loop()每一圈pollVofaCommands()处理start/stop/calibrate/reset_yaw/dumpwebLoop()处理网页请求100 Hz读 BMI160融合连续失败则imu.recover()50 Hz串口输出roll,pitch,yaw若正在记录则写入 CSV 缓冲5 Hz刷新屏幕并向网页模块更新 Live JSON网页每约 300 ms 请求/api/live更新数字和正方体不使用 WebSocket热点下更稳。三、代码拆分讲解3.1 配置config.hI2C 21/22、热点 SSID/密码、IMU_SAMPLE_HZ100、VOFA_HZ50、DISPLAY_HZ5、GYRO_CAL_MS2500。改接线只动这里和 TFT_eSPI 的User_Setup.h。3.2 驱动bmi160.cppChip ID0xD1。加速度 ±4 g8192 LSB/g陀螺 ±500 dps65.6 LSB/°/sODR 100 Hz。从寄存器0x0C连续读 12 字节先陀螺后加速度。recoverBus()在 SDA 被拉死时补时钟并重新Wire.begin。3.3 融合fusion.cpp校准阶段只累加陀螺均值。运行时减去零偏Madgwick 输出四元数再转欧拉角给屏幕和网页。静止一段时间会缓慢跟踪剩余零偏。无磁力计时偏航只能靠陀螺积分。3.4 屏幕display.cpp顶部 I2C / CAL / REC 圆点中部三个角度左下气泡roll/pitch 映射到圆内底部提示192.168.4.1。角度变化小于 0.05° 不重绘减少闪烁。3.5 记录logger.cppstart创建/log_XX.csv表头t_ms,roll,pitch,yaw,ax,ay,az,gx,gy,gzt_ms从本次记录开始计。内存攒 32 行再写盘。最多 99 个文件。3.6 网页web.cppwebpage.h路径作用GET /主页面GET /api/live实时 JSONGET /api/logs文件列表POST /api/startstopcalibrate记录与校准GET /api/export下载最近一份 CSVGET /download?flog_01.csv下载指定文件正方体用六个面拼成板状JavaScript 按rotateY(yaw) rotateX(pitch) rotateZ(-roll)更新。四、操作过程及数据展示4.1 操作步骤按 1.2 接线确认 BMI160 为 3.3V。打开BMI160.ino选零知派 ESP32分区带 SPIFFS编译上传。上电后将模块放平静止约 3 秒屏幕 CAL 由黄变绿。手机连接 WiFiBMI160-LOG密码12345678。浏览器打开http://192.168.4.1屏幕底部也有该地址。转动模块网页正方体与 ROLL/PITCH/YAW 应同步变化。点开始记录REC 变绿点停止保存。点导出 CSV浏览器下载log_xx.csv。用 Excel 或 Python 打开。需要重新校准点校准保持静止直到 CAL 变绿。CSV 示例t_ms,roll,pitch,yaw,ax,ay,az,gx,gy,gz 0,1.02,4.10,-0.12,-0.076,0.019,1.064,0.02,-0.01,0.00 20,1.05,4.08,-0.10,-0.077,0.018,1.063,0.01,-0.02,0.01平放时az约 1 gax/ay接近 0roll/pitch为小角度。可选 VOFA协议 FireWater115200I0/I1/I2 绑定 3D。不要同时开串口监视器。4.2 演示视频零知派ESP32–基于BMI160的IMU姿态监测系统五、技术原理5.1 工作原理加速度计测比力静止时主要是重力可得到 roll、pitch但对偏航不敏感动态时受运动加速度干扰。陀螺仪测角速度积分得到相对转角但有零偏积分会漂。本工程静止时估计陀螺零偏并减去。Madgwick 用陀螺预报四元数用加速度作重力方向校正主要稳住 roll/pitch。偏航没有地磁参考长期会漂可网页或串口reset_yaw把当前航向当作 0。屏幕气泡只用 roll、pitch不依赖航向。5.2 工作模式配置BMI160加速度、陀螺Normal加速度±4 g100 Hz陀螺±500 °/s100 HzI2C100 kHz杜邦线比 400 kHz 更稳系统任务频率任务频率IMU 采样与融合100 Hz串口 / 写 CSV50 Hz屏幕5 Hz网页轮询约 3 Hz存储partitions.csv应用约 1.75 MBLittleFS 约 2.2 MB。50 Hz 记录大约可记十余分钟量级视行长而定不是长时间黑匣子。需要更久请改 SD 卡。网络仅 SoftAPSTA 不连路由器。IP 固定192.168.4.1。六、常见问题指引Q1:点开始记录 REC 仍灰分区没有 LittleFS不要 huge_app或已有 99 个 log 文件。Q2:导出是空的或 404先成功记录并停止一次。导出最近一份历史列表可下旧文件。Q3:VOFA 打不开串口关掉串口监视器后再连。
返回列表