I²C Address Conflicts, Explained
Published · figures computed from the dataset, last updated
Wire two perfectly working I²C sensors to the same two pins and one of them can simply vanish. Nothing is broken: they are answering on the same address, and the bus has no way to tell them apart. This guide explains why that happens and the three ways out. If you just want your specific combination checked, the pin & address conflict planner does it automatically for the 49 parts whose addresses we have on record.
Why addresses collide
Every transaction on an I²C bus starts with the controller broadcasting a 7-bit address; the matching peripheral answers. The address space is small — 112 usable addresses — and chip designers cluster in the same popular ranges. Light sensors sit around 0x29, temperature sensors around 0x38–0x44, IO expanders at 0x20–0x27. Two chips from different manufacturers doing different jobs can still ship at the same address.
Strappable vs fixed: the distinction that matters
What decides whether a conflict is a nuisance or a wall is whether the part's address can be strapped — changed by wiring an address pin (A0–A2, ADDR, SDO…) high or low. A part with address pins occupies one address from a small selectable range. A part with none is fixed: it answers where the silicon says, forever. Every part on an I²C device page here states which kind it is, because the two situations need entirely different fixes.
The three ways out
- Re-strap one part. If either part has address pins, move it and the conflict is gone. Cost: one solder jumper or a wire.
- Use a second bus. Addresses only need to be unique per bus, and the ESP32 has two I²C peripherals. Assign different pins in your config and put one part on each.
- Add a multiplexer. A TCA9548A sits on the bus and fans out to eight isolated channels — the standard answer when you need several identical fixed-address parts at once.
The conflicts already in this index
These address groups exist among the parts documented here — each is a combination someone could realistically order for one build:
0x20 resolvable by strapping
- MCP23017 16-Bit I2C GPIO Expander — A0-A2 strapping selects 0x20-0x27.
- PCF8574 8-bit I2C GPIO Expander — A0-A2 strapping selects 0x20-0x27 (0x38-0x3F on the PCF8574A).
0x29 hard conflict — multiplexer or second bus
- TSL2591 HDR Ambient Lux Sensor — Fixed at 0x29.
- TCS34725 RGB Color Sensor with IR Filter — Fixed at 0x29.
- VL53L0X Time-of-Flight Distance Sensor — Boots at 0x29; can be moved in software with XSHUT sequencing.
0x38 hard conflict — multiplexer or second bus
- AHT10 Precision Temp & Humidity Sensor — Fixed at 0x38.
- AHT20 Humidity & Temperature Sensor — Fixed at 0x38.
0x39 resolvable by strapping
- APDS9960 Proximity & Gesture Sensor — Fixed at 0x39.
- TSL2561 Digital Lux Sensor — ADDR pin selects 0x29, 0x39 or 0x49.
0x3C resolvable by strapping
- SSD1306 0.96 OLED Display (128x64) — Usually 0x3C; some modules expose a 0x3D jumper.
- SH1106 1.3 Inch OLED Display (128x64) — Usually 0x3C; some modules expose a 0x3D jumper.
0x40 hard conflict — multiplexer or second bus
- INA219 DC Voltage & Current Sensor — A0/A1 strapping selects 0x40-0x4F.
- INA226 Bi-Directional Power Monitor — A0/A1 strapping selects 0x40-0x4F.
- HTU21D Temp & Humidity Sensor — Fixed at 0x40.
- HDC1080 Temp & Humidity Sensor — Fixed at 0x40.
0x44 resolvable by strapping
- SHT40 High-Accuracy Temp Sensor — Fixed at 0x44 on the common SHT40-AD1B.
- SHT31 Digital Temp & Humidity Sensor — ADDR pin selects 0x44 or 0x45.
- OPT3001 Precision Ambient Light Sensor — ADDR to GND, VDD, SDA or SCL selects 0x44–0x47.
0x48 resolvable by strapping
- ADS1115 16-bit 4-Channel Precision ADC — ADDR pin selects 0x48-0x4B.
- TMP117 Precision Temperature Sensor — ADD0 strapping selects 0x48-0x4B.
0x53 resolvable by strapping
- LTR390 UV & Ambient Light Sensor — Fixed at 0x53.
- ScioSense ENS160 Multi-Gas Sensor — ADDR pin selects 0x52 or 0x53.
0x5A resolvable by strapping
- MLX90614 Contactless IR Thermal Sensor — Ships at 0x5A; reprogrammable in EEPROM.
- CCS811 eCO2 & TVOC Air Sensor — ADDR pin selects 0x5A or 0x5B.
0x69 hard conflict — multiplexer or second bus
- SEN55 Environmental Sensor Node — Fixed at 0x69.
- SPS30 Laser Particulate Sensor — Fixed at 0x69.
0x76 resolvable by strapping
- BME680 Environmental & Gas Sensor — SDO pin selects 0x76 or 0x77.
- BME280 Temp Humidity & Pressure Sensor — SDO pin selects 0x76 or 0x77 — the same strap as the BME680.
- BMP280 Barometric Pressure & Temp Sensor — SDO pin selects 0x76 or 0x77 — the BME280/BME680 strap.
0x77 resolvable by strapping
- Bosch BME688 AI Gas Sensor with BSEC — SDO pin selects 0x76 or 0x77; Adafruit boards ship at 0x77.
- BMP388 Precision Barometric Pressure Sensor — SDO pin selects 0x76 or 0x77.
- Bosch BMP390 Precision Barometer Sensor — SDO pin selects 0x76 or 0x77.
- DPS310 Precision Barometric Sensor — SDO pin selects 0x76 or 0x77.
Debugging checklist
- Scan the bus (
scan: truein ESPHome) rather than trusting the datasheet — breakout boards sometimes pre-strap pins. - A part that appears and disappears between boots often shares an address with something else; the winner of the race varies.
- Check pull-up resistors: most breakouts include them, but five breakouts' pull-ups in parallel can drag the bus below spec. Symptoms look identical to an address clash.
- Keep bus wiring short — I²C was designed for centimetres, not metres.
Frequently Asked Questions
How do I find out what address a sensor is actually using?
Can two identical sensors share one bus?
Do I²C addresses conflict across different buses?
More guides
Zigbee vs Z-Wave vs Matter: Choosing a Protocol
How the three main smart home radio protocols differ in range, hub requirements and ecosystem size — and how to choose between them for a new setup.
Do You Need a Thread Border Router?
What a Thread border router actually does, which devices count as one, and how to tell whether the Matter device in your basket needs one before it will pair.
ESP32 vs ESP8266 for ESPHome: Which Board?
Where the ten-year-old ESP8266 still earns its keep, where it runs out of pins, UARTs and ADC channels, and the ESP32 quirk that surprises everyone: ADC2 dies the moment Wi-Fi comes up.
mmWave Radar vs PIR: Choosing a Presence Sensor
PIR sees you move; radar sees you exist. When each one is the right answer, why mmWave ends the lights-go-off-while-reading problem, and every radar and PIR option documented in this index.
Natively Supported vs Bridge Needed: What Our Verdicts Mean
The three compatibility verdicts this site assigns, what each one commits you to in hardware and maintenance, and why "works with" on a box rarely tells you which you are getting.