Comment régler l’adresse
Câblez les broches d’adresse ainsi :
A2 A1 A0 → 0x70–0x77
Seule la version 28 broches a les trois broches d’adresse (0x70–0x77) ; la version 24 broches a A1 et A0 (0x70–0x73) et la version 20 broches est fixée à 0x70. Les broches servent aussi de sorties ROW : non connectées, elles valent 0 ; pour un 1, il faut une diode et une résistance, comme dans la datasheet.
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 |
|---|---|---|
| PCA9685 | driver PWM / servo 16 canaux, 12 bits | 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 HT16K33 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 0x70 ou en 0xE0. La bibliothèque Wire d’Arduino et ESPHome utilisent la forme sur 7 bits.
| 7 bits | Binaire | Écriture 8 bits | Lecture 8 bits |
|---|---|---|---|
| 0x70 | 1110000 | 0xE0 | 0xE1 |
| 0x71 | 1110001 | 0xE2 | 0xE3 |
| 0x72 | 1110010 | 0xE4 | 0xE5 |
| 0x73 | 1110011 | 0xE6 | 0xE7 |
| 0x74 | 1110100 | 0xE8 | 0xE9 |
| 0x75 | 1110101 | 0xEA | 0xEB |
| 0x76 | 1110110 | 0xEC | 0xED |
| 0x77 | 1110111 | 0xEE | 0xEF |
Vérifier qu’il répond
Reliez votre HT16K33 à 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[] = {0x70, 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("HT16K33 : 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 HT16K33 ?
0x70–0x77, selon le câblage : A2 A1 A0 → 0x70–0x77.
Puis-je utiliser plusieurs HT16K33 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 HT16K33 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 (0x70) et non celle sur 8 bits (0xE0).
Périphériques similaires
Adresses vérifiées sur la datasheet HT16K33.