产品技术资料 · U1205
U1205 BMM150 三轴地磁传感器技术资料
BMM150 三轴磁场测量资料。按主板选择接线与程序,常用手册和原始资料包可直接阅读、下载。
UNO R3 · I2C 基础测试Arduino UNO R3 · I2C程序已验证(用户确认);编译通过ESP32 · 屏幕指南针ESP32 2.8寸屏 · I2C已有接线、源码与演示;验证细节见方案页
百度网盘地址:https://pan.baidu.com/s/1RKi30PT7GgFyLUgWzWg1wA?pwd=1111 — 提取码:1111;来自本项目 B站简介
Bosch BMM150 数据手册 · 在线阅读 / 下载 — Rev.1.4,2020年4月,56页;高精度预设见第13页表3
完整原始资料包 ZIP · 直接下载 — 网盘原包:项目原始程序、接线表、Bosch 手册;不含新版程序
Quick Facts
- SKU:U1205
- 型号:BMM150
- 测试方案:2 个独立入口
你可能正在找
项目原始示例程序 — 使用 DFRobot 库,保留原文件
UNO R3 接线表 — VCC 3.3V、GND、SDA A4、SCL A5
选择测试主板
UNO R3 · I2C 基础测试Arduino UNO R3 · I2C程序已验证(用户确认);编译通过ESP32 · 屏幕指南针ESP32 2.8寸屏 · I2C已有接线、源码与演示;验证细节见方案页
进入对应方案后查看接线、程序和下载。每个方案的主板及版本单独标明。
资料版本与验证状态
| 资料 | 版本 / 来源 | 状态 |
|---|---|---|
| UNO R3 推荐程序 | UNO-R3-20261002 | 已验证(用户确认);编译通过 |
| 网盘原始资料包 | B站简介分享包,3个文件 | 已取回,保留原始文件 |
| 项目实拍 | 历史接线与运行视频 | 保留历史接线与运行演示 |
| ESP32 屏幕指南针 | 已有独立方案 | 详见方案页 |
公共资料与下载
百度网盘地址:https://pan.baidu.com/s/1RKi30PT7GgFyLUgWzWg1wA?pwd=1111 — 提取码:1111;来自本项目 B站简介
Bosch BMM150 数据手册 · 在线阅读 / 下载 — Rev.1.4,2020年4月,56页;高精度预设见第13页表3
完整原始资料包 ZIP · 直接下载 — 网盘原包:项目原始程序、接线表、Bosch 手册;不含新版程序
各主板源码及接线资料请进入对应测试方案。
UNO R3 完整代码
Arduino UNO R3 · UNO-R3-20261002
// Arduino UNO R3 / Arduino AVR Boards 1.8.8 / DFRobot_BMM150
// Verification: compiled for arduino:avr:uno; hardware validation confirmed by project owner.
#include <Wire.h>
#include "DFRobot_BMM150.h"
/*
* BMM150 + Arduino UNO R3
*
* 接线:
* BMM150 VCC -> UNO 3.3V展开完整代码
// Arduino UNO R3 / Arduino AVR Boards 1.8.8 / DFRobot_BMM150
// Verification: compiled for arduino:avr:uno; hardware validation confirmed by project owner.
#include <Wire.h>
#include "DFRobot_BMM150.h"
/*
* BMM150 + Arduino UNO R3
*
* 接线:
* BMM150 VCC -> UNO 3.3V
* BMM150 GND -> UNO GND
* BMM150 SDA -> UNO A4
* BMM150 SCL -> UNO A5
*
* I2C 地址:
* 0x13 = I2C_ADDRESS_4
*/
// BMM150 I2C 地址 0x13
DFRobot_BMM150_I2C bmm150(&Wire, I2C_ADDRESS_4);
// 最多初始化尝试次数
const uint8_t INIT_MAX_RETRIES = 5;
// 记录传感器是否初始化成功
bool sensorReady = false;
void setup()
{
Serial.begin(115200);
// Arduino UNO R3 的 I2C:
// SDA = A4
// SCL = A5
Wire.begin();
delay(100);
Serial.println();
Serial.println("BMM150 Test Start");
Serial.println("I2C Address: 0x13");
// 有限次数初始化,避免传感器断开时永久卡死
for (uint8_t attempt = 1; attempt <= INIT_MAX_RETRIES; attempt++)
{
Serial.print("BMM150 init attempt ");
Serial.print(attempt);
Serial.print("/");
Serial.println(INIT_MAX_RETRIES);
// DFRobot_BMM150:begin() 返回 0 表示成功
if (bmm150.begin() == 0)
{
sensorReady = true;
break;
}
Serial.println("BMM150 init failed!");
delay(1000);
}
// 初始化失败后,不继续配置,也不读取传感器
if (!sensorReady)
{
Serial.println();
Serial.println("ERROR: BMM150 initialization failed.");
Serial.println("Check VCC, GND, SDA=A4, SCL=A5 and I2C address 0x13.");
return;
}
Serial.println("BMM150 init OK");
// 正常连续测量模式
bmm150.setOperationMode(BMM150_POWERMODE_NORMAL);
// 高精度预设
bmm150.setPresetMode(BMM150_PRESETMODE_HIGHACCURACY);
/*
* Bosch BMM150 高精度预设推荐 ODR 为 20Hz。
*
* 高精度预设使用较高的 X/Y、Z 重复测量次数,
* 完成一次测量所需时间决定了最大有效数据率约为 20Hz。
*
* 因此这里不使用 30Hz,以保持高精度预设的正确组合。
*/
bmm150.setRate(BMM150_DATA_RATE_20HZ);
// 开启 X、Y、Z 三轴测量
bmm150.setMeasurementXYZ();
Serial.print("Configured data rate: ");
Serial.print(bmm150.getRate());
Serial.println(" Hz");
Serial.println("High-accuracy mode enabled");
Serial.println("Start measuring...");
Serial.println();
}
void loop()
{
// 初始化失败时禁止访问未初始化的传感器
if (!sensorReady)
{
delay(1000);
return;
}
// 读取三轴磁场数据,库返回单位为 uT
sBmm150MagData_t magData = bmm150.getGeomagneticData();
Serial.print("X = ");
Serial.print(magData.x);
Serial.print(" uT Y = ");
Serial.print(magData.y);
Serial.print(" uT Z = ");
Serial.print(magData.z);
Serial.println(" uT");
// 网页测试要求:每 500ms 输出一次
delay(500);
}