Buongiorno a tutti, ecco qui una piccola guida per muovere i prima passi con i display OLED con ESPHome
Per questa guida ho utilizzato un ESP32 Heltec con display oled incorporato che potete trovare al seguente link:
https://it.aliexpress.com/item/32958037260.html?spm=a2g0s.9042311.0.0.27424c4dE6ZhzW
La seguente guida è basata sull'add-on ESPHome per Home Assistant Core
Create un nuovo Progetto dal wizard di ESPHome
Il primo punto servirà per assegnare un nome al progetto
Al secondo punto sarà necessario scegliere il tipo di scheda utilizzata, in questo caso Heltec WiFi Kit 32 (se non fosse disponibile inseritene uno diverso perchè poi si potrà cambaire dall'editor del codice)
Al terzo punto andrà indicata la vostra rete wifi a cui il dispositivio si collegherà
Terminato il wizard vi ritrovere questa nuova entità in ESPHOME

Cliccando sul tasto edit si aprirà l'editor di configurazione
il primo passo sarà configurare correttamente ESPHome
esphome:
name: oled2
platform: ESP32
board: heltec_wifi_kit_32
wifi:
ssid: "SSID"
password: "passwordWIFI"
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Oled2 Fallback Hotspot"
password: "Zf9oas35HAIZ"
captive_portal:
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
utilizzando Board diverse è necessario modificare i campi platform e board (per esmepio nel caso si utilizza un esp8266 o simili)
subito dopo inseriremo i sensori presenti su Home assistant che vorremo visualizzare, i nomi saranno esattamente quelli di home assistant
sensor:
- platform: homeassistant
id: solare_temperature
entity_id: sensor.solare_termico
internal: true
- platform: homeassistant
id: puffer_temperature
entity_id: sensor.puffer_medio_alto
internal: true
- platform: homeassistant
id: pdc_power
entity_id: sensor.consumo_attuale_pdc
internal: true
platform indicherà la piattaforma su cui sono presenti i sensori
id sarà l'id utilizzato nel progetto ESPHome
entity_id sarà l'id dell'entità di home assistant
I sensori inseririt qui seguiranno tutte le normali regole di ESPHOME
altro componente indispensabile sarà un sensore time recueprato sempre da home assistant:
time:
- platform: homeassistant
id: time1
passiamo ora alla configurazione del display connesso tramite i2c
i2c:
sda: GPIO4
scl: GPIO15
scan: false
frequency: 700khz
questa configurazione dipenderà dal tipo di display utlizzato
Passimao ora alla configurazione dei font da utilizzare sul display:
font:
- file: 'arialblk.ttf'
id: font1
size: 48
- file: 'arial.ttf'
id: font2
size: 15
- file: 'arial.ttf'
id: font3
size: 8
N.B: i fonti non sono presenti di default, pertanto andranno caricati all'interno del path config/esphome (stessa cone per i file .png delle icone)

eventuali cone andranno indicate cosi:
image:
- file: "solar-power.png"
id: solar_icon
Nel csao in cui si voglia visualizzare molti valori sul display sarà possibile creare più pagine e impostare degli intervalli per passare da una all'altra, in questo caso faremo cosi:
interval:
- interval: 3s
then:
- display.page.show_next: my_display
- component.update: my_display
passiamo ora alla visualizzazione dei dati sul display vera e propria:
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
reset_pin: GPIO16
address: 0x3C
id: my_display
pages:
- id: page1
lambda: |-
it.printf(40, 1, id(font3), TextAlign::TOP_CENTER, "Solare Termico");
it.image(1, 30, id(solar_icon));
it.printf(50, 30, id(font2), TextAlign::BASELINE_LEFT , "%.1f°", id(solare_temperature).state);
- id: page2
lambda: |-
it.printf(1, 30, id(font2), TextAlign::BASELINE_LEFT , "Puffer PDC %.1f°", id(puffer_temperature).state);
- id: page3
lambda: |-
it.printf(1, 45, id(font2), TextAlign::BASELINE_LEFT , "Pot PDC %.1fW", id(pdc_power).state);
- id: page4
lambda: |-
it.strftime(0, 60, id(font1), TextAlign::BASELINE_LEFT, "%l:%M", id(time1).now());
In questo caso si tratta di un testo formattato quindi in printf andremo ad indicare le coordinate da cui si inizierà la scrittura (x, y)
Ogni pagina di testo formattato andrà scritta in lambda seguendo l'esempio indicato sopra
Il risultato finale sarà il seguente:

Per ogni altra informazione vi invito a visitare la pagina ufficiale relativa ai display di ESPHOME
https://esphome.io/components/display/index.html
in particoalre per i display OLED:
https://esphome.io/components/display/ssd1306.html
il progetto completo invece sarà presente qui:
https://pastebin.com/GGC19NUL