Aziz Bench

Adresse I²C MCP23017

Le composant MCP23017 (expandeur d’E/S 16 bits) peut répondre sur 0x20–0x27 : voici comment choisir.

Adresse I²C (7 bits)
0x20–0x27
8 adresses possibles
Écriture / lecture (8 bits)
0x40 / 0x41
Binaire
0100000
Adresse partagée avec
6 périphériques
Sa place sur le bus ses adresses réservées
0123456789ABCDEF
00000102030405060708090A0B0C0D0E0F
10101112131415161718191A1B1C1D1E1F
20202122232425262728292A2B2C2D2E2F
30303132333435363738393A3B3C3D3E3F
40404142434445464748494A4B4C4D4E4F
50505152535455565758595A5B5C5D5E5F
60606162636465666768696A6B6C6D6E6F
70707172737475767778797A7B7C7D7E7F

Comment régler l’adresse

Câblez les broches d’adresse ainsi :

A2 A1 A0 → 0x20–0x27

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ériqueDescriptionAdresse partagée
MCP23008expandeur d’E/S 8 bits0x20–0x27 (8)
PCF8574expandeur d’E/S 8 bits (modules I²C pour LCD)0x20–0x27 (8)
PCF8575expandeur d’E/S 16 bits0x20–0x27 (8)
TCA9555expandeur d’E/S 16 bits avec interruption0x20–0x27 (8)
BH1750FVI (BH1750)capteur de lumière ambiante0x23
PN532contrôleur NFC/RFID (mode I²C)0x24

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 MCP23017 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 0x20 ou en 0x40. La bibliothèque Wire d’Arduino et ESPHome utilisent la forme sur 7 bits.

7 bitsBinaireÉcriture 8 bitsLecture 8 bits
0x2001000000x400x41
0x2101000010x420x43
0x2201000100x440x45
0x2301000110x460x47
0x2401001000x480x49
0x2501001010x4A0x4B
0x2601001100x4C0x4D
0x2701001110x4E0x4F

Vérifier qu’il répond

Reliez votre MCP23017 à 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[] = {0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27};

void setup() {
  Serial.begin(115200);
  Wire.begin();
  for (byte a : ADDRS) {
    Wire.beginTransmission(a);
    if (Wire.endTransmission() == 0) {
      Serial.print("MCP23017 : 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 MCP23017 ?

0x20–0x27, selon le câblage : A2 A1 A0 → 0x20–0x27.

Puis-je utiliser plusieurs MCP23017 sur le même bus ?

Oui, jusqu’à 8, chacun réglé sur une adresse différente. Au-delà, utilisez un multiplexeur TCA9548A ou un second bus I²C.

Mon MCP23017 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 (0x20) et non celle sur 8 bits (0x40).

Périphériques similaires

Adresses vérifiées sur la datasheet MCP23017.