Адреса I2C модулей
Адрес по умолчанию, какие ещё можно выставить и чем. Адрес своего модуля без таблицы найдёт тестер платы: он опрашивает всю шину.
Модули и их адреса
В таблице 47 модулей.
| Адрес | Модуль | Как сменить адрес |
|---|---|---|
| 0x270x20-0x27 | LCD1602 и LCD2004 с переходником I2CPCF8574T, дисплей 16×2 или 20×4 | Перемычки A0, A1, A2 на переходнике: запаянная перемычка ставит бит в 0, все разомкнуты дают 0x27.NXP PCF8574/PCF8574A, раздел адресации |
| 0x3F0x38-0x3F | LCD1602 с переходником на PCF8574ATPCF8574AT, дисплей 16×2 или 20×4 | Те же перемычки A0-A2, адреса 0x38-0x3F. Какой чип стоит, видно по надписи на корпусе.NXP PCF8574/PCF8574A, раздел адресации |
| 0x3C0x3D | OLED 0,96″ и 0,91″SSD1306, дисплей 128×64 и 128×32 | Резистор на обороте (подпись 0x78/0x7A): перепайка на другую площадку даёт 0x3D. На плате пишут 8-битный адрес, 0x78 это 0x3C.Solomon Systech SSD1306, вывод SA0 |
| 0x3C0x3D | OLED 1,3″SH1106, дисплей 128×64 | Резистор адреса на обороте, как у SSD1306.Sino Wealth SH1106, вывод SA0 |
| 0x680x69 | GY-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-0x57 | EEPROM AT24C32, AT24C256AT24Cxx, память 4-32 КБ | Выводы A0-A2: на GND 0x50, каждый на VCC прибавляет 1, 2 или 4.Microchip AT24C32D, AT24C256C |
| 0x760x77 | GY-BME280 и GY-BMP280BME280, BMP280, давление, температура, влажность (BME) | Вывод SDO: на GND 0x76, на VCC 0x77. На 4-выводных платах перемычка на обороте.Bosch BME280 и BMP280 datasheet, раздел I2C |
| 0x760x77 | BME680, BME688, BMP388, BMP390Bosch, давление, газ, температура | Вывод SDO: на GND 0x76, на VCC 0x77. У платы Adafruit по умолчанию 0x77.Bosch BME680, BMP388 datasheet |
| 0x77 | GY-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, 0x4B | ADS1115 и ADS1015ADS1115, АЦП 16 бит, 4 канала | Вывод ADDR: на GND 0x48, на VDD 0x49, на SDA 0x4A, на SCL 0x4B.TI ADS111x, таблица 4 |
| 0x400x40-0x4F | INA219INA219, ток и напряжение | Выводы A0 и A1 (GND, VS+, SDA, SCL): 16 адресов. На модулях перемычки A0 и A1.TI INA219, таблица 1 |
| 0x400x40-0x4F | INA226INA226, ток и напряжение | Выводы A0 и A1, как у INA219.TI INA226, таблица 6 |
| 0x29 | GY-VL53L0XV2VL53L0X, лазерный дальномер | Адрес меняется только командой после включения и сбрасывается при выключении. Несколько датчиков включают по очереди выводом XSHUT и каждому задают свой адрес.ST VL53L0X datasheet, API setDeviceAddress |
| 0x29 | VL53L1XVL53L1X, лазерный дальномер до 4 м | Как у VL53L0X: адрес задаётся командой через XSHUT.ST VL53L1X datasheet |
| 0x230x5C | GY-302 (BH1750)BH1750, освещённость | Вывод ADDR: на GND 0x23, на VCC 0x5C.ROHM BH1750FVI |
| 0x36 | Датчик угла AS5600AS5600, магнитный энкодер | Адрес не меняется (у AS5600L меняется командой).ams OSRAM AS5600 |
| 0x36 | MAX17048MAX17048, уровень заряда LiPo | Адрес не меняется.Analog Devices (Maxim) MAX17048 |
| 0x0D | GY-271 (QMC5883L)QMC5883L, компас | Адрес не меняется. Платы GY-271 бывают на QMC5883L и на HMC5883L (0x1E): чип виден по надписи, библиотека для HMC5883L с QMC5883L не работает.QST QMC5883L |
| 0x1E | HMC5883LHMC5883L, компас | Адрес не меняется.Honeywell HMC5883L |
| 0x380x39 | AHT20 и AHT10AHT20, температура и влажность | У AHT20 адрес не меняется. У AHT10 вывод ADDR даёт 0x39.Aosong AHT20 и AHT10 datasheet |
| 0x440x45 | SHT31, SHT30SHT3x, температура и влажность | Вывод ADDR: на GND 0x44, на VDD 0x45.Sensirion SHT3x-DIS |
| 0x440x45, 0x46 | SHT40, SHT41, SHT45SHT4x, температура и влажность | Адрес зашит в чип: SHT40-AD1B 0x44, BD1B 0x45, CD1B 0x46.Sensirion SHT4x |
| 0x40 | HTU21D, 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 |
| 0x57 | MAX30102MAX30102, пульс и кислород | Адрес не меняется.Analog Devices (Maxim) MAX30102 |
| 0x39 | APDS-9960APDS-9960, жесты, цвет, приближение | Адрес не меняется.Broadcom APDS-9960 |
| 0x5A0x5B | CCS811CCS811, качество воздуха | Вывод ADDR: на GND 0x5A, на VDD 0x5B.ScioSense CCS811 |
| 0x58 | SGP30SGP30, качество воздуха | Адрес не меняется.Sensirion SGP30 |
| 0x62 | SCD40, SCD41SCD4x, CO2 | Адрес не меняется.Sensirion SCD4x |
| 0x5A | MLX90614MLX90614, бесконтактный термометр | Адрес хранится в памяти датчика и меняется командой записи.Melexis MLX90614 |
| 0x530x1D | ADXL345ADXL345, акселерометр | Вывод SDO/ALT ADDRESS: на GND 0x53, на VCC 0x1D.Analog Devices ADXL345 |
| 0x180x19 | LIS3DHLIS3DH, акселерометр | Вывод SDO/SA0: на GND 0x18, на VCC 0x19.ST LIS3DH |
| 0x280x29 | BNO055BNO055, ориентация в пространстве | Вывод COM3: низкий уровень 0x28, высокий 0x29.Bosch BNO055 |
| 0x680x69 | MPU-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 |
| 0x10 | VEML7700VEML7700, освещённость | Адрес не меняется.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 |
| 0x29 | GY-VL53L0XV2, VL53L1X |
| 0x36 | Датчик угла AS5600, MAX17048 |
| 0x38 | AHT20 и AHT10, Сенсор экрана FT6206, FT6236 |
| 0x3C | OLED 0,96″ и 0,91″, OLED 1,3″ |
| 0x40 | Драйвер серво на 16 каналов, INA219, INA226, HTU21D, Si7021 |
| 0x44 | SHT31, SHT30, SHT40, SHT41, SHT45 |
| 0x48 | ADS1115 и ADS1015, Датчик температуры LM75, TMP102 |
| 0x5A | CCS811, MLX90614 |
| 0x68 | GY-521, Часы DS3231 (ZS-042), Часы DS1307 (Tiny RTC), MPU-9250, ICM-20948 |
| 0x70 | Мультиплексор TCA9548A, Матрицы и индикаторы на HT16K33 |
| 0x76 | GY-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 работает по одному проводу данных.