Como definir o endereço
Ligue os pinos de endereço assim:
A5…A0 → 0x40–0x77 (0x70 = All Call)
Ao ligar, ele também responde no endereço All Call 0x70, que conflita com um TCA9548A no endereço padrão. Desative o All Call no MODE1 ou mude o endereço do multiplexador.
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 |
|---|---|---|
| HDC1080 | sensor de temperatura e umidade | 0x40 |
| HTU21D | sensor de temperatura e umidade | 0x40 |
| INA219 | monitor de corrente, tensão e potência | 0x40–0x4F (16) |
| INA226 | monitor de corrente, tensão e potência | 0x40–0x4F (16) |
| INA260 | monitor de corrente, tensão e potência com shunt integrado | 0x40–0x4F (16) |
| INA3221 | monitor de corrente e tensão de 3 canais | 0x40, 0x41, 0x42, 0x43 |
| Si7021 | sensor de temperatura e umidade | 0x40 |
| OPT3001 | sensor de luz ambiente | 0x44, 0x45, 0x46, 0x47 |
| SHT30 / SHT31 / SHT35 | sensor de temperatura e umidade | 0x44, 0x45 |
| SHT40 / SHT41 / SHT43 / SHT45 (SHT4x) | sensor de temperatura e umidade | 0x44, 0x45, 0x46 |
Mostrar todos os 60 dispositivos
| Dispositivo | O que é | Endereço em comum |
|---|---|---|
| ADS1015 | ADC de 12 bits e 4 canais | 0x48, 0x49, 0x4A, 0x4B |
| ADS1115 | ADC de 16 bits e 4 canais | 0x48, 0x49, 0x4A, 0x4B |
| ADS7830 | ADC de 8 bits e 8 canais | 0x48, 0x49, 0x4A, 0x4B |
| LM75B | sensor de temperatura digital / termostato | 0x48–0x4F (8) |
| PCF8591 | ADC de 8 bits e 4 canais + 1 DAC | 0x48–0x4F (8) |
| TMP102 | sensor de temperatura digital | 0x48, 0x49, 0x4A, 0x4B |
| TMP117 | sensor de temperatura digital de alta precisão | 0x48, 0x49, 0x4A, 0x4B |
| TSL2561 | sensor de luz ambiente (visível e infravermelho) | 0x49 |
| 24LC256 / 24AA256 / 24FC256 | EEPROM I²C de 256 Kbit | 0x50–0x57 (8) |
| AT24C32 | EEPROM I²C de 32 Kbit | 0x50–0x57 (8) |
| PCF85063A | relógio de tempo real (RTC) | 0x51 |
| PCF8563 | relógio de tempo real (RTC) | 0x51 |
| ENS160 | sensor de óxido metálico para qualidade do ar (TVOC/eCO₂/AQI) | 0x52, 0x53 |
| ADXL345 | acelerômetro de 3 eixos | 0x53 |
| BQ27441-G1 | medidor de carga para uma célula Li-ion | 0x55 |
| MAX30100 | oxímetro de pulso e sensor de frequência cardíaca | 0x57 |
| MAX30102 | oxímetro de pulso e sensor de frequência cardíaca | 0x57 |
| SGP30 | sensor de gás VOC e eCO₂ | 0x58 |
| SGP40 | sensor de gás, índice VOC | 0x59 |
| SGP41 | sensor de gás, índices VOC e NOx | 0x59 |
| CCS811 | sensor de gás eCO₂ / TVOC | 0x5A, 0x5B |
| MLX90614 | termômetro infravermelho sem contato | 0x5A |
| MPR121 | controlador de toque capacitivo de 12 canais | 0x5A, 0x5B, 0x5C, 0x5D |
| BH1750FVI (BH1750) | sensor de luz ambiente | 0x5C |
| LPS22HB | sensor de pressão barométrica | 0x5C, 0x5D |
| GT911 | controlador de tela touch capacitiva de 5 pontos | 0x5D |
| MCP4725 | DAC de 12 bits com EEPROM | 0x60–0x67 (8) |
| MCP4728 | DAC de 12 bits e 4 canais com EEPROM | 0x60–0x67 (8) |
| SCD30 | módulo de CO₂ NDIR, temperatura e umidade | 0x61 |
| SCD40 / SCD41 | sensor de CO₂ fotoacústico, temperatura e umidade | 0x62 |
| BMI270 | IMU de 6 eixos | 0x68, 0x69 |
| DS1307 | relógio de tempo real (RTC) | 0x68 |
| DS3231 | relógio de tempo real compensado em temperatura | 0x68 |
| MPU-6050 | acelerômetro + giroscópio de 6 eixos | 0x68, 0x69 |
| MPU-6886 | IMU de 6 eixos | 0x68, 0x69 |
| MPU-9250 | IMU de 9 eixos (acelerômetro, giroscópio, magnetômetro AK8963) | 0x68, 0x69 |
| PCF8523 | relógio de tempo real (RTC) | 0x68 |
| SEN50 / SEN54 / SEN55 | módulo de material particulado, VOC/NOx, temperatura e umidade | 0x69 |
| HT16K33 | driver de matriz de LED 16×8 com varredura de teclado | 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 PCA9685 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 0x40 ou como 0x80. A biblioteca Wire do Arduino e o ESPHome usam a forma de 7 bits.
Os endereços dele vão de 0x40 a 0x77 na forma de 7 bits, ou seja, de 0x80 a 0xEE como endereços de escrita de 8 bits.
Confira se ele responde
Carregue este sketch com o PCA9685 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[] = {
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 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 PCA9685?
0x40–0x77, dependendo da ligação: A5…A0 → 0x40–0x77 (0x70 = All Call).
Posso usar mais de um PCA9685 no mesmo barramento?
Sim, até 55, cada um configurado com um endereço diferente. Acima disso, use um multiplexador TCA9548A ou um segundo barramento I²C.
Por que o PCA9685 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 (0x40), não o de 8 bits (0x80).
Dispositivos semelhantes
MCP23008 MCP23017 PCF8574 PCF8574A PCF8575 SX1509 TCA9548A TCA9555
Endereços conferidos no datasheet do PCA9685.