Aziz Bench

Indirizzo I²C PCA9685

PCA9685 (driver PWM / servo a 16 canali, 12 bit) può rispondere su 0x40–0x77: qui sotto trovi come scegliere.

Indirizzo I²C (7 bit)
0x40–0x77
55 indirizzi possibili
Scrittura / lettura (8 bit)
0x80 / 0x81
Binario
1000000
Indirizzi in comune con
53 dispositivi
Dove si trova sul bus i suoi indirizzi riservati
0123456789ABCDEF
00000102030405060708090A0B0C0D0E0F
10101112131415161718191A1B1C1D1E1F
20202122232425262728292A2B2C2D2E2F
30303132333435363738393A3B3C3D3E3F
40404142434445464748494A4B4C4D4E4F
50505152535455565758595A5B5C5D5E5F
60606162636465666768696A6B6C6D6E6F
70707172737475767778797A7B7C7D7E7F

Come impostare l’indirizzo

Collega i pin di indirizzo così:

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

All’accensione risponde anche all’indirizzo All Call 0x70, che va in conflitto con un TCA9548A all’indirizzo predefinito. Disattiva All Call nel registro MODE1, oppure sposta il multiplexer.

Dispositivi che usano gli stessi indirizzi

Due dispositivi sullo stesso bus non possono rispondere allo stesso indirizzo. Questi moduli del nostro elenco usano almeno uno di questi indirizzi:

DispositivoChe cos’èIndirizzo in comune
HDC1080sensore di temperatura e umidità0x40
INA219monitor di corrente, tensione e potenza0x40–0x4F (16)
INA226monitor di corrente, tensione e potenza0x40–0x4F (16)
INA260monitor di corrente, tensione e potenza con shunt integrato0x40–0x4F (16)
INA3221monitor di corrente e tensione a 3 canali0x40, 0x41, 0x42, 0x43
Si7021sensore di temperatura e umidità0x40
OPT3001sensore di luce ambiente0x44, 0x45, 0x46, 0x47
SHT30 / SHT31 / SHT35sensore di temperatura e umidità0x44, 0x45
SHT40 / SHT41 / SHT43 / SHT45 (SHT4x)sensore di temperatura e umidità0x44, 0x45, 0x46
ADS1015ADC a 12 bit e 4 canali0x48, 0x49, 0x4A, 0x4B
Mostra tutti i 53 dispositivi
DispositivoChe cos’èIndirizzo in comune
ADS1115ADC a 16 bit e 4 canali0x48, 0x49, 0x4A, 0x4B
ADS7830ADC a 8 bit e 8 canali0x48, 0x49, 0x4A, 0x4B
LM75Bsensore di temperatura digitale / termostato0x48–0x4F (8)
PCF8591ADC a 8 bit e 4 canali + 1 DAC0x48–0x4F (8)
TMP102sensore di temperatura digitale0x48, 0x49, 0x4A, 0x4B
TMP117sensore di temperatura digitale ad alta precisione0x48, 0x49, 0x4A, 0x4B
24LC256 / 24AA256 / 24FC256EEPROM I²C da 256 Kbit0x50–0x57 (8)
AT24C32EEPROM I²C da 32 Kbit0x50–0x57 (8)
PCF85063Aorologio in tempo reale (RTC)0x51
ENS160sensore di qualità dell’aria a ossidi metallici (TVOC/eCO₂/AQI)0x52, 0x53
ADXL345accelerometro a 3 assi0x53
BQ27441-G1indicatore di carica per una cella Li-ion0x55
MAX30100pulsossimetro e sensore di battito0x57
SGP30sensore di gas VOC ed eCO₂0x58
SGP40sensore di gas, indice VOC0x59
SGP41sensore di gas, indici VOC e NOx0x59
CCS811sensore di gas eCO₂ / TVOC0x5A, 0x5B
MLX90614termometro a infrarossi senza contatto0x5A
MPR121controller touch capacitivo a 12 canali0x5A, 0x5B, 0x5C, 0x5D
LPS22HBsensore di pressione barometrica0x5C, 0x5D
GT911controller touch screen capacitivo a 5 punti0x5D
MCP4725DAC a 12 bit con EEPROM0x60–0x67 (8)
MCP4728DAC a 12 bit e 4 canali con EEPROM0x60–0x67 (8)
SCD30modulo CO₂ NDIR, temperatura e umidità0x61
SCD40 / SCD41sensore di CO₂ fotoacustico, temperatura e umidità0x62
BMI270IMU a 6 assi0x68, 0x69
DS1307orologio in tempo reale (RTC)0x68
DS3231orologio in tempo reale compensato in temperatura0x68
MPU-6050accelerometro + giroscopio a 6 assi0x68, 0x69
MPU-6886IMU a 6 assi0x68, 0x69
MPU-9250IMU a 9 assi (accelerometro, giroscopio, magnetometro AK8963)0x68, 0x69
SEN50 / SEN54 / SEN55modulo polveri sottili, VOC/NOx, temperatura e umidità0x69
SHTC3sensore di temperatura e umidità0x70
SX1509espansore di I/O a 16 canali con driver LED e gestione tastierino0x70, 0x71
TCA9548Amultiplexer I²C a 8 canali0x70–0x77 (8)
IP5306SoC per power bank (caricatore + boost), versione I²C0x75
BME280sensore di temperatura, umidità e pressione0x76, 0x77
BME680sensore di gas (VOC), temperatura, umidità e pressione0x76, 0x77
BME688sensore di gas con IA, temperatura, umidità e pressione0x76, 0x77
BMP280sensore di pressione e temperatura0x76, 0x77
BMP388sensore di pressione e temperatura0x76, 0x77
MS5611-01BAsensore di pressione barometrica (altimetro)0x76, 0x77
BMP180sensore di pressione e temperatura0x77

Se due finiscono sullo stesso indirizzo, sposta uno dei due con il pin di indirizzo, mettine uno dietro un multiplexer TCA9548A (0x70–0x77) oppure usa un secondo bus I²C: ESP32, ESP32-S3 e RP2040 hanno due controller I²C (l’ESP32-C3 ne ha uno).

Controlla tutto il bus →Aggiungi PCA9685 e gli altri moduli: lo strumento trova i conflitti, propone indirizzi liberi e dimensiona le pull-up.

Indirizzo a 7 bit e a 8 bit

Gli indirizzi I²C sono lunghi 7 bit. Alcuni datasheet e librerie li scrivono come numeri a 8 bit, aggiungendo a destra il bit di lettura/scrittura: per questo lo stesso chip può comparire come 0x40 o come 0x80. La libreria Wire di Arduino ed ESPHome usano la forma a 7 bit.

I suoi indirizzi vanno da 0x40 a 0x77 nella forma a 7 bit, cioè da 0x80 a 0xEE come indirizzi di scrittura a 8 bit.

Verifica che risponda

Carica questo sketch con PCA9685 collegato a SDA e SCL: prova tutti gli indirizzi che il chip può usare e stampa quello che risponde. Sull’ESP32 i pin predefiniti sono GPIO21 (SDA) e GPIO22 (SCL); su 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 risponde all'indirizzo 0x");
      if (a < 0x10) Serial.print('0');
      Serial.println(a, HEX);
      return;
    }
  }
  Serial.println("Nessuna risposta: controlla i collegamenti");
}

void loop() {}

In ESPHome il bus viene scansionato all’avvio (scan: true è il valore predefinito): il log elenca tutti gli indirizzi che rispondono.

i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true

Resistenze di pull-up

SDA e SCL hanno bisogno di resistenze di pull-up verso l’alimentazione. Molti moduli le hanno già, spesso da 4,7 kΩ o 10 kΩ, e con più moduli sul bus si sommano in parallelo. Lo strumento per gli indirizzi I²C calcola l’intervallo ammesso per la tensione e la velocità del tuo bus.

Domande frequenti

Qual è l’indirizzo I2C di PCA9685?

0x40–0x77, a seconda dei collegamenti: A5…A0 → 0x40–0x77 (0x70 = All Call).

Posso usare più PCA9685 sullo stesso bus?

Sì, fino a 55, ciascuno impostato su un indirizzo diverso. Per usarne di più, ricorri a un multiplexer TCA9548A o a un secondo bus I²C.

Perché PCA9685 non compare nella scansione I2C?

Controlla, in quest’ordine: SDA e SCL non invertiti; massa in comune tra le schede; resistenze di pull-up su SDA e SCL; il modulo alimentato alla tensione per cui è fatto; il pin di indirizzo non lasciato scollegato; e che il codice usi l’indirizzo a 7 bit (0x40), non quello a 8 bit (0x80).

Dispositivi simili

Indirizzi verificati sul datasheet di PCA9685.