Lcd oled per Home Assistant con ESPHome

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

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.