Il sensore MCP9808 è uno dei più economici e precisi, ideale per rilevare la temperatura ambientale ed integrarlo con Home Assistant

Il sensore MCP9808 è uno dei sensori di temperatura più adoperati per progetti complessi, in cui è necessario ottenere dati quanto più affidabili. Tipicamente adoperato sia per applicazioni industriali, sia per applicazioni più semplici come l’utilizzo per applicazioni domestiche, il sensore MCP9808 vi permetterà di adoperare l’interfaccia I2C senza troppe noie.

Specifiche

Il sensore di temperatura digitale MCP9808 rileva temperature comprese tra -20°C e +100°C con una precisione di ±0,25°C/±0,5°C (tipica/massima). Permettendo di essere alimentato sia a 3,3V che a 5V, questo sensore è adatto per progetti con dev-board Arduino e con ESP8266/ESP32, sebbene vada ricordato che supporta una tensione minima di 2,7V ed una massima di 5,5V, richiedendo fino ad un massimo di circa 400µA di corrente.

Il sensore MCP9808 possiede 8 pin:

  • Vcc: per tensioni di alimentazioni comprese tra i 2,7V e 5,5V
  • GND: per il pin del ground
  • SCL: Serial Clock, per la gestione del segnale di clock
  • SDA: Serial Data, per la trasmissione dei dati
  • A0: pin di indirizzo, per cambiare l’indirizzo del sensore nella comunicazione I2C
  • A1: pin di indirizzo, per cambiare l’indirizzo del sensore nella comunicazione I2C
  • A2: pin di indirizzo, per cambiare l’indirizzo del sensore nella comunicazione I2C
  • ALERT: Il pin di uscita dell’avviso di temperatura dell’MCP9808 è un’uscita a scarico aperto. Il dispositivo emette un segnale quando la temperatura ambiente supera il limite di temperatura programmato dall’utente.

Acquistalo:

Collegamenti

Adoperando l’interfaccia I2C i collegamenti sono piuttosto facili. Basterà collegare il nostro sensore di temperatura MCP9808 come riportato in figura. Il pin Vcc va connesso ai 3,3V, il GND al GND, il pin SDA al pin GPIO4 della ESP32 e il pin SCL al pin GPIO0.

É importante sapere che posso assegnare fino a 8 indirizzi al mio sensore, semplicemente fornendo un segnale ai pin Ao, A1 e A2. Basta quindi collegarli alla dev-board e inviare un segnale digitale per attivarli o disattivarli. Qui in tabella i relativi indirizzi disponibili.

A0A1A2Address
0000x18
0010x19
0100x1A
0110x1B
1000x1C
1010x1D
1100x1E
1110x1F

Codice

Andiamo a creare un nuovo device su ESPHome e chiamiamolo MCP9808Saltiamo 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 MCP9808 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 (“mcp9808”) che quello più leggibile per Home Assistant (MCP9808).

esphome:
  name: mcp9808
  friendly_name: MCP9808

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: "1fYwYTZjqzLCuY+OfUliKHvm88FGOMo5iUeyDbHako8="

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.

captive_portal:

ota:
  - platform: esphome
    password: "e1876d51e0460683b4d6758fd69ff4be"

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 (“Mcp9808 Fallback Hotspot”) con una password predefinita, in modo che sia possibile riconfigurarlo.

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

  ap:
    ssid: "Mcp9808 Fallback Hotspot"
    password: "PSUpmmJTZRlY"

Trattandosi di un sensore che lavora su interfaccia I2C, questa sezione configura la comunicazione I2C tra l’ESP32 ed il sensore MCP9808, 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 Temperatura (in gradi Celsius). Non andiamo ad impostare un indirizzo perché quello di default è 0x18, tuttavia se volessimo cambiare l’indirizzo attivando uno dei pin A0, A1 O A2, dovremmo specificarlo.

sensor:
  - platform: mcp9808
    name: "Temperatura MCP9808"
    i2c_id: bus_a
    update_interval: 2s

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 MCP9808 da integrare.

Autorizzate la configurazione ed otterrete quanto segue.