How to set the address
There is no address pin: the address is set at the factory, so it is always 0x0D.
Devices that use the same addresses
None of the other 75 devices in our list use these addresses, so the QMC5883L rarely clashes with anything.
Check your whole bus →Add the QMC5883L and your other modules: the checker finds conflicts, suggests free addresses and sizes the pull-ups.
7-bit and 8-bit address
I²C addresses are 7 bits long. Some datasheets and libraries write them as 8-bit numbers, with the read/write bit added on the right: that is why the same chip can appear as 0x0D or 0x1A. Arduino’s Wire library and ESPHome use the 7-bit form.
| 7-bit | Binary | 8-bit write | 8-bit read |
|---|---|---|---|
| 0x0D | 0001101 | 0x1A | 0x1B |
Check that it answers
Upload this sketch with the QMC5883L wired to SDA and SCL: it tries every address the chip can use and prints the one that answers. On an ESP32 the default pins are GPIO21 (SDA) and GPIO22 (SCL); on an Arduino Uno, A4 and A5.
#include <Wire.h>
const byte ADDRS[] = {0x0D};
void setup() {
Serial.begin(115200);
Wire.begin();
for (byte a : ADDRS) {
Wire.beginTransmission(a);
if (Wire.endTransmission() == 0) {
Serial.print("QMC5883L answers at 0x");
if (a < 0x10) Serial.print('0');
Serial.println(a, HEX);
return;
}
}
Serial.println("No answer: check the wiring");
}
void loop() {}
In ESPHome the bus is scanned at boot (scan: true is the default): the log lists every address that answers.
i2c:
sda: GPIO21
scl: GPIO22
scan: true
Pull-up resistors
SDA and SCL need pull-up resistors to the supply. Many breakout boards already carry them, often 4.7 kΩ or 10 kΩ, and with several boards on the bus they add up in parallel. The I²C checker works out the allowed range for your bus voltage and speed.
Frequently asked questions
What is the I2C address of the QMC5883L?
0x0D. It is fixed: there is no address pin.
Can I use more than one QMC5883L on the same bus?
Not directly: the address is fixed, so two would clash. Put each one on a different channel of a TCA9548A multiplexer, or use a second I²C bus.
Why doesn’t the QMC5883L show up in an I2C scan?
Check, in this order: SDA and SCL not swapped; ground shared between the boards; pull-up resistors on SDA and SCL; the module powered at the voltage it is made for; and that your code uses the 7-bit address (0x0D), not the 8-bit one (0x1A).
Similar devices
ADXL345 BMI270 BNO055 LIS2DH12 MMA8451Q MPU-6050 MPU-6886 MPU-9250
Addresses checked against the QMC5883L datasheet.