Aziz Bench

I²C address list and conflict checker

Add the chips and modules on your bus: the map shows which addresses they use, flags any two that clash and tells you how to move one. Below, the pull-up resistors for your speed and wiring.

Address conflicts
1
on 0x68
Devices
4
Addresses in use
3
Free addresses
109
Address map in use conflict reserved
0123456789ABCDEF
00000102030405060708090A0B0C0D0E0F
10101112131415161718191A1B1C1D1E1F
20202122232425262728292A2B2C2D2E2F
30303132333435363738393A3B3C3D3E3F
40404142434445464748494A4B4C4D4E4F
50505152535455565758595A5B5C5D5E5F
60606162636465666768696A6B6C6D6E6F
70707172737475767778797A7B7C7D7E7F
Devices on your bus
    Pull-up resistors
    Bus voltage
    Speed
    pF

    Add up the capacitance of every chip pin on the bus (at most 10 pF each, per the I²C specification) and of the wires.

    Ω

    Many breakout boards carry their own, often 4.7 kΩ or 10 kΩ. List them, e.g. 10k, 10k, 4k7: they add up in parallel.

    Conflicts and how to solve them

    Pull-up resistors

    How to set each address

    How I²C addresses work

    Every device on an I²C bus answers to a 7-bit address, from 0x08 to 0x77. Many chips let you pick one of two, four or eight addresses by tying pins to ground or to the supply; others have a single fixed address. Two devices on the same address answer at the same time, and both readings are garbage.

    Some datasheets give 8-bit values, the address shifted left with the read/write bit added: the VL53L0X is listed as 0x52/0x53, the BMP180 as 0xEE/0xEF. Shift right by one to get the 7-bit address libraries and scanners use: 0x29 and 0x77.

    Reserved addresses

    Address
    0x00General call (write) or START byte (read)
    0x01CBUS address
    0x02Reserved for a different bus format
    0x03Reserved for future purposes
    0x04–0x07Hs-mode controller code
    0x78–0x7B10-bit target addressing
    0x7C–0x7FDevice ID

    From the NXP I²C-bus specification (UM10204). Use only 0x08 to 0x77 for your devices.

    When two devices clash

    First look for an address pin: moving one device is the cleanest fix. If both addresses are fixed, as with a DS3231 clock and a DS1307, or you need two identical sensors with no address pin, use a TCA9548A multiplexer, which gives you eight separate branches behind one address, or put the second device on another I²C bus. The ESP32, ESP32-S3 and RP2040 have two I²C controllers; the ESP32-C3 has one.

    Finding what is on your bus

    In ESPHome, the i2c component scans the bus at boot and lists the addresses it finds in the log. In Arduino, the classic I2C scanner sketch does the same over the serial monitor. If a device doesn’t show up, check power, SDA and SCL, the pull-ups and its address pin.

    Pull-up resistors

    I²C lines are open-drain: chips only pull them low, and resistors pull them back up. Too strong a pull-up and the chips can’t pull the line low enough; too weak and the line rises too slowly for the speed. The specification gives both limits.

    Rmin = (VDD − 0.4 V) ÷ 3 mA        (VDD > 2 V; 20 mA at 1 MHz)
    Rmax = tr ÷ (0.8473 × Cbus)
    tr = 1000 ns at 100 kHz, 300 ns at 400 kHz, 120 ns at 1 MHz

    All the devices in the list

    Address
    QMC5883L3-axis magnetometer0x0Dfixed address
    VEML6075UVA/UVB light sensor0x10fixed address
    VEML7700high-accuracy ambient light sensor0x10fixed address
    LIS2DH123-axis accelerometer0x18, 0x19SA0: GND → 0x18 · VDD → 0x19
    MCP9808digital temperature sensor0x18–0x1FA2 A1 A0 → 0x18–0x1F
    MMA8451Q3-axis accelerometer0x1C, 0x1DSA0: GND → 0x1C · VDD → 0x1D
    ADXL3453-axis accelerometer0x1D, 0x53ALT ADDRESS: GND → 0x53 · VDD → 0x1D
    MCP230088-bit I/O expander0x20–0x27A2 A1 A0 → 0x20–0x27
    MCP2301716-bit I/O expander0x20–0x27A2 A1 A0 → 0x20–0x27
    PCF85748-bit I/O expander (I2C LCD backpacks)0x20–0x27A2 A1 A0 → 0x20–0x27
    PCF857516-bit I/O expander0x20–0x27A2 A1 A0 → 0x20–0x27
    TCA955516-bit I/O expander with interrupt0x20–0x27A2 A1 A0 → 0x20–0x27
    BH1750FVI (BH1750)ambient light sensor0x23, 0x5CADDR: GND → 0x23 · VCC → 0x5C
    PN532NFC/RFID controller (I2C mode)0x24fixed address
    BNO0559-axis absolute orientation sensor with fusion0x28, 0x29COM3: GND → 0x28 · VDD → 0x29
    TCS34725RGB colour sensor0x29fixed address
    TSL2561ambient light sensor (visible and infrared)0x29, 0x39, 0x49ADDR SEL: GND → 0x29 · Float → 0x39 · VDD → 0x49
    VL53L0Xtime-of-flight distance sensor0x29
    VL53L1Xtime-of-flight distance sensor0x29
    MLX9064032x24 thermal camera0x33
    AXP192power management IC (PMIC)0x34fixed address
    AXP2101power management IC (PMIC)0x34fixed address
    MAX17048 / MAX170491-cell / 2-cell Li-ion fuel gauge0x36fixed address
    AHT20temperature and humidity sensor0x38fixed address
    PCF8574A8-bit I/O expander, alternate address range0x38–0x3FA2 A1 A0 → 0x38–0x3F
    VEML6070UV light sensor0x38fixed address
    APDS-9960gesture, proximity, ambient light and RGB sensor0x39fixed address
    SH1106132x64 OLED controller0x3C, 0x3DSA0: GND → 0x3C · VDD → 0x3D
    SSD1306128x64 / 128x32 OLED controller0x3C, 0x3DSA0 (D/C#): GND → 0x3C · VDD → 0x3D
    SSD1309128x64 OLED controller0x3C, 0x3DSA0 (D/C#): GND → 0x3C · VDD → 0x3D
    SX150916-channel I/O expander with LED driver and keypad engine0x3E, 0x3F, 0x70, 0x71ADDR1 ADDR0: 00 → 0x3E · 01 → 0x3F · 10 → 0x70 · 11 → 0x71
    HDC1080temperature and humidity sensor0x40fixed address
    HTU21Dtemperature and humidity sensor0x40fixed address
    INA219current/voltage/power monitor0x40–0x4FA1, A0: GND · VS · SDA · SCL → 0x40–0x4F
    INA226current/voltage/power monitor0x40–0x4FA1, A0: GND · VS · SDA · SCL → 0x40–0x4F
    INA260current/voltage/power monitor with integrated shunt0x40–0x4FA1, A0: GND · VS · SDA · SCL → 0x40–0x4F
    INA32213-channel current/voltage monitor0x40, 0x41, 0x42, 0x43A0: GND → 0x40 · VS → 0x41 · SDA → 0x42 · SCL → 0x43
    PCA968516-channel 12-bit PWM / servo driver0x40–0x77A5…A0 → 0x40–0x77 (0x70 = All Call)
    Si7021temperature and humidity sensor0x40fixed address
    OPT3001ambient light sensor0x44, 0x45, 0x46, 0x47ADDR: GND → 0x44 · VDD → 0x45 · SDA → 0x46 · SCL → 0x47
    SHT30 / SHT31 / SHT35temperature and humidity sensor0x44, 0x45ADDR: GND → 0x44 · VDD → 0x45
    SHT40 / SHT41 / SHT43 / SHT45 (SHT4x)temperature and humidity sensor0x44, 0x45, 0x46
    ADS101512-bit 4-channel ADC0x48, 0x49, 0x4A, 0x4BADDR: GND → 0x48 · VDD → 0x49 · SDA → 0x4A · SCL → 0x4B
    ADS111516-bit 4-channel ADC0x48, 0x49, 0x4A, 0x4BADDR: GND → 0x48 · VDD → 0x49 · SDA → 0x4A · SCL → 0x4B
    ADS78308-bit 8-channel ADC0x48, 0x49, 0x4A, 0x4BA1 A0 → 0x48–0x4B
    LM75Bdigital temperature sensor / thermostat0x48–0x4FA2 A1 A0 → 0x48–0x4F
    PCF85918-bit 4-channel ADC + 1 DAC0x48–0x4FA2 A1 A0 → 0x48–0x4F
    TMP102digital temperature sensor0x48, 0x49, 0x4A, 0x4BADD0: GND → 0x48 · V+ → 0x49 · SDA → 0x4A · SCL → 0x4B
    TMP117high-accuracy digital temperature sensor0x48, 0x49, 0x4A, 0x4BADD0: GND → 0x48 · V+ → 0x49 · SDA → 0x4A · SCL → 0x4B
    24LC256 / 24AA256 / 24FC256256-Kbit I2C EEPROM0x50–0x57A2 A1 A0 → 0x50–0x57
    AT24C3232-Kbit I2C EEPROM0x50–0x57A2 A1 A0 → 0x50–0x57
    PCF85063Areal-time clock0x51fixed address
    PCF8563real-time clock0x51fixed address
    ENS160metal-oxide air quality (TVOC/eCO2/AQI) sensor0x52, 0x53ADDR: GND → 0x52 · VDD → 0x53
    BQ27441-G1single-cell Li-ion fuel gauge0x55fixed address
    MAX30100pulse oximeter and heart-rate sensor0x57fixed address
    MAX30102pulse oximeter and heart-rate sensor0x57fixed address
    SGP30VOC and eCO2 gas sensor0x58fixed address
    SGP40VOC index gas sensor0x59fixed address
    SGP41VOC and NOx index gas sensor0x59fixed address
    CCS811eCO2 / TVOC gas sensor0x5A, 0x5BADDR: GND → 0x5A · VDD → 0x5B
    MLX90614non-contact infrared thermometer0x5A
    MPR12112-channel capacitive touch sensor controller0x5A, 0x5B, 0x5C, 0x5DADDR: GND → 0x5A · VDD → 0x5B · SDA → 0x5C · SCL → 0x5D
    LPS22HBbarometric pressure sensor0x5C, 0x5DSA0: GND → 0x5C · VDD → 0x5D
    GT9115-point capacitive touch screen controller0x5D, 0x14
    MCP472512-bit DAC with EEPROM0x60–0x67A0: GND → 0x60 · VDD → 0x61 (MCP4725A0)
    MCP472812-bit quad DAC with EEPROM0x60–0x67
    SCD30NDIR CO2, temperature and humidity module0x61fixed address
    SCD40 / SCD41photoacoustic CO2, temperature and humidity sensor0x62fixed address
    BMI2706-axis IMU0x68, 0x69SDO: GND → 0x68 · VDDIO → 0x69
    DS1307real-time clock0x68fixed address
    DS3231temperature-compensated real-time clock0x68fixed address
    MPU-60506-axis accelerometer + gyroscope0x68, 0x69AD0: GND → 0x68 · VDD → 0x69
    MPU-68866-axis IMU0x68, 0x69SA0: GND → 0x68 · VDD → 0x69
    MPU-92509-axis IMU (accel + gyro + AK8963 magnetometer)0x68, 0x69AD0: GND → 0x68 · VDD → 0x69
    PCF8523real-time clock0x68fixed address
    SEN50 / SEN54 / SEN55particulate matter, VOC/NOx, temperature and humidity module0x69fixed address
    HT16K3316x8 LED matrix driver with key scan0x70–0x77A2 A1 A0 → 0x70–0x77
    SHTC3temperature and humidity sensor0x70fixed address
    TCA9548A8-channel I2C multiplexer0x70–0x77A2 A1 A0 → 0x70–0x77
    IP5306power-bank charger/boost SoC, I2C-enabled variant0x75fixed address
    BME280temperature, humidity and pressure sensor0x76, 0x77SDO: GND → 0x76 · VDDIO → 0x77
    BME680gas (VOC), temperature, humidity and pressure sensor0x76, 0x77SDO: GND → 0x76 · VDDIO → 0x77
    BME688AI gas, temperature, humidity and pressure sensor0x76, 0x77SDO: GND → 0x76 · VDDIO → 0x77
    BMP280pressure and temperature sensor0x76, 0x77SDO: GND → 0x76 · VDDIO → 0x77
    BMP388pressure and temperature sensor0x76, 0x77SDO: GND → 0x76 · VDDIO → 0x77
    MS5611-01BAbarometric pressure sensor (altimeter)0x76, 0x77CSB: VDD → 0x76 · GND → 0x77
    BMP180pressure and temperature sensor0x77fixed address

    Frequently asked questions

    Why does the datasheet say 0x52 but the scanner finds 0x29?

    The datasheet gives the 8-bit write address, which is the 7-bit address shifted left by one. 0x52 ÷ 2 = 0x29. Libraries and scanners use the 7-bit form.

    Can two identical sensors share a bus?

    Yes, if the sensor has an address pin: set it differently on each. If it doesn’t, use a TCA9548A multiplexer or a second I²C bus.

    My I²C LCD is at 0x3F, not 0x27: why?

    The backpack has a PCF8574AT instead of a PCF8574T. The A version uses 0x38–0x3F instead of 0x20–0x27; with all address pins high that is 0x3F instead of 0x27.

    Do I need pull-ups if my modules already have them?

    Usually not: one set per bus is enough. With many modules their pull-ups add up in parallel and can become too strong; the calculator above checks that.