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
| Module | Default | Possible | How to change |
|---|---|---|---|
| LCD backpack PCF8574 Display | 0x27 | 0x20–0x27 | Solder jumpers A0–A2 on the backpack (bridged = 0). Most ship at 0x27. |
| LCD backpack PCF8574A Display | 0x3F | 0x38–0x3F | Same 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 | 0x3C | 0x3C, 0x3D | Resistor on the back marked 0x78/0x7A (8-bit write addresses = 0x3C/0x3D). |
| SH1106 1.3" OLED Display | 0x3C | 0x3C, 0x3D | Resistor jumper on the back, like the SSD1306. |
| BME280 / BMP280 Environment | 0x76 | 0x76, 0x77 | SDO to GND = 0x76, SDO to VCC = 0x77. Adafruit boards default to 0x77. |
| AHT20 / AHT10 Environment | 0x38 | 0x38 | Fixed. |
| SHT31 / SHT30 Environment | 0x44 | 0x44, 0x45 | ADDR pin low = 0x44, high = 0x45. |
| BH1750 light sensor Environment | 0x23 | 0x23, 0x5C | ADDR pin low/floating = 0x23, high = 0x5C. |
| MPU6050 accel + gyro Motion | 0x68 | 0x68, 0x69 | AD0 low = 0x68, high = 0x69. conflict Same default as the DS3231 RTC (0x68). Pull AD0 high to move the MPU6050 to 0x69. |
| DS3231 RTC Clock | 0x68 | 0x68 | Fixed. Many modules also carry an AT24C32 EEPROM at 0x57. conflict Clashes with the MPU6050 at 0x68 — move the MPU6050 to 0x69. |
| DS1307 RTC Clock | 0x68 | 0x68 | Fixed. conflict Same as DS3231 / MPU6050. |
| AT24C32 EEPROM (on RTC modules) Memory | 0x57 | 0x50–0x57 | A0–A2 pads on the RTC board (open = 1, so 0x57). |
| ADS1115 / ADS1015 ADC Analog | 0x48 | 0x48, 0x49, 0x4A, 0x4B | ADDR pin to GND 0x48, VDD 0x49, SDA 0x4A, SCL 0x4B. |
| INA219 current sensor Power | 0x40 | 0x40–0x4F | A0/A1 pads give 16 addresses from 0x40 to 0x4F. conflict Default 0x40 equals the PCA9685. |
| PCA9685 16-channel PWM / servo Actuator | 0x40 | 0x40, 0x70 | A0–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 | 0x70 | 0x70–0x77 | A0–A2 pins. Use it to run several identical sensors on one bus. |
| VL53L0X / VL53L1X ToF Distance | 0x29 | 0x29 | Changeable in software only, after each boot (hold the others in reset via XSHUT). |
| MAX30102 pulse oximeter Health | 0x57 | 0x57 | Fixed. conflict Same as the AT24C32 EEPROM on many RTC modules. |
| MCP23017 I/O expander Expander | 0x20 | 0x20–0x27 | A0–A2 pins. conflict Range overlaps the PCF8574 LCD backpacks (0x20–0x27). |
| HMC5883L / QMC5883L compass Motion | 0x1E | 0x1E, 0x0D | Fixed per chip — HMC5883L 0x1E, the common QMC5883L clone 0x0D (needs a different library). |
| PN532 NFC (I2C mode) RFID | 0x24 | 0x24 | Fixed. 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
Wireand 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.