BMM150 (GY-BMM150) 3-axis magnetometer with ESP32

Supply 3.3 V Bus I2C I2C address 0x10 / 0x11 / 0x12 / 0x13 Measures magnetic field, heading
VCCGNDSCLSDACSBSDOINTDRDY

Pins and ESP32 wiring

PinRoleESP32 pinNotes
VCCPower3V3Use 3V3. Pin order differs between sellers: check the silkscreen
GNDGroundGND
SCLI2C clock (SCL)D22
SDAI2C data (SDA)D21
CSBNot wired to the ESP32—Address bit / SPI select. Sets the address with SDO (0x10 to 0x13)
SDONot wired to the ESP32—Address bit. Sets the address with CSB (0x10 to 0x13)
INTInterruptD35Interrupt output, optional
DRDYInterruptVPData ready, optional

Suggested wiring for the 30-pin ESP32 DevKit, avoiding flash, input-only and strapping pins. BoardPilot checks it for you as you wire.

Starter code (Arduino)

#include <Wire.h>

void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22);  // SDA = GPIO 21, SCL = GPIO 22
  Wire.beginTransmission(0x10);
  bool found = Wire.endTransmission() == 0;
  Serial.println(found ? "BMM150 (GY-BMM150) 3-axis magnetometer found at 0x10" : "Not found: check power, GND and SDA/SCL");
}

void loop() {}

Sources

Try it in 3D in BoardPilot

BoardPilot Part data (JSON)

Related parts

Part data: CC BY 4.0, free to reuse with credit to BoardPilot.