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:
| Dispositivo | Che cos’è | Indirizzo in comune |
|---|---|---|
| HDC1080 | sensore di temperatura e umidità | 0x40 |
| INA219 | monitor di corrente, tensione e potenza | 0x40–0x4F (16) |
| INA226 | monitor di corrente, tensione e potenza | 0x40–0x4F (16) |
| INA260 | monitor di corrente, tensione e potenza con shunt integrato | 0x40–0x4F (16) |
| INA3221 | monitor di corrente e tensione a 3 canali | 0x40, 0x41, 0x42, 0x43 |
| Si7021 | sensore di temperatura e umidità | 0x40 |
| OPT3001 | sensore di luce ambiente | 0x44, 0x45, 0x46, 0x47 |
| SHT30 / SHT31 / SHT35 | sensore di temperatura e umidità | 0x44, 0x45 |
| SHT40 / SHT41 / SHT43 / SHT45 (SHT4x) | sensore di temperatura e umidità | 0x44, 0x45, 0x46 |
| ADS1015 | ADC a 12 bit e 4 canali | 0x48, 0x49, 0x4A, 0x4B |
Mostra tutti i 53 dispositivi
| Dispositivo | Che cos’è | Indirizzo in comune |
|---|---|---|
| ADS1115 | ADC a 16 bit e 4 canali | 0x48, 0x49, 0x4A, 0x4B |
| ADS7830 | ADC a 8 bit e 8 canali | 0x48, 0x49, 0x4A, 0x4B |
| LM75B | sensore di temperatura digitale / termostato | 0x48–0x4F (8) |
| PCF8591 | ADC a 8 bit e 4 canali + 1 DAC | 0x48–0x4F (8) |
| TMP102 | sensore di temperatura digitale | 0x48, 0x49, 0x4A, 0x4B |
| TMP117 | sensore di temperatura digitale ad alta precisione | 0x48, 0x49, 0x4A, 0x4B |
| 24LC256 / 24AA256 / 24FC256 | EEPROM I²C da 256 Kbit | 0x50–0x57 (8) |
| AT24C32 | EEPROM I²C da 32 Kbit | 0x50–0x57 (8) |
| PCF85063A | orologio in tempo reale (RTC) | 0x51 |
| ENS160 | sensore di qualità dell’aria a ossidi metallici (TVOC/eCO₂/AQI) | 0x52, 0x53 |
| ADXL345 | accelerometro a 3 assi | 0x53 |
| BQ27441-G1 | indicatore di carica per una cella Li-ion | 0x55 |
| MAX30100 | pulsossimetro e sensore di battito | 0x57 |
| SGP30 | sensore di gas VOC ed eCO₂ | 0x58 |
| SGP40 | sensore di gas, indice VOC | 0x59 |
| SGP41 | sensore di gas, indici VOC e NOx | 0x59 |
| CCS811 | sensore di gas eCO₂ / TVOC | 0x5A, 0x5B |
| MLX90614 | termometro a infrarossi senza contatto | 0x5A |
| MPR121 | controller touch capacitivo a 12 canali | 0x5A, 0x5B, 0x5C, 0x5D |
| LPS22HB | sensore di pressione barometrica | 0x5C, 0x5D |
| GT911 | controller touch screen capacitivo a 5 punti | 0x5D |
| MCP4725 | DAC a 12 bit con EEPROM | 0x60–0x67 (8) |
| MCP4728 | DAC a 12 bit e 4 canali con EEPROM | 0x60–0x67 (8) |
| SCD30 | modulo CO₂ NDIR, temperatura e umidità | 0x61 |
| SCD40 / SCD41 | sensore di CO₂ fotoacustico, temperatura e umidità | 0x62 |
| BMI270 | IMU a 6 assi | 0x68, 0x69 |
| DS1307 | orologio in tempo reale (RTC) | 0x68 |
| DS3231 | orologio in tempo reale compensato in temperatura | 0x68 |
| MPU-6050 | accelerometro + giroscopio a 6 assi | 0x68, 0x69 |
| MPU-6886 | IMU a 6 assi | 0x68, 0x69 |
| MPU-9250 | IMU a 9 assi (accelerometro, giroscopio, magnetometro AK8963) | 0x68, 0x69 |
| SEN50 / SEN54 / SEN55 | modulo polveri sottili, VOC/NOx, temperatura e umidità | 0x69 |
| SHTC3 | sensore di temperatura e umidità | 0x70 |
| SX1509 | espansore di I/O a 16 canali con driver LED e gestione tastierino | 0x70, 0x71 |
| TCA9548A | multiplexer I²C a 8 canali | 0x70–0x77 (8) |
| IP5306 | SoC per power bank (caricatore + boost), versione I²C | 0x75 |
| BME280 | sensore di temperatura, umidità e pressione | 0x76, 0x77 |
| BME680 | sensore di gas (VOC), temperatura, umidità e pressione | 0x76, 0x77 |
| BME688 | sensore di gas con IA, temperatura, umidità e pressione | 0x76, 0x77 |
| BMP280 | sensore di pressione e temperatura | 0x76, 0x77 |
| BMP388 | sensore di pressione e temperatura | 0x76, 0x77 |
| MS5611-01BA | sensore di pressione barometrica (altimetro) | 0x76, 0x77 |
| BMP180 | sensore di pressione e temperatura | 0x77 |
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
MCP23008 MCP23017 PCF8574 PCF8574A PCF8575 SX1509 TCA9548A TCA9555
Indirizzi verificati sul datasheet di PCA9685.