Como definir o endereço
Ligue os pinos de endereço assim:
A2 A1 A0 → 0x70–0x77
Só a versão de 28 pinos tem os três pinos de endereço (0x70–0x77); a de 24 pinos tem A1 e A0 (0x70–0x73) e a de 20 pinos é fixa em 0x70. Os pinos também são saídas ROW: desconectados, valem 0, e para ter 1 é preciso um diodo e um resistor, como no datasheet.
Dispositivos que usam os mesmos endereços
Dois dispositivos no mesmo barramento não podem responder no mesmo endereço. Estes módulos da nossa lista usam pelo menos um destes endereços:
| Dispositivo | O que é | Endereço em comum |
|---|---|---|
| PCA9685 | driver PWM / servo de 16 canais, 12 bits | 0x70–0x77 (8) |
| SHTC3 | sensor de temperatura e umidade | 0x70 |
| SX1509 | expansor de E/S de 16 canais com driver de LED e controle de teclado | 0x70, 0x71 |
| TCA9548A | multiplexador I²C de 8 canais | 0x70–0x77 (8) |
| IP5306 | SoC para power bank (carregador + boost), versão I²C | 0x75 |
| BME280 | sensor de temperatura, umidade e pressão | 0x76, 0x77 |
| BME680 | sensor de gás (VOC), temperatura, umidade e pressão | 0x76, 0x77 |
| BME688 | sensor de gás com IA, temperatura, umidade e pressão | 0x76, 0x77 |
| BMP280 | sensor de pressão e temperatura | 0x76, 0x77 |
| BMP388 | sensor de pressão e temperatura | 0x76, 0x77 |
| MS5611-01BA | sensor de pressão barométrica (altímetro) | 0x76, 0x77 |
| BMP180 | sensor de pressão e temperatura | 0x77 |
Se dois deles ficarem no mesmo endereço, mude o endereço de um deles pelo pino de endereço, coloque um atrás de um multiplexador TCA9548A (0x70–0x77) ou use um segundo barramento I²C: o ESP32, o ESP32-S3 e o RP2040 têm dois controladores I²C (o ESP32-C3 tem um).
Verificar o barramento inteiro →Adicione o HT16K33 e os seus outros módulos: o verificador encontra conflitos, sugere endereços livres e dimensiona os pull-ups.
Endereço de 7 bits e de 8 bits
Os endereços I²C têm 7 bits. Alguns datasheets e bibliotecas os escrevem como números de 8 bits, com o bit de leitura/escrita acrescentado à direita: por isso o mesmo chip pode aparecer como 0x70 ou como 0xE0. A biblioteca Wire do Arduino e o ESPHome usam a forma de 7 bits.
| 7 bits | Binário | Escrita (8 bits) | Leitura (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 |
Confira se ele responde
Carregue este sketch com o HT16K33 ligado a SDA e SCL: ele testa todos os endereços que o chip pode usar e mostra no monitor serial o endereço que responde. No ESP32, os pinos padrão são GPIO21 (SDA) e GPIO22 (SCL); no Arduino Uno, A4 e 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 responde em 0x");
if (a < 0x10) Serial.print('0');
Serial.println(a, HEX);
return;
}
}
Serial.println("Sem resposta: verifique os fios");
}
void loop() {}
No ESPHome, o barramento é varrido na inicialização (scan: true é o padrão): o log lista todos os endereços que respondem.
i2c:
sda: GPIO21
scl: GPIO22
scan: true
Resistores de pull-up
SDA e SCL precisam de resistores de pull-up para a alimentação. Muitos módulos já vêm com eles, geralmente de 4,7 kΩ ou 10 kΩ, e com vários módulos no barramento eles se somam em paralelo. O verificador de endereços I²C calcula a faixa permitida para a tensão e a velocidade do seu barramento.
Perguntas frequentes
Qual é o endereço I2C do HT16K33?
0x70–0x77, dependendo da ligação: A2 A1 A0 → 0x70–0x77.
Posso usar mais de um HT16K33 no mesmo barramento?
Sim, até 8, cada um configurado com um endereço diferente. Acima disso, use um multiplexador TCA9548A ou um segundo barramento I²C.
Por que o HT16K33 não aparece na varredura I2C?
Confira, nesta ordem: SDA e SCL não invertidos; GND em comum entre as placas; resistores de pull-up em SDA e SCL; o módulo alimentado na tensão para a qual foi projetado; os pinos de endereço conectados, não flutuando; e se o seu código usa o endereço de 7 bits (0x70), não o de 8 bits (0xE0).
Dispositivos semelhantes
Endereços conferidos no datasheet do HT16K33.