1/***************************************************************
3 * @brief Minimal I2C bring-up for 7Semi ICM-20948 +
4 * basic Accel/Gyro/Temp/Mag readout (updated API).
7 * - I2C init (UNO / ESP32)
8 * - beginI2C() initialization
9 * - Manual sensor enable (setSensors)
10 * - Read Accel / Gyro / Temp / Mag
13 * - WHO_AM_I must be 0xEA
14 * - Sensors must be explicitly enabled
15 * - Magnetometer requires initMag()
17 * Wiring (Arduino UNO I2C)
20 * - VCC -> 3V3 (or 5V if supported)
23 * Wiring (ESP32 default I2C)
26 ***************************************************************/
28#include <DevLab_ICM20948.h>
30/* ====================== User Config ======================= */
33#define I2C_FREQ 400000UL
41 Serial.println(F("ICM-20948 — I2C Basic"));
42 Wire.begin(SDA_PIN, SCL_PIN);
44 if (!imu.beginI2C(ICM_ADDR, Wire, 400000)) {
45 Serial.println(F("ERROR: beginI2C() failed"));
51 if (!imu.readWhoAmI(who) || who != 0xEA) {
52 Serial.println(F("ERROR: WHO_AM_I mismatch"));
56 Serial.print(F("WHO_AM_I = 0x"));
57 Serial.println(who, HEX);
59 /** Enable all sensors */
60 if (!imu.setSensors(true, true, true)) {
61 Serial.println(F("ERROR: setSensors failed"));
64 /** Initialize magnetometer */
66 Serial.println(F("Mag init failed"));
68 Serial.println(F("Mag initialized"));
71 Serial.println(F("Ready.\n"));
80 /** Read Accelerometer */
81 if (imu.readAccel(ax, ay, az)) {
82 Serial.print(F("ACC [g]: "));
83 Serial.print(ax, 3); Serial.print(", ");
84 Serial.print(ay, 3); Serial.print(", ");
85 Serial.println(az, 3);
87 Serial.println(F("ACC read failed"));
91 if (imu.readGyro(gx, gy, gz)) {
92 Serial.print(F("GYR [dps]: "));
93 Serial.print(gx, 2); Serial.print(", ");
94 Serial.print(gy, 2); Serial.print(", ");
95 Serial.println(gz, 2);
97 Serial.println(F("GYR read failed"));
100 /** Read Magnetometer */
101 if (imu.readMag(mx, my, mz)) {
102 Serial.print(F("MAG [uT]: "));
103 Serial.print(mx, 2); Serial.print(", ");
104 Serial.print(my, 2); Serial.print(", ");
105 Serial.println(mz, 2);
107 Serial.println(F("MAG read failed"));
110 /** Read Temperature */
111 if (imu.readTemperature(tC)) {
112 Serial.print(F("TMP [C]: "));
113 Serial.println(tC, 2);
115 Serial.println(F("TMP read failed"));
118 Serial.println(F("-----------------------------"));
122/* Note on magnetometer:
123 * - Uses internal I2C master (AK09916 via ICM20948)
124 * - initMag() must be called before readMag()
125 * - If values are zero:
127 * → verify power + pull-ups