产品技术资料 · U1205

U1205 BMM150 三轴地磁传感器技术资料

BMM150 三轴磁场测量资料。按主板选择接线与程序,常用手册和原始资料包可直接阅读、下载。

百度网盘地址:https://pan.baidu.com/s/1RKi30PT7GgFyLUgWzWg1wA?pwd=1111 — 提取码:1111;来自本项目 B站简介

直接查看 UNO R3 完整代码

Bosch BMM150 数据手册 · 在线阅读 / 下载 — Rev.1.4,2020年4月,56页;高精度预设见第13页表3

完整原始资料包 ZIP · 直接下载 — 网盘原包:项目原始程序、接线表、Bosch 手册;不含新版程序

Quick Facts

  • SKU:U1205
  • 型号:BMM150
  • 测试方案:2 个独立入口

资料版本与验证状态

资料版本 / 来源状态
UNO R3 推荐程序UNO-R3-20261002已验证(用户确认);编译通过
网盘原始资料包B站简介分享包,3个文件已取回,保留原始文件
项目实拍历史接线与运行视频保留历史接线与运行演示
ESP32 屏幕指南针已有独立方案详见方案页

公共资料与下载

百度网盘地址:https://pan.baidu.com/s/1RKi30PT7GgFyLUgWzWg1wA?pwd=1111 — 提取码:1111;来自本项目 B站简介

下载 UNO R3 程序

Bosch BMM150 数据手册 · 在线阅读 / 下载 — Rev.1.4,2020年4月,56页;高精度预设见第13页表3

完整原始资料包 ZIP · 直接下载 — 网盘原包:项目原始程序、接线表、Bosch 手册;不含新版程序

各主板源码及接线资料请进入对应测试方案。

UNO R3 完整代码

Arduino UNO R3 · UNO-R3-20261002

下载 UNO R3 程序

// 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);
}