Aziz Bench

Endereço I²C do PCA9685

O PCA9685 (driver PWM / servo de 16 canais, 12 bits) pode responder em 0x40–0x77: veja abaixo como escolher.

Endereço I²C (7 bits)
0x40–0x77
55 endereços possíveis
Escrita / leitura (8 bits)
0x80 / 0x81
Binário
1000000
Compartilha endereço com
60 dispositivos
Onde ele fica no barramento seus endereços reservados
0123456789ABCDEF
00000102030405060708090A0B0C0D0E0F
10101112131415161718191A1B1C1D1E1F
20202122232425262728292A2B2C2D2E2F
30303132333435363738393A3B3C3D3E3F
40404142434445464748494A4B4C4D4E4F
50505152535455565758595A5B5C5D5E5F
60606162636465666768696A6B6C6D6E6F
70707172737475767778797A7B7C7D7E7F

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:

DispositivoO que éEndereço em comum
HDC1080sensor de temperatura e umidade0x40
HTU21Dsensor de temperatura e umidade0x40
INA219monitor de corrente, tensão e potência0x40–0x4F (16)
INA226monitor de corrente, tensão e potência0x40–0x4F (16)
INA260monitor de corrente, tensão e potência com shunt integrado0x40–0x4F (16)
INA3221monitor de corrente e tensão de 3 canais0x40, 0x41, 0x42, 0x43
Si7021sensor de temperatura e umidade0x40
OPT3001sensor de luz ambiente0x44, 0x45, 0x46, 0x47
SHT30 / SHT31 / SHT35sensor de temperatura e umidade0x44, 0x45
SHT40 / SHT41 / SHT43 / SHT45 (SHT4x)sensor de temperatura e umidade0x44, 0x45, 0x46
Mostrar todos os 60 dispositivos
DispositivoO que éEndereço em comum
ADS1015ADC de 12 bits e 4 canais0x48, 0x49, 0x4A, 0x4B
ADS1115ADC de 16 bits e 4 canais0x48, 0x49, 0x4A, 0x4B
ADS7830ADC de 8 bits e 8 canais0x48, 0x49, 0x4A, 0x4B
LM75Bsensor de temperatura digital / termostato0x48–0x4F (8)
PCF8591ADC de 8 bits e 4 canais + 1 DAC0x48–0x4F (8)
TMP102sensor de temperatura digital0x48, 0x49, 0x4A, 0x4B
TMP117sensor de temperatura digital de alta precisão0x48, 0x49, 0x4A, 0x4B
TSL2561sensor de luz ambiente (visível e infravermelho)0x49
24LC256 / 24AA256 / 24FC256EEPROM I²C de 256 Kbit0x50–0x57 (8)
AT24C32EEPROM I²C de 32 Kbit0x50–0x57 (8)
PCF85063Arelógio de tempo real (RTC)0x51
PCF8563relógio de tempo real (RTC)0x51
ENS160sensor de óxido metálico para qualidade do ar (TVOC/eCO₂/AQI)0x52, 0x53
ADXL345acelerômetro de 3 eixos0x53
BQ27441-G1medidor de carga para uma célula Li-ion0x55
MAX30100oxímetro de pulso e sensor de frequência cardíaca0x57
MAX30102oxímetro de pulso e sensor de frequência cardíaca0x57
SGP30sensor de gás VOC e eCO₂0x58
SGP40sensor de gás, índice VOC0x59
SGP41sensor de gás, índices VOC e NOx0x59
CCS811sensor de gás eCO₂ / TVOC0x5A, 0x5B
MLX90614termômetro infravermelho sem contato0x5A
MPR121controlador de toque capacitivo de 12 canais0x5A, 0x5B, 0x5C, 0x5D
BH1750FVI (BH1750)sensor de luz ambiente0x5C
LPS22HBsensor de pressão barométrica0x5C, 0x5D
GT911controlador de tela touch capacitiva de 5 pontos0x5D
MCP4725DAC de 12 bits com EEPROM0x60–0x67 (8)
MCP4728DAC de 12 bits e 4 canais com EEPROM0x60–0x67 (8)
SCD30módulo de CO₂ NDIR, temperatura e umidade0x61
SCD40 / SCD41sensor de CO₂ fotoacústico, temperatura e umidade0x62
BMI270IMU de 6 eixos0x68, 0x69
DS1307relógio de tempo real (RTC)0x68
DS3231relógio de tempo real compensado em temperatura0x68
MPU-6050acelerômetro + giroscópio de 6 eixos0x68, 0x69
MPU-6886IMU de 6 eixos0x68, 0x69
MPU-9250IMU de 9 eixos (acelerômetro, giroscópio, magnetômetro AK8963)0x68, 0x69
PCF8523relógio de tempo real (RTC)0x68
SEN50 / SEN54 / SEN55módulo de material particulado, VOC/NOx, temperatura e umidade0x69
HT16K33driver de matriz de LED 16×8 com varredura de teclado0x70–0x77 (8)
SHTC3sensor de temperatura e umidade0x70
SX1509expansor de E/S de 16 canais com driver de LED e controle de teclado0x70, 0x71
TCA9548Amultiplexador I²C de 8 canais0x70–0x77 (8)
IP5306SoC para power bank (carregador + boost), versão I²C0x75
BME280sensor de temperatura, umidade e pressão0x76, 0x77
BME680sensor de gás (VOC), temperatura, umidade e pressão0x76, 0x77
BME688sensor de gás com IA, temperatura, umidade e pressão0x76, 0x77
BMP280sensor de pressão e temperatura0x76, 0x77
BMP388sensor de pressão e temperatura0x76, 0x77
MS5611-01BAsensor de pressão barométrica (altímetro)0x76, 0x77
BMP180sensor de pressão e temperatura0x77

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

Endereços conferidos no datasheet do PCA9685.