Hardware Matrix

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

  1. Re-strap one part. If either part has address pins, move it and the conflict is gone. Cost: one solder jumper or a wire.
  2. 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.
  3. 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

0x29 hard conflict — multiplexer or second bus

0x38 hard conflict — multiplexer or second bus

0x39 resolvable by strapping

0x3C resolvable by strapping

0x40 hard conflict — multiplexer or second bus

0x44 resolvable by strapping

0x48 resolvable by strapping

0x53 resolvable by strapping

0x5A resolvable by strapping

0x69 hard conflict — multiplexer or second bus

0x76 resolvable by strapping

0x77 resolvable by strapping

Debugging checklist

  • Scan the bus (scan: true in 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?
Scan the bus. In ESPHome, add "scan: true" to the i2c: block and read the addresses off the boot log. On Arduino, the classic I2C scanner sketch does the same. Scanning beats trusting the datasheet, because breakout board makers sometimes strap address pins differently from the bare chip's default.
Can two identical sensors share one bus?
Only if the part's address can be changed and you strap each one differently. Two identical fixed-address parts can never share a bus directly — that is the textbook case for a TCA9548A multiplexer, or for putting one on the host's second I²C bus if it has one.
Do I²C addresses conflict across different buses?
No. An address only needs to be unique per bus. The ESP32 has two I²C peripherals, so two conflicting parts can simply live on one bus each — often the cheapest way out of a hard conflict.

More guides