In questo articolo vi mostrerò come realizzare un piccolo display, per home assistant per visualizzare dei dati estrapolati, dai sensori integrati su home assistant. Con le pagine sul display che cambiano, per far visualizzare ogni pagina un valore o uno stato di un device. Naturalmente do per scontato che avete Home Assistant e avete installato ESPhome.
Nel mio caso vi mostrerò come visualizzare
- Ora
- Data
- temperatura
- Umidità
- Energia consumata in KWh
- Led stato allarme “On/Off”
Naturalmente possiamo creare tutte le pagine che vogliamo, per visualizzare più dati.
Vediamo cosa serve :
Se vuoi acquistare senza sbagliare clicca sui collegamenti qui sotto, e in più mi aiuti a sostenere i costi. GRAZIE
- Home Assistant
- ESPHome
- Esp8266 (Mini D1) Micro usb
- Wsp8266 (Mini D1) Micro usb Type C
- Lcd oled i2c
- striscia led WS2812B
- case in plastica
- Fili per i collegamenti
- Font
NOTA BENE: per la corretta visualizzazione del display bisogna scegliere un font giusto, font si possono trovare sul web. io in questo esempio ho usato : ‘arial.ttf’ e ‘BebasNeue-Regular.ttf’. una volta scaricati verranno caricati sulla cartella “homeassistant/esphome/”.
Iniziamo a cablare il micro processore con lcd oled e la striscia led. Come da foto. “Esempio”
dopo avere fatto tutti cablaggi, apriamo il nostro Home Assistant, apriamo un nuovo progetto su ESPHome e selezioniamo la schedina mini D1. Carichiamo il codice” qui vi lascio il mio esempio.
captive_portal:
## Striscia led WS2812 ##
light:
- platform: neopixelbus
type: GRB
variant: WS2812
pin: D4
num_leds: 2
name: "LED"
## Comunicazione i2c##
i2c:
sda: D1
scl: D2
## Ora e Data##
time:
- platform: homeassistant
id: esptime
## Sensori che verranno visualizzati ##
sensor:
- platform: homeassistant
id: temperatura
entity_id: sensor.temperatura_paullo_temperatura
internal: true
- platform: homeassistant
id: umidita
entity_id: sensor.temperatura_paullo_umidita
internal: true
- platform: homeassistant
id: wattora
entity_id: sensor.potenza_attiva_prelevata_istantanea
internal: true
## Font utilizzati ##
font:
- file: 'arial.ttf'
id: font1
size: 16
- file: 'BebasNeue-Regular.ttf'
id: font2
size: 50
- file: 'BebasNeue-Regular.ttf'
id: font3
size: 15
- file: 'BebasNeue-Regular.ttf'
id: font4
size: 20
- file: 'BebasNeue-Regular.ttf'
id: font5
size: 25
- file: 'BebasNeue-Regular.ttf'
id: font6
size: 32
- file: 'BebasNeue-Regular.ttf'
id: font7
size: 38
## Tipo di display con visualizzazione pagine ##
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
reset_pin: D0
address: 0x3c
update_interval: 4s
lambda: |-
static int current_page_num = 1;
int number_of_pages = 5;
switch (current_page_num) {
case 1:
it.printf(64, 0, id(font1), TextAlign::TOP_CENTER, "ORA");
it.line(0, 18, 150, 18);
it.strftime(10, 60, id(font2), TextAlign::BASELINE_LEFT, "%H : %M", id(esptime).now());
break;
case 2:
it.printf(64, 0, id(font1), TextAlign::TOP_CENTER, "DATA");
it.line(0, 18, 150, 18);
it.strftime(5, 50, id(font6), TextAlign::BASELINE_LEFT, "%d.%m.%Y", id(esptime).now());
break;
case 3:
it.printf(60, 0, id(font1), TextAlign::TOP_CENTER,"TEMPERATURA");
it.line(0, 18, 150, 18);
it.printf(5, 60, id(font2), TextAlign::BASELINE_LEFT, "%4.1f °C", id(temperatura).state);
break;
case 4:
it.printf(60, 0, id(font1), TextAlign::TOP_CENTER,"UMIDITA");
it.line(0, 18, 150, 18);
it.printf(10, 60, id(font2), TextAlign::BASELINE_LEFT,"%4.1f %%", id(umidita).state);
break;
case 5 :
it.printf(64, 0, id(font1), TextAlign::TOP_CENTER,"C.ELETTRICO");
it.line(0, 18, 150, 18);
it.printf(10, 60, id(font7), TextAlign::BASELINE_LEFT,"%4.1f Wh", id(wattora).state);
break;
}
current_page_num += 1;
if (current_page_num > number_of_pages) {
current_page_num = 1;
}
Una volta aver settato tutto con i vostri sensori e avendo rispettato bene la sintassi carichiamo il codice, e se non abbiamo fatto errori dovreste vedere, un display con visualizzazione pagine.