Comment régler l’adresse
Câblez les broches d’adresse ainsi :
A5…A0 → 0x40–0x77 (0x70 = All Call)
À la mise sous tension, il répond aussi à l’adresse All Call 0x70, qui entre en conflit avec un TCA9548A à son adresse par défaut. Désactivez All Call dans MODE1, ou déplacez le multiplexeur.
Périphériques qui utilisent les mêmes adresses
Deux périphériques sur le même bus ne peuvent pas répondre à la même adresse. Ces modules de notre liste utilisent au moins une de ces adresses :
| Périphérique | Description | Adresse partagée |
|---|---|---|
| HDC1080 | capteur de température et d’humidité | 0x40 |
| HTU21D | capteur de température et d’humidité | 0x40 |
| INA219 | moniteur de courant, de tension et de puissance | 0x40–0x4F (16) |
| INA226 | moniteur de courant, de tension et de puissance | 0x40–0x4F (16) |
| INA260 | moniteur de courant, de tension et de puissance avec shunt intégré | 0x40–0x4F (16) |
| INA3221 | moniteur de courant et de tension 3 canaux | 0x40, 0x41, 0x42, 0x43 |
| Si7021 | capteur de température et d’humidité | 0x40 |
| OPT3001 | capteur de lumière ambiante | 0x44, 0x45, 0x46, 0x47 |
| SHT30 / SHT31 / SHT35 | capteur de température et d’humidité | 0x44, 0x45 |
| SHT40 / SHT41 / SHT43 / SHT45 (SHT4x) | capteur de température et d’humidité | 0x44, 0x45, 0x46 |
Voir les 60 périphériques
| Périphérique | Description | Adresse partagée |
|---|---|---|
| ADS1015 | ADC 12 bits 4 canaux | 0x48, 0x49, 0x4A, 0x4B |
| ADS1115 | ADC 16 bits 4 canaux | 0x48, 0x49, 0x4A, 0x4B |
| ADS7830 | ADC 8 bits 8 canaux | 0x48, 0x49, 0x4A, 0x4B |
| LM75B | capteur de température numérique / thermostat | 0x48–0x4F (8) |
| PCF8591 | ADC 8 bits 4 canaux + 1 DAC | 0x48–0x4F (8) |
| TMP102 | capteur de température numérique | 0x48, 0x49, 0x4A, 0x4B |
| TMP117 | capteur de température numérique haute précision | 0x48, 0x49, 0x4A, 0x4B |
| TSL2561 | capteur de lumière ambiante (visible et infrarouge) | 0x49 |
| 24LC256 / 24AA256 / 24FC256 | EEPROM I²C 256 Kbit | 0x50–0x57 (8) |
| AT24C32 | EEPROM I²C 32 Kbit | 0x50–0x57 (8) |
| PCF85063A | horloge temps réel (RTC) | 0x51 |
| PCF8563 | horloge temps réel (RTC) | 0x51 |
| ENS160 | capteur de qualité de l’air à oxydes métalliques (TVOC/eCO₂/AQI) | 0x52, 0x53 |
| ADXL345 | accéléromètre 3 axes | 0x53 |
| BQ27441-G1 | jauge de batterie pour une cellule Li-ion | 0x55 |
| MAX30100 | oxymètre de pouls et capteur de fréquence cardiaque | 0x57 |
| MAX30102 | oxymètre de pouls et capteur de fréquence cardiaque | 0x57 |
| SGP30 | capteur de gaz VOC et eCO₂ | 0x58 |
| SGP40 | capteur de gaz, indice VOC | 0x59 |
| SGP41 | capteur de gaz, indices VOC et NOx | 0x59 |
| CCS811 | capteur de gaz eCO₂ / TVOC | 0x5A, 0x5B |
| MLX90614 | thermomètre infrarouge sans contact | 0x5A |
| MPR121 | contrôleur tactile capacitif 12 canaux | 0x5A, 0x5B, 0x5C, 0x5D |
| BH1750FVI (BH1750) | capteur de lumière ambiante | 0x5C |
| LPS22HB | capteur de pression barométrique | 0x5C, 0x5D |
| GT911 | contrôleur d’écran tactile capacitif 5 points | 0x5D |
| MCP4725 | DAC 12 bits avec EEPROM | 0x60–0x67 (8) |
| MCP4728 | DAC 12 bits 4 canaux avec EEPROM | 0x60–0x67 (8) |
| SCD30 | module CO₂ NDIR, température et humidité | 0x61 |
| SCD40 / SCD41 | capteur de CO₂ photoacoustique, température et humidité | 0x62 |
| BMI270 | IMU 6 axes | 0x68, 0x69 |
| DS1307 | horloge temps réel (RTC) | 0x68 |
| DS3231 | horloge temps réel compensée en température | 0x68 |
| MPU-6050 | accéléromètre + gyroscope 6 axes | 0x68, 0x69 |
| MPU-6886 | IMU 6 axes | 0x68, 0x69 |
| MPU-9250 | IMU 9 axes (accéléromètre, gyroscope, magnétomètre AK8963) | 0x68, 0x69 |
| PCF8523 | horloge temps réel (RTC) | 0x68 |
| SEN50 / SEN54 / SEN55 | module particules fines, VOC/NOx, température et humidité | 0x69 |
| HT16K33 | pilote de matrice LED 16×8 avec scrutation de clavier | 0x70–0x77 (8) |
| SHTC3 | capteur de température et d’humidité | 0x70 |
| SX1509 | expandeur d’E/S 16 canaux avec driver de LED et gestion de clavier | 0x70, 0x71 |
| TCA9548A | multiplexeur I²C 8 canaux | 0x70–0x77 (8) |
| IP5306 | SoC pour batterie externe (chargeur + boost), version I²C | 0x75 |
| BME280 | capteur de température, d’humidité et de pression | 0x76, 0x77 |
| BME680 | capteur de gaz (VOC), de température, d’humidité et de pression | 0x76, 0x77 |
| BME688 | capteur de gaz avec IA, de température, d’humidité et de pression | 0x76, 0x77 |
| BMP280 | capteur de pression et de température | 0x76, 0x77 |
| BMP388 | capteur de pression et de température | 0x76, 0x77 |
| MS5611-01BA | capteur de pression barométrique (altimètre) | 0x76, 0x77 |
| BMP180 | capteur de pression et de température | 0x77 |
Si deux d’entre eux se retrouvent sur la même adresse, changez celle de l’un des deux avec sa broche d’adresse, placez-en un derrière un multiplexeur TCA9548A (0x70–0x77) ou utilisez un second bus I²C : l’ESP32, l’ESP32-S3 et le RP2040 ont deux contrôleurs I²C (l’ESP32-C3 en a un).
Vérifier tout le bus →Ajoutez votre PCA9685 et vos autres modules : l’outil trouve les conflits, propose des adresses libres et dimensionne les pull-up.
Adresse sur 7 bits et sur 8 bits
Les adresses I²C font 7 bits. Certaines datasheets et bibliothèques les écrivent sur 8 bits, avec le bit de lecture/écriture ajouté à droite : c’est pourquoi la même puce peut être indiquée en 0x40 ou en 0x80. La bibliothèque Wire d’Arduino et ESPHome utilisent la forme sur 7 bits.
Ses adresses vont de 0x40 à 0x77 sur 7 bits, soit de 0x80 à 0xEE en adresses d’écriture sur 8 bits.
Vérifier qu’il répond
Reliez votre PCA9685 à SDA et SCL, puis téléversez ce sketch : il teste chaque adresse que la puce peut utiliser et affiche celle qui répond. Sur l’ESP32, les broches par défaut sont GPIO21 (SDA) et GPIO22 (SCL) ; sur l’Arduino Uno, A4 et A5.
#include <Wire.h>
const byte ADDRS[] = {
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77
};
void setup() {
Serial.begin(115200);
Wire.begin();
for (byte a : ADDRS) {
Wire.beginTransmission(a);
if (Wire.endTransmission() == 0) {
Serial.print("PCA9685 : adresse 0x");
if (a < 0x10) Serial.print('0');
Serial.println(a, HEX);
return;
}
}
Serial.println("Aucune reponse : verifiez le cablage");
}
void loop() {}
Dans ESPHome, le bus est scanné au démarrage (scan: true est la valeur par défaut) : le log liste toutes les adresses qui répondent.
i2c:
sda: GPIO21
scl: GPIO22
scan: true
Résistances de pull-up
SDA et SCL ont besoin de résistances de pull-up vers l’alimentation. Beaucoup de modules en ont déjà, souvent de 4,7 kΩ ou 10 kΩ, et avec plusieurs modules sur le bus elles se combinent en parallèle. Le vérificateur d’adresses I²C calcule la plage admise selon la tension et la vitesse de votre bus.
Questions fréquentes
Quelle est l’adresse I2C d’un PCA9685 ?
0x40–0x77, selon le câblage : A5…A0 → 0x40–0x77 (0x70 = All Call).
Puis-je utiliser plusieurs PCA9685 sur le même bus ?
Oui, jusqu’à 55, chacun réglé sur une adresse différente. Au-delà, utilisez un multiplexeur TCA9548A ou un second bus I²C.
Mon PCA9685 n’apparaît pas dans le scan I2C : pourquoi ?
Vérifiez, dans cet ordre : SDA et SCL non inversés ; la masse commune entre les cartes ; les résistances de pull-up sur SDA et SCL ; le module alimenté à la tension prévue ; aucune broche d’adresse laissée en l’air ; enfin, dans votre code, l’adresse sur 7 bits (0x40) et non celle sur 8 bits (0x80).
Périphériques similaires
MCP23008 MCP23017 PCF8574 PCF8574A PCF8575 SX1509 TCA9548A TCA9555
Adresses vérifiées sur la datasheet PCA9685.