1/***************************************************************
2 * @file I2C_Magneto.ino
3 * @brief Minimal I2C bring-up for 7Semi ICM-20948 +
4 * AK09916 magnetometer readout (updated API).
7 * - I2C init on default/custom pins
8 * - IMU beginI2C() initialization
9 * - Manual sensor enable
10 * - Magnetometer initialization (initMag)
11 * - Read magnetometer (uT) at ~2 Hz
13 * Wiring (Arduino UNO, I2C)
16 * - VCC -> 3V3 (or 5V if board supports it)
19 * Wiring (ESP32, I2C default)
26 * - WHO_AM_I must be 0xEA
27 * - initMag() must be called before readMag()
28 * - Magnetometer runs via internal I2C master
32 ***************************************************************/
34#include <DevLab_ICM20948.h>
36/* ====================== User Config ======================= */
39#define I2C_FREQ 400000UL
47 Serial.println(F("ICM-20948 (I2C) — Magnetometer Example"));
48 Wire.begin(SDA_PIN, SCL_PIN);
50 if (!imu.beginI2C(ICM_ADDR, Wire, 400000)) {
51 Serial.println(F("ERROR: beginI2C() failed."));
55 Serial.println(F("ICM-20948 ready (I2C)."));
59 if (!imu.readWhoAmI(who) || who != 0xEA) {
60 Serial.println(F("ERROR: WHO_AM_I mismatch"));
64 Serial.print(F("WHO_AM_I = 0x"));
65 Serial.println(who, HEX);
67 /** Enable required sensors (mag uses internal I2C master)
68 * - accel/gyro not strictly required but safe to keep ON
70 if (!imu.setSensors(true, true, false)) {
71 Serial.println(F("setSensors failed."));
74 /** Initialize magnetometer */
76 Serial.println(F("ERROR: initMag() failed"));
80 Serial.println(F("Magnetometer ready"));
86 /** Read magnetometer data
87 * - Output in microtesla (uT)
88 * - Returns true on success
90 if (imu.readMag(mx, my, mz)) {
91 Serial.print(F("MAG [uT]: "));
92 Serial.print(mx, 2); Serial.print(F(", "));
93 Serial.print(my, 2); Serial.print(F(", "));
94 Serial.println(mz, 2);
96 Serial.println(F("Mag read failed"));
99 Serial.println(F("-----------------------------"));