Misurare la luce con ESPHome e Home Assistant: guida completa al sensore BH1750

Nell’ambito della domotica e dell’automazione smart, la misurazione dell’intensità luminosa è un parametro spesso sottovalutato ma incredibilmente utile. Che si tratti di regolare la luminosità delle luci in casa, ottimizzare l’irrigazione per una serra smart, oppure monitorare le condizioni ambientali in un ufficio, il sensore BH1750 si rivela una soluzione efficace, economica e facile da integrare. In questo articolo vedremo come utilizzare il BH1750 con ESPHome, per poi integrarlo nel tuo sistema Home Assistant, sfruttando appieno la sua capacità di rilevare l’illuminamento ambientale con precisione.

Acquista su Amazon:

Specifiche tecniche

Il BH1750 è un sensore digitale di intensità luminosa sviluppato dalla Rohm Semiconductor. Utilizza un’interfaccia I2C, il che lo rende particolarmente semplice da collegare a microcontrollori come ESP32 o ESP8266, ed è in grado di restituire valori in lux (lx), un’unità di misura standard dell’illuminazione, in un range compreso tra 1 lux e circa 65.000 lux.

Il BH1750 offre una precisione di circa ±20%, generando misurazioni sufficientemente precise. Possiamo, inoltre, alimentare il sensore con i 3,3V o i 5V, richiedendo corrente fino a circa 0.12 mA e questo lo rende perfetto per sensori IOT sempre accesi o per applicazioni su ESP32 alimentati a batteria o pannello solare. Questa combinazione di precisione, facilità d’uso e basso costo lo rende ideale per progetti DIY basati su microcontrollori e ambienti automatizzati.

Collegamenti

Il collegamento del sensore BH1750 è molto semplice grazie all’interfaccia I2C. Sulla nostra ESP32 andiamo a collegare il pin 3,3V al pin Vcc del sensore, il GND al GND, il GPIO4 a SDA e il GPIO0 a SCL. Il sensore è dotato di un pin chiamato ADDR per modificare l’indirizzo di comunicazione sull’interfaccia I2C, ma che non adopereremo in questa guida.

Codice

Andiamo a creare un nuovo device su ESPHome e chiamiamolo BH1750Saltiamo per il momento la connessione e selezioniamo la scheda che dobbiamo programmare (ESP32)

Una volta creato, clicchiamo su EDIT per modificare il codice. 

Questo è il codice per configurare una ESP32 per leggere i dati da un sensore BH1750 e inviarli a Home Assistant tramite ESPHome. Il dispositivo sarà accessibile in rete tramite Wi-Fi e potrà essere aggiornato via OTA (Over-The-Air) senza bisogno di connessione fisica. Potete scaricarlo a questo LINK.

All’inizio, il codice definisce il nome del dispositivo, sia quello tecnico (“bh1750”) che quello più leggibile per Home Assistant (“BH1750”).

esphome:
  name: bh1750
  friendly_name: BH1750

Poi si specifica che il microcontrollore utilizzato è un ESP32 e che il firmware verrà compilato usando il framework Arduino, che è più semplice e supportato rispetto ad altre alternative come ESP-IDF.

esp32:
  board: esp32dev
  framework:
    type: arduino

Il codice attiva il logger, che serve a registrare gli eventi e inviare messaggi di debug. Inoltre, viene attivata l’API di ESPHome, che permette a Home Assistant di comunicare con il dispositivo in modo sicuro grazie a una chiave di crittografia.

logger:

api:
  encryption:
    key: "Z3SBpsbm6CAs7L3zt/bG8KEfDoaVQr6NbH5wby7ojj8="/

Per evitare di dover collegare il dispositivo fisicamente ogni volta che si vuole aggiornare il firmware, viene attivata la modalità OTA (Over-The-Air), con una password di sicurezza. Inoltre, è presente la funzione captive portal, che permette di riconfigurare il Wi-Fi direttamente da un browser in caso di problemi di connessione

ota:
  - platform: esphome
    password: "07cec48ea12a5e388860780e8d3601cb"

captive_portal:

Per collegarsi alla rete, il codice usa le credenziali Wi-Fi salvate nei secrets di ESPHome (file separato non visibile nel codice). Se la connessione fallisce, il dispositivo crea un hotspot Wi-Fi di emergenza (“Bh1750 Fallback Hotspot”) con una password predefinita, in modo che sia possibile riconfigurarlo.

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  ap:
    ssid: "Bh1750 Fallback Hotspot"
    password: "crHfRjc4lJ45"

Trattandosi di un sensore che lavora su interfaccia I2C, questa sezione configura la comunicazione I2C tra l’ESP32 ed il sensore BH17500, impostando il pin GPIO4 dell’ESP32 come linea SDA ed il pin GPIO0 come linea SCL. La funziona scan abilita la scansione automatica dei dispositivi connessi al bus I2C, verificando quali dispositivi I2C sono collegati e il loro indirizzo.

i2c:
  sda: 4
  scl: 0
  scan: true
  id: bus_a

Il sensore viene integrato impostando la comunicazione con I2C, definendo poi le misurazione per la Luminosità con lux (lx) come unità di misura. Impostiamo l’indirizzo di lettura come 0x23 e chiediamo al sensore di ripetere la lettura ogni 2 secondi.

sensor:
  - platform: bh1750
    name: "Luminosità"
    address: 0x23
    update_interval: 2s
    i2c_id: bus_a

Salvate e verificate con Validate se il codice è stato scritto correttamente.

Collegate la ESP32 al computer tramite cavo USB, e cliccate su Install.

Conclusa l’installazione, integriamo il device su Home Assistant. Dovrebbe essere arrivata una notifica sulla plancia. In ogni caso, per integrarlo andate su Impostazioni -> Dispositivi e servizi e apparirà il dispositivo BH1750 da integrare.

Autorizzate la configurazione ed otterrete quanto segue.