Comment régler l’adresse
L’adresse est stockée en EEPROM (0x60 en sortie d’usine) et se change avec une commande dédiée.
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 |
|---|---|---|
| MCP4725 | DAC 12 bits avec EEPROM | 0x60–0x67 (8) |
| PCA9685 | driver PWM / servo 16 canaux, 12 bits | 0x60–0x67 (8) |
| SCD30 | module CO₂ NDIR, température et humidité | 0x61 |
| SCD40 / SCD41 | capteur de CO₂ photoacoustique, température et humidité | 0x62 |
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 MCP4728 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 0x60 ou en 0xC0. La bibliothèque Wire d’Arduino et ESPHome utilisent la forme sur 7 bits.
| 7 bits | Binaire | Écriture 8 bits | Lecture 8 bits |
|---|---|---|---|
| 0x60 | 1100000 | 0xC0 | 0xC1 |
| 0x61 | 1100001 | 0xC2 | 0xC3 |
| 0x62 | 1100010 | 0xC4 | 0xC5 |
| 0x63 | 1100011 | 0xC6 | 0xC7 |
| 0x64 | 1100100 | 0xC8 | 0xC9 |
| 0x65 | 1100101 | 0xCA | 0xCB |
| 0x66 | 1100110 | 0xCC | 0xCD |
| 0x67 | 1100111 | 0xCE | 0xCF |
Vérifier qu’il répond
Reliez votre MCP4728 à 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[] = {0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67};
void setup() {
Serial.begin(115200);
Wire.begin();
for (byte a : ADDRS) {
Wire.beginTransmission(a);
if (Wire.endTransmission() == 0) {
Serial.print("MCP4728 : 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 MCP4728 ?
0x60–0x67. L’adresse est stockée en EEPROM (0x60 en sortie d’usine) et se change avec une commande dédiée.
Puis-je utiliser plusieurs MCP4728 sur le même bus ?
Oui, une fois que chacun a sa propre adresse.
Mon MCP4728 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 ; enfin, dans votre code, l’adresse sur 7 bits (0x60) et non celle sur 8 bits (0xC0).
Périphériques similaires
ADS1015 ADS1115 ADS7830 MCP4725 PCF8591
Adresses vérifiées sur la datasheet MCP4728.