Aziz Bench

Dirección I²C del PCA9685

El PCA9685 (controlador PWM / servos de 16 canales, 12 bits) puede responder en 0x40–0x77: más abajo verás cómo elegir.

Dirección I²C (7 bits)
0x40–0x77
55 direcciones posibles
Escritura / lectura (8 bits)
0x80 / 0x81
Binario
1000000
Comparte dirección con
60 dispositivos
Dónde está en el bus sus direcciones reservadas
0123456789ABCDEF
00000102030405060708090A0B0C0D0E0F
10101112131415161718191A1B1C1D1E1F
20202122232425262728292A2B2C2D2E2F
30303132333435363738393A3B3C3D3E3F
40404142434445464748494A4B4C4D4E4F
50505152535455565758595A5B5C5D5E5F
60606162636465666768696A6B6C6D6E6F
70707172737475767778797A7B7C7D7E7F

Cómo fijar la dirección

Conecta los pines de dirección así:

A5…A0 → 0x40–0x77 (0x70 = All Call)

Al encenderse responde también a la dirección All Call 0x70, que choca con un TCA9548A en su dirección por defecto. Desactiva All Call en el registro MODE1 o mueve el multiplexor.

Dispositivos que usan las mismas direcciones

Dos dispositivos del mismo bus no pueden responder en la misma dirección. Estos módulos de nuestra lista usan al menos una de estas direcciones:

DispositivoQué esDirección compartida
HDC1080sensor de temperatura y humedad0x40
HTU21Dsensor de temperatura y humedad0x40
INA219monitor de corriente, tensión y potencia0x40–0x4F (16)
INA226monitor de corriente, tensión y potencia0x40–0x4F (16)
INA260monitor de corriente, tensión y potencia con shunt integrado0x40–0x4F (16)
INA3221monitor de corriente y tensión de 3 canales0x40, 0x41, 0x42, 0x43
Si7021sensor de temperatura y humedad0x40
OPT3001sensor de luz ambiental0x44, 0x45, 0x46, 0x47
SHT30 / SHT31 / SHT35sensor de temperatura y humedad0x44, 0x45
SHT40 / SHT41 / SHT43 / SHT45 (SHT4x)sensor de temperatura y humedad0x44, 0x45, 0x46
Mostrar los 60 dispositivos
DispositivoQué esDirección compartida
ADS1015ADC de 12 bits y 4 canales0x48, 0x49, 0x4A, 0x4B
ADS1115ADC de 16 bits y 4 canales0x48, 0x49, 0x4A, 0x4B
ADS7830ADC de 8 bits y 8 canales0x48, 0x49, 0x4A, 0x4B
LM75Bsensor de temperatura digital / termostato0x48–0x4F (8)
PCF8591ADC de 8 bits y 4 canales + 1 DAC0x48–0x4F (8)
TMP102sensor de temperatura digital0x48, 0x49, 0x4A, 0x4B
TMP117sensor de temperatura digital de alta precisión0x48, 0x49, 0x4A, 0x4B
TSL2561sensor de luz ambiental (visible e infrarrojo)0x49
24LC256 / 24AA256 / 24FC256EEPROM I²C de 256 Kbit0x50–0x57 (8)
AT24C32EEPROM I²C de 32 Kbit0x50–0x57 (8)
PCF85063Areloj en tiempo real (RTC)0x51
PCF8563reloj en tiempo real (RTC)0x51
ENS160sensor de calidad del aire de óxido metálico (TVOC/eCO₂/AQI)0x52, 0x53
ADXL345acelerómetro de 3 ejes0x53
BQ27441-G1indicador de carga para una celda Li-ion0x55
MAX30100pulsioxímetro y sensor de pulso0x57
MAX30102pulsioxímetro y sensor de pulso0x57
SGP30sensor de gas VOC y eCO₂0x58
SGP40sensor de gas, índice VOC0x59
SGP41sensor de gas, índices VOC y NOx0x59
CCS811sensor de gas eCO₂ / TVOC0x5A, 0x5B
MLX90614termómetro de infrarrojos sin contacto0x5A
MPR121controlador táctil capacitivo de 12 canales0x5A, 0x5B, 0x5C, 0x5D
BH1750FVI (BH1750)sensor de luz ambiental0x5C
LPS22HBsensor de presión barométrica0x5C, 0x5D
GT911controlador de pantalla táctil capacitiva de 5 puntos0x5D
MCP4725DAC de 12 bits con EEPROM0x60–0x67 (8)
MCP4728DAC de 12 bits y 4 canales con EEPROM0x60–0x67 (8)
SCD30módulo de CO₂ NDIR, temperatura y humedad0x61
SCD40 / SCD41sensor de CO₂ fotoacústico, temperatura y humedad0x62
BMI270IMU de 6 ejes0x68, 0x69
DS1307reloj en tiempo real (RTC)0x68
DS3231reloj en tiempo real compensado en temperatura0x68
MPU-6050acelerómetro + giroscopio de 6 ejes0x68, 0x69
MPU-6886IMU de 6 ejes0x68, 0x69
MPU-9250IMU de 9 ejes (acelerómetro, giroscopio, magnetómetro AK8963)0x68, 0x69
PCF8523reloj en tiempo real (RTC)0x68
SEN50 / SEN54 / SEN55módulo de partículas en suspensión, VOC/NOx, temperatura y humedad0x69
HT16K33controlador de matrices LED 16×8 con lectura de teclado0x70–0x77 (8)
SHTC3sensor de temperatura y humedad0x70
SX1509expansor de E/S de 16 canales con driver de LED y controlador de teclado0x70, 0x71
TCA9548Amultiplexor I²C de 8 canales0x70–0x77 (8)
IP5306SoC para power bank (cargador + elevador), versión I²C0x75
BME280sensor de temperatura, humedad y presión0x76, 0x77
BME680sensor de gas (VOC), temperatura, humedad y presión0x76, 0x77
BME688sensor de gas con IA, temperatura, humedad y presión0x76, 0x77
BMP280sensor de presión y temperatura0x76, 0x77
BMP388sensor de presión y temperatura0x76, 0x77
MS5611-01BAsensor de presión barométrica (altímetro)0x76, 0x77
BMP180sensor de presión y temperatura0x77

Si dos acaban en la misma dirección, mueve uno con su pin de dirección, pon uno detrás de un multiplexor TCA9548A (0x70–0x77) o usa un segundo bus I²C: el ESP32, el ESP32-S3 y el RP2040 tienen dos controladores I²C (el ESP32-C3 tiene uno).

Comprobar todo el bus →Añade el PCA9685 y el resto de tus módulos: la herramienta encuentra los conflictos, propone direcciones libres y calcula las pull-ups.

Dirección de 7 y de 8 bits

Las direcciones I²C tienen 7 bits. Algunas hojas de datos y bibliotecas las escriben como números de 8 bits, con el bit de lectura/escritura añadido a la derecha: por eso el mismo chip puede aparecer como 0x40 o como 0x80. La biblioteca Wire de Arduino y ESPHome usan la forma de 7 bits.

Sus direcciones van de 0x40 a 0x77 en la forma de 7 bits, es decir, de 0x80 a 0xEE como direcciones de escritura de 8 bits.

Comprueba que responde

Sube este sketch con el PCA9685 conectado a SDA y SCL: prueba todas las direcciones que puede usar el chip y muestra en el monitor serie la que responde. En el ESP32 los pines por defecto son GPIO21 (SDA) y GPIO22 (SCL); en un Arduino Uno, A4 y 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 en 0x");
      if (a < 0x10) Serial.print('0');
      Serial.println(a, HEX);
      return;
    }
  }
  Serial.println("Sin respuesta: revisa el cableado");
}

void loop() {}

En ESPHome el bus se escanea al arrancar (scan: true es el valor por defecto): el log muestra todas las direcciones que responden.

i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true

Resistencias de pull-up

SDA y SCL necesitan resistencias de pull-up a la alimentación. Muchos módulos ya las llevan, a menudo de 4,7 kΩ o 10 kΩ, y con varios módulos en el bus se suman en paralelo. La herramienta de direcciones I²C calcula el rango admitido para la tensión y la velocidad de tu bus.

Preguntas frecuentes

¿Cuál es la dirección I2C del PCA9685?

0x40–0x77, según el cableado: A5…A0 → 0x40–0x77 (0x70 = All Call).

¿Puedo usar más de un PCA9685 en el mismo bus?

Sí, hasta 55, cada uno con una dirección distinta. Para usar más, recurre a un multiplexor TCA9548A o a un segundo bus I²C.

¿Por qué el PCA9685 no aparece al escanear el bus I2C?

Revisa, por este orden: que SDA y SCL no estén intercambiados; que las placas compartan masa; que haya resistencias de pull-up en SDA y SCL; que el módulo esté alimentado a la tensión que le corresponde; que ningún pin de dirección quede sin conectar; y que tu código use la dirección de 7 bits (0x40), no la de 8 bits (0x80).

Dispositivos similares

Direcciones comprobadas en la hoja de datos del PCA9685.