Integriamo in Home Assistant il sensore MPU6500, programmandolo in ESPHome
Il sensore MPU6500 è uno dei moduli più versatili e precisi per la rilevazione del movimento in progetti di elettronica embedded. Integrando in un singolo chip un accelerometro triassiale e un giroscopio triassiale, consente di misurare in tempo reale sia le accelerazioni lineari sia le velocità angolari su tre assi spaziali. Abbinato a una ESP32, una delle piattaforme più diffuse e potenti nel mondo IoT, il MPU6500 diventa il cuore di applicazioni che spaziano dalla robotica all’automazione domestica, dal monitoraggio dell’inclinazione fino alla stabilizzazione di dispositivi mobili o di piccole strutture. Utilizzando ESPHome, la configurazione del sensore e la trasmissione dei dati verso Home Assistant diventano rapide e intuitive, permettendo di visualizzare in tempo reale le letture e sfruttarle per automazioni intelligenti o sistemi di analisi del movimento.
- Acquistalo su Amazon: https://amzn.to/4nC0zy0
Specifiche tecniche
Il MPU6500, prodotto da InvenSense, è un sensore MEMS (Micro Electro Mechanical System) che offre un equilibrio notevole tra precisione, compattezza e semplicità di integrazione. È progettato per funzionare con una tensione di alimentazione compresa tra 2,4V e 3,6V, rendendolo completamente compatibile con i livelli logici dell’ESP32, che opera a 3,3V. Il sensore comunica principalmente tramite bus I²C, ma offre anche la possibilità di utilizzo in SPI, sebbene la prima opzione sia la più diffusa nei progetti basati su ESPHome.

Internamente, il chip è in grado di misurare accelerazioni fino a ±16 g e velocità angolari fino a ±2000 gradi al secondo, valori che garantiscono un’ampia gamma operativa sia per movimenti lenti e precisi sia per rotazioni rapide. Le conversioni vengono gestite da un ADC a 16 bit, mentre un filtro digitale integrato consente di ridurre il rumore elettrico e migliorare la stabilità delle letture. È presente inoltre un sensore di temperatura interno, che può essere utilizzato per compensare eventuali variazioni termiche nelle misurazioni o per semplici scopi di monitoraggio ambientale.

Dal punto di vista fisico, il modulo MPU6500 presenta una serie di pin dedicati alla comunicazione e al controllo. Il pin VCC fornisce l’alimentazione al sensore, mentre GND rappresenta la massa comune. Le linee SDA e SCL costituiscono il bus I²C e vengono utilizzate rispettivamente per la trasmissione dei dati e per la sincronizzazione del clock. Il pin AD0 consente di modificare l’indirizzo I²C del dispositivo, utile nel caso in cui si vogliano utilizzare più sensori sullo stesso bus, mentre il pin INT è dedicato alle interruzioni, segnalando al microcontrollore la disponibilità di nuovi dati. Su alcuni moduli sono presenti anche i pin EDA e ECL, che fanno parte del bus ausiliario interno e permettono al sensore di dialogare con altri dispositivi, come magnetometri esterni. Il FSYNC, invece, consente la sincronizzazione dei campionamenti con segnali provenienti da altre sorgenti.

La compatibilità totale con il noto MPU6050 fa sì che il MPU6500 possa sfruttare le stesse librerie e lo stesso componente mpu6050 di ESPHome, garantendo così un’integrazione immediata e senza necessità di scrivere codice personalizzato. Questa caratteristica rende il modulo una soluzione estremamente pratica per chi desidera ottenere letture affidabili di accelerazione e rotazione, con la semplicità di una configurazione completamente gestita in YAML.
Collegamenti
Il collegamento tra il MPU6500 e la ESP32 avviene attraverso il bus I²C, un protocollo di comunicazione seriale che richiede soltanto due linee, semplificando notevolmente il cablaggio. Il pin SDA del sensore deve essere connesso al pin GPIO21 della ESP32, mentre il pin SCL deve essere collegato al GPIO22, che sono le impostazioni predefinite per il bus I²C in ESPHome. Il pin VCC del modulo deve ricevere un’alimentazione di 3,3 V, e GND deve essere connesso alla massa comune della scheda. È consigliabile verificare che le linee I²C dispongano di resistenze di pull-up, anche se molti moduli MPU6500 le integrano già sulla scheda.

Codice
Andiamo a creare un nuovo device su ESPHome e chiamiamolo MPU6500. Saltiamo 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 rilevare le posizioni degli assi ed inviarle da 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 (“mpu6500”) che quello più leggibile per Home Assistant (“MPU6500”).
esphome:
name: mpu6500
friendly_name: MPU6500
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: "xsIXHOgmcWYfrM2x2EtpMYssUvKFPmXMWSZ+yqXr2JM="
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.
ota:
- platform: esphome
password: "9f2ab82c98391f501b16a51b90649531"
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 (“Mpu6500 Fallback Hotspot”) con una password predefinita, in modo che sia possibile riconfigurarlo. Inoltre, è presente la funzione captive portal, che permette di riconfigurare il Wi-Fi direttamente da un browser in caso di problemi di connessione.
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Mpu6500 Fallback Hotspot"
password: "xoaEzkdaKrA3"
captive_portal:
Il sensore MPU6500 sfrutta l’interfaccia I2C, pertanto dichiariamo che è il pin SDA collegato al pin GPIO21 dell’ESP32, il pin SCL collegato al pin GPIO22, impostando la funziona scan come true.
i2c:
sda: 21
scl: 22
scan: true
id: bus_a
Creiamo il nostro sensore per elaborare ed inviare ad Home Assistant le singole rilevazioni. Dichiariamo come piattaforma mpu6050 per comunicare con la famiglia di sensore MPU6XXX (compreso anche il nostro MPU6500). Impostiamo l’indirizzo di comunicazione 0x68 e dichiariamo le entità accel_ per misurare l’accelerazione lineare sugli assi X,Y e Z, mentre per avere la velocità angolare le entità utilizzate saranno gyro_.
sensor:
- platform: mpu6050
address: 0x68
accel_x:
name: "MPU6500 Accelerazione X"
id: accel_x
accel_y:
name: "MPU6500 Accelerazione Y"
id: accel_y
accel_z:
name: "MPU6500 Accelerazione Z"
id: accel_z
gyro_x:
name: "MPU6500 Giroscopio X"
id: gyro_x
gyro_y:
name: "MPU6500 Giroscopio Y"
id: gyro_y
gyro_z:
name: "MPU6500 Giroscopio Z"
id: gyro_z
update_interval: 0.5s
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 MPU6500 da integrare.

Autorizziamo la configurazione e vedremo apparire i valori rilevati dal sensore MPU6500.
