Preview build — page text is a draft awaiting human review. Code badges come from real compiles. The flasher is real but not yet hardware-tested; the Playground is still a preview.

I2C address table

Search a module or an address. See its default, the alternatives, how to change it and what it clashes with.

21 modules

ModuleDefaultPossibleHow to change
LCD backpack PCF8574
Display
0x270x20–0x27Solder jumpers A0–A2 on the backpack (bridged = 0). Most ship at 0x27.
LCD backpack PCF8574A
Display
0x3F0x38–0x3FSame A0–A2 jumpers. The "A" chip variant answers at 0x38–0x3F.
conflict 0x3C/0x3D overlap the SSD1306 OLED if jumpers are set that way; 0x38 overlaps the AHT20.
SSD1306 OLED 128×64 / 128×32
Display
0x3C0x3C, 0x3DResistor on the back marked 0x78/0x7A (8-bit write addresses = 0x3C/0x3D).
SH1106 1.3" OLED
Display
0x3C0x3C, 0x3DResistor jumper on the back, like the SSD1306.
BME280 / BMP280
Environment
0x760x76, 0x77SDO to GND = 0x76, SDO to VCC = 0x77. Adafruit boards default to 0x77.
AHT20 / AHT10
Environment
0x380x38Fixed.
SHT31 / SHT30
Environment
0x440x44, 0x45ADDR pin low = 0x44, high = 0x45.
BH1750 light sensor
Environment
0x230x23, 0x5CADDR pin low/floating = 0x23, high = 0x5C.
MPU6050 accel + gyro
Motion
0x680x68, 0x69AD0 low = 0x68, high = 0x69.
conflict Same default as the DS3231 RTC (0x68). Pull AD0 high to move the MPU6050 to 0x69.
DS3231 RTC
Clock
0x680x68Fixed. Many modules also carry an AT24C32 EEPROM at 0x57.
conflict Clashes with the MPU6050 at 0x68 — move the MPU6050 to 0x69.
DS1307 RTC
Clock
0x680x68Fixed.
conflict Same as DS3231 / MPU6050.
AT24C32 EEPROM (on RTC modules)
Memory
0x570x50–0x57A0–A2 pads on the RTC board (open = 1, so 0x57).
ADS1115 / ADS1015 ADC
Analog
0x480x48, 0x49, 0x4A, 0x4BADDR pin to GND 0x48, VDD 0x49, SDA 0x4A, SCL 0x4B.
INA219 current sensor
Power
0x400x40–0x4FA0/A1 pads give 16 addresses from 0x40 to 0x4F.
conflict Default 0x40 equals the PCA9685.
PCA9685 16-channel PWM / servo
Actuator
0x400x40, 0x70A0–A5 pads give 0x40–0x7F. It also answers the "all-call" address 0x70.
conflict All-call 0x70 overlaps the TCA9548A default — disable all-call or move the mux.
TCA9548A I2C multiplexer
Bus
0x700x70–0x77A0–A2 pins. Use it to run several identical sensors on one bus.
VL53L0X / VL53L1X ToF
Distance
0x290x29Changeable in software only, after each boot (hold the others in reset via XSHUT).
MAX30102 pulse oximeter
Health
0x570x57Fixed.
conflict Same as the AT24C32 EEPROM on many RTC modules.
MCP23017 I/O expander
Expander
0x200x20–0x27A0–A2 pins.
conflict Range overlaps the PCF8574 LCD backpacks (0x20–0x27).
HMC5883L / QMC5883L compass
Motion
0x1E0x1E, 0x0DFixed per chip — HMC5883L 0x1E, the common QMC5883L clone 0x0D (needs a different library).
PN532 NFC (I2C mode)
RFID
0x240x24Fixed. Set the board’s mode switches to I2C.
conflict Inside the PCF8574/MCP23017 range.

How it works

Every device on an I2C bus needs a unique 7-bit address. Two parts with the same address on one bus will garble each other's replies — the classic pair is the MPU6050 and the DS3231 RTC, both at 0x68.

Fixing a clash

  • Move one part with its address pin or solder jumper (column "How to change").
  • If both are fixed, put them on separate buses (the ESP32 has two hardware I2C controllers) or behind a TCA9548A multiplexer.
  • Datasheets sometimes print 8-bit addresses (0x78 for the OLED). Arduino's Wire and MicroPython use the 7-bit form (0x3C) — shift right by one.

Not sure what your module answers to? Run the I2C scanner sketch; it prints every address it finds.

↑↓ to move · Enter to open