Come impostare l’indirizzo
Collega il pin di indirizzo così:
SDO: GND → 0x76 · VDDIO → 0x77
Le schede Adafruit BMP388/BMP390 usano 0x77 come indirizzo predefinito.
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 |
|---|---|---|
| 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 |
| HT16K33 | driver per matrici LED 16×8 con scansione tasti | 0x76, 0x77 |
| MS5611-01BA | sensore di pressione barometrica (altimetro) | 0x76, 0x77 |
| PCA9685 | driver PWM / servo a 16 canali, 12 bit | 0x76, 0x77 |
| TCA9548A | multiplexer I²C a 8 canali | 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 BMP388 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 0x77 o come 0xEE. La libreria Wire di Arduino ed ESPHome usano la forma a 7 bit.
| 7 bit | Binario | Scrittura 8 bit | Lettura 8 bit |
|---|---|---|---|
| 0x76 | 1110110 | 0xEC | 0xED |
| 0x77 | 1110111 | 0xEE | 0xEF |
Verifica che risponda
Carica questo sketch con BMP388 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[] = {0x76, 0x77};
void setup() {
Serial.begin(115200);
Wire.begin();
for (byte a : ADDRS) {
Wire.beginTransmission(a);
if (Wire.endTransmission() == 0) {
Serial.print("BMP388 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 BMP388?
0x76 o 0x77, a seconda dei collegamenti: SDO: GND → 0x76 · VDDIO → 0x77.
Posso usare più BMP388 sullo stesso bus?
Sì, fino a 2, ciascuno impostato su un indirizzo diverso. Per usarne di più, ricorri a un multiplexer TCA9548A o a un secondo bus I²C.
Perché BMP388 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 (0x77), non quello a 8 bit (0xEE).
Dispositivi simili
AHT20 BME280 BME680 BME688 BMP180 BMP280 CCS811 ENS160 HDC1080 HTU21D LM75B LPS22HB MCP9808 MS5611-01BA SCD30 SCD40 / SCD41 SEN50 / SEN54 / SEN55 SGP30 SGP40 SGP41 SHT30 / SHT31 / SHT35 SHT40 / SHT41 / SHT43 / SHT45 (SHT4x) SHTC3 Si7021 TMP102 TMP117
Indirizzi verificati sul datasheet di BMP388.