Comunicazione I2C tra ESP32 e sensori ambientali

Pubblicato il 02/05/2026 ESP32

Cos'è il bus I2C

I2C è un bus seriale a due fili (SDA e SCL) che permette di collegare decine di sensori e periferiche allo stesso microcontrollore. Su ESP32 i pin di default sono GPIO21 (SDA) e GPIO22 (SCL), ma sono riassegnabili via software.

Cablaggio del BME280

Il sensore Bosch BME280 misura temperatura, umidità relativa e pressione barometrica. Collegamenti tipici:

  • VCC → 3.3V dell'ESP32
  • GND → GND
  • SDA → GPIO21
  • SCL → GPIO22

Sull'I2C servono due resistenze di pull-up da 4.7 kΩ tra SDA/SCL e 3.3V (molti breakout BME280 le hanno già a bordo).

Sketch Arduino

Installa la libreria Adafruit BME280 dal Library Manager. Codice minimo:

#include <Wire.h>
#include <Adafruit_BME280.h>

Adafruit_BME280 bme;

void setup() {
  Serial.begin(115200);
  if (!bme.begin(0x76)) {
    Serial.println("BME280 non trovato!");
    while (1) delay(100);
  }
}

void loop() {
  Serial.printf("T=%.2f °C | RH=%.1f%% | P=%.1f hPa\n",
    bme.readTemperature(),
    bme.readHumidity(),
    bme.readPressure() / 100.0);
  delay(2000);
}

Trovare l'indirizzo I2C

Se il sensore non risponde a 0x76 prova 0x77. In alternativa carica lo sketch I2C Scanner per elencare tutti gli indirizzi attivi sul bus.

Estendere il progetto

Sullo stesso bus I2C puoi aggiungere un display OLED SSD1306 (indirizzo 0x3C) per mostrare le letture senza ricorrere al monitor seriale, oppure un RTC DS3231 per i timestamp.