Адреса I2C модулей

Адрес по умолчанию, какие ещё можно выставить и чем. Адрес своего модуля без таблицы найдёт тестер платы: он опрашивает всю шину.

Модули и их адреса

В таблице 47 модулей.

АдресМодульКак сменить адрес
0x270x20-0x27LCD1602 и LCD2004 с переходником I2CPCF8574T, дисплей 16×2 или 20×4Перемычки A0, A1, A2 на переходнике: запаянная перемычка ставит бит в 0, все разомкнуты дают 0x27.NXP PCF8574/PCF8574A, раздел адресации
0x3F0x38-0x3FLCD1602 с переходником на PCF8574ATPCF8574AT, дисплей 16×2 или 20×4Те же перемычки A0-A2, адреса 0x38-0x3F. Какой чип стоит, видно по надписи на корпусе.NXP PCF8574/PCF8574A, раздел адресации
0x3C0x3DOLED 0,96″ и 0,91″SSD1306, дисплей 128×64 и 128×32Резистор на обороте (подпись 0x78/0x7A): перепайка на другую площадку даёт 0x3D. На плате пишут 8-битный адрес, 0x78 это 0x3C.Solomon Systech SSD1306, вывод SA0
0x3C0x3DOLED 1,3″SH1106, дисплей 128×64Резистор адреса на обороте, как у SSD1306.Sino Wealth SH1106, вывод SA0
0x680x69GY-521MPU-6050, акселерометр и гироскопВывод AD0: на GND или в воздухе 0x68, на VCC 0x69.InvenSense MPU-6000/6050 Product Specification, AD0
0x68Часы DS3231 (ZS-042)DS3231, часы реального времениАдрес часов не меняется. На модуле ZS-042 ещё EEPROM AT24C32 на 0x57, перемычки A0-A2 дают 0x50-0x57.Analog Devices (Maxim) DS3231
0x68Часы DS1307 (Tiny RTC)DS1307, часы реального времениАдрес не меняется. На модуле Tiny RTC ещё EEPROM AT24C32 на 0x50.Analog Devices (Maxim) DS1307
0x51Часы PCF8563PCF8563, часы реального времениАдрес не меняется.NXP PCF8563
0x500x50-0x57EEPROM AT24C32, AT24C256AT24Cxx, память 4-32 КБВыводы A0-A2: на GND 0x50, каждый на VCC прибавляет 1, 2 или 4.Microchip AT24C32D, AT24C256C
0x760x77GY-BME280 и GY-BMP280BME280, BMP280, давление, температура, влажность (BME)Вывод SDO: на GND 0x76, на VCC 0x77. На 4-выводных платах перемычка на обороте.Bosch BME280 и BMP280 datasheet, раздел I2C
0x760x77BME680, BME688, BMP388, BMP390Bosch, давление, газ, температураВывод SDO: на GND 0x76, на VCC 0x77. У платы Adafruit по умолчанию 0x77.Bosch BME680, BMP388 datasheet
0x77GY-68 (BMP180)BMP180, давление и температураАдрес не меняется.Bosch BMP180 datasheet
0x400x40-0x77Драйвер серво на 16 каналовPCA9685, 16 каналов ШИМШесть перемычек A0-A5 на плате, запаянная прибавляет к 0x40 свой бит: A0 даёт 1, A5 даёт 32. Адрес 0x70 после включения занят общим вызовом всех PCA9685 (ALLCALL), его не ставят.NXP PCA9685, раздел 7.1
0x480x49, 0x4A, 0x4BADS1115 и ADS1015ADS1115, АЦП 16 бит, 4 каналаВывод ADDR: на GND 0x48, на VDD 0x49, на SDA 0x4A, на SCL 0x4B.TI ADS111x, таблица 4
0x400x40-0x4FINA219INA219, ток и напряжениеВыводы A0 и A1 (GND, VS+, SDA, SCL): 16 адресов. На модулях перемычки A0 и A1.TI INA219, таблица 1
0x400x40-0x4FINA226INA226, ток и напряжениеВыводы A0 и A1, как у INA219.TI INA226, таблица 6
0x29GY-VL53L0XV2VL53L0X, лазерный дальномерАдрес меняется только командой после включения и сбрасывается при выключении. Несколько датчиков включают по очереди выводом XSHUT и каждому задают свой адрес.ST VL53L0X datasheet, API setDeviceAddress
0x29VL53L1XVL53L1X, лазерный дальномер до 4 мКак у VL53L0X: адрес задаётся командой через XSHUT.ST VL53L1X datasheet
0x230x5CGY-302 (BH1750)BH1750, освещённостьВывод ADDR: на GND 0x23, на VCC 0x5C.ROHM BH1750FVI
0x36Датчик угла AS5600AS5600, магнитный энкодерАдрес не меняется (у AS5600L меняется командой).ams OSRAM AS5600
0x36MAX17048MAX17048, уровень заряда LiPoАдрес не меняется.Analog Devices (Maxim) MAX17048
0x0DGY-271 (QMC5883L)QMC5883L, компасАдрес не меняется. Платы GY-271 бывают на QMC5883L и на HMC5883L (0x1E): чип виден по надписи, библиотека для HMC5883L с QMC5883L не работает.QST QMC5883L
0x1EHMC5883LHMC5883L, компасАдрес не меняется.Honeywell HMC5883L
0x380x39AHT20 и AHT10AHT20, температура и влажностьУ AHT20 адрес не меняется. У AHT10 вывод ADDR даёт 0x39.Aosong AHT20 и AHT10 datasheet
0x440x45SHT31, SHT30SHT3x, температура и влажностьВывод ADDR: на GND 0x44, на VDD 0x45.Sensirion SHT3x-DIS
0x440x45, 0x46SHT40, SHT41, SHT45SHT4x, температура и влажностьАдрес зашит в чип: SHT40-AD1B 0x44, BD1B 0x45, CD1B 0x46.Sensirion SHT4x
0x40HTU21D, Si7021HTU21D, температура и влажностьАдрес не меняется.TE HTU21D, Silicon Labs Si7021
0x200x20-0x27Расширитель MCP23017MCP23017, 16 GPIOВыводы A0-A2: 8 адресов.Microchip MCP23017
0x200x20-0x27Расширитель PCF8574PCF8574, 8 GPIOВыводы A0-A2. У PCF8574A адреса 0x38-0x3F.NXP PCF8574/PCF8574A
0x600x60-0x67ЦАП MCP4725MCP4725, ЦАП 12 битВывод A0 даёт 0x60 или 0x61, старшие биты зашиты в чип (буква A0, A1, A2 в маркировке). У Adafruit и многих клонов 0x62 и 0x63.Microchip MCP4725, раздел 7.2
0x700x70-0x77Мультиплексор TCA9548ATCA9548A, 8 отдельных шин I2CВыводы A0-A2. Ставят, когда у двух модулей один адрес: каждый на своём канале.TI TCA9548A
0x700x70-0x77Матрицы и индикаторы на HT16K33HT16K33, светодиодные индикаторыПеремычки A0-A2.Holtek HT16K33
0x57MAX30102MAX30102, пульс и кислородАдрес не меняется.Analog Devices (Maxim) MAX30102
0x39APDS-9960APDS-9960, жесты, цвет, приближениеАдрес не меняется.Broadcom APDS-9960
0x5A0x5BCCS811CCS811, качество воздухаВывод ADDR: на GND 0x5A, на VDD 0x5B.ScioSense CCS811
0x58SGP30SGP30, качество воздухаАдрес не меняется.Sensirion SGP30
0x62SCD40, SCD41SCD4x, CO2Адрес не меняется.Sensirion SCD4x
0x5AMLX90614MLX90614, бесконтактный термометрАдрес хранится в памяти датчика и меняется командой записи.Melexis MLX90614
0x530x1DADXL345ADXL345, акселерометрВывод SDO/ALT ADDRESS: на GND 0x53, на VCC 0x1D.Analog Devices ADXL345
0x180x19LIS3DHLIS3DH, акселерометрВывод SDO/SA0: на GND 0x18, на VCC 0x19.ST LIS3DH
0x280x29BNO055BNO055, ориентация в пространствеВывод COM3: низкий уровень 0x28, высокий 0x29.Bosch BNO055
0x680x69MPU-9250, ICM-20948InvenSense, 9 осейВывод AD0: на GND 0x68, на VCC 0x69.InvenSense MPU-9250, ICM-20948
0x480x48-0x4FДатчик температуры LM75, TMP102LM75, температураУ LM75 выводы A0-A2 (0x48-0x4F), у TMP102 вывод ADD0 (0x48-0x4B).TI LM75B, TMP102
0x10VEML7700VEML7700, освещённостьАдрес не меняется.Vishay VEML7700
0x38Сенсор экрана FT6206, FT6236FT6x06, ёмкостный сенсор экранаАдрес не меняется.FocalTech FT6x06
0x5D0x14Сенсор экрана GT911GT911, ёмкостный сенсор экранаВыбирается уровнем на INT в момент сброса: 0x5D или 0x14.Goodix GT911 Programming Guide
0x52Джойстик Wii NunchukNunchuk, джойстик и кнопкиАдрес не меняется.описание протокола Nunchuk (wiibrew.org)

Один адрес у разных модулей

На одной шине у каждого модуля свой адрес. Если два модуля отвечают на один, смените адрес у одного из них перемычкой или поставьте мультиплексор TCA9548A.

АдресМодули по умолчанию
0x20Расширитель MCP23017, Расширитель PCF8574
0x29GY-VL53L0XV2, VL53L1X
0x36Датчик угла AS5600, MAX17048
0x38AHT20 и AHT10, Сенсор экрана FT6206, FT6236
0x3COLED 0,96″ и 0,91″, OLED 1,3″
0x40Драйвер серво на 16 каналов, INA219, INA226, HTU21D, Si7021
0x44SHT31, SHT30, SHT40, SHT41, SHT45
0x48ADS1115 и ADS1015, Датчик температуры LM75, TMP102
0x5ACCS811, MLX90614
0x68GY-521, Часы DS3231 (ZS-042), Часы DS1307 (Tiny RTC), MPU-9250, ICM-20948
0x70Мультиплексор TCA9548A, Матрицы и индикаторы на HT16K33
0x76GY-BME280 и GY-BMP280, BME680, BME688, BMP388, BMP390

Как читать таблицу адресов

Адрес в таблице семибитный, его пишут в Wire.beginTransmission, в конструктор библиотеки и видят в I2C-сканере. На платах и в даташитах иногда стоит восьмибитная запись: адрес, сдвинутый на один бит влево. 0x78 на обороте OLED означает 0x3C, 0x4E у переходника LCD означает 0x27. Поиск понимает обе записи.

На одной шине у каждого модуля должен быть свой адрес. Второй адрес выставляют перемычкой или выводом модуля (AD0, SDO, ADDR, A0-A2): запаянная перемычка или вывод на GND и на VCC дают разные адреса. Если адрес у модуля один, ставят мультиплексор TCA9548A: он раздаёт восемь отдельных шин.

Примеры

  • LCD1602 не отвечает на 0x27. На переходнике чип PCF8574AT, у него адреса 0x38-0x3F, по умолчанию 0x3F.
  • MPU-6050 и часы DS3231 на одной шине: оба на 0x68. Вывод AD0 датчика подключают к VCC, датчик уходит на 0x69, в коде пишут mpu.begin(0x69).
  • На модуле часов ZS-042 сканер находит два адреса: 0x68 у DS3231 и 0x57 у памяти AT24C32 на той же плате.

Частые ошибки

  • Берут адрес с наклейки или из описания магазина. Проверьте сканером: у одинаковых на вид модулей стоят разные чипы.
  • Ставят на одну шину пять модулей с подтяжками 4,7 кОм на каждом. Подтяжки включаются параллельно, вместе около 940 Ом, и при 3,3 В выход тянет 3,5 мА. По стандарту I2C (NXP UM10204) выход в обычном режиме обязан выдержать 3 мА. Лишние подтяжки на модулях выпаивают.

Частые вопросы

Как узнать адрес I2C своего модуля?
Запустите I2C-сканер: он опрашивает адреса 0x08-0x77 и печатает те, где модуль ответил. Сканер есть в тестере платы на этом сайте, прошивка заливается из браузера, писать скетч не нужно.
Какой адрес у LCD1602 с I2C?
0x27 у переходника на PCF8574T и 0x3F у переходника на PCF8574AT. Перемычками A0-A2 адрес меняется в пределах 0x20-0x27 или 0x38-0x3F.
Какой адрес у OLED 0,96 на SSD1306?
0x3C. Перепайка резистора адреса на обороте даёт 0x3D. Надпись 0x78 на плате означает тот же 0x3C в восьмибитной записи.
Что делать, если у двух модулей один адрес?
Смените адрес у одного из них перемычкой, если она есть (таблица выше). Если адрес не меняется, как у DS3231, AS5600 или BMP180, поставьте мультиплексор TCA9548A или перенесите модуль на второй I2C: у ESP32 их два, у Raspberry Pi Pico тоже.
TM1637 и WS2812 тоже I2C?
Нет. У TM1637 свой протокол на двух проводах CLK и DIO без адресов, сканер его не находит. WS2812 работает по одному проводу данных.

Пригодится ещё