Home Assistant seriál s Jakubem->Díl 20: LilyGo T-Display 1,14″ TFT: CO₂ panel pro Home Assistant přes ESPHome
Úvod
V dnešním díle seriálu si ukážeme LilyGo T-Display 1,14″ TFT. Displej si nastavíme, připojíme do Home Assistantu, napíšeme pár jednoduchých automatizací a nakonec si k němu vytiskneme vlastní krabičku na 3D tiskárně.
Dlouho jsem přemýšlel, jak v pracovně zobrazovat přesné hodnoty CO₂. LEDkový strom, který jsme si ukazovali v minulých dílech, je fajn na rychlou orientaci, ale přestal mi stačit. Chtěl jsem vidět konkrétní čísla, ne jen barvu.
Velký displej mi přišel zbytečný – zabere místo a nevyužil bych ho naplno. Proto jsem sáhl právě po LilyGo T-Display. Je malý, přehledný, dostatečně výkonný a přesně splňuje to, co jsem od něj potřeboval.
Možnosti využití jsou ale mnohem širší. Spousta uživatelů ho používá například pro:
- zobrazování údajů z 3D tiskárny (teploty, průběh tisku),
- teploty a vlhkosti z místností,
- stav topení,
- hodnoty z různých senzorů v Home Assistantu.
Údaje lze nechat automaticky rotovat v nastaveném intervalu nebo přepínat obrazovky pomocí tlačítek na desce. Několik takových příkladů si dnes ukážeme a celé si to projdeme krok za krokem.

Co budeme potřebovat
- LilyGo T-Display 1,14″ TFT
- USB-C datový kabel (ujistěte se, že máte opravdu datový kabel, ne pouze napájecí)
- nainstalovaný a nastavený ESPHome Builder z předchozích dílů
- 3D tiskárnu a filament (volitelné)
Instalace ESPHome Device Builder v Home Assistant
Otevřeme si Home Assistant a v levém menu klikneme na ESPHome Builder. Pokud ho v menu nevidíte, najdete ho přes: Settings->Addons -> ESPHome Device Builder -> Open WEB UI.
Klikneme na New Device -> New Device Setup, zadáme název zařízení (např. co2-display) a klikneme na Next.
V dalším kroku:
- klikneme na Skip this step (Wi-Fi si doplníme později v konfiguraci, nebo ji máme v secrets),
- vybereme typ zařízení ESP32,
- a znovu klikneme na Skip.
U nově vytvořeného zařízení klikneme na Edit a v konfiguraci najdeme část:
esp32:
board: esp32dev
framework:
type: esp-idf
Řádek type: esp-idf přepíšeme na:
esp32:
board: esp32dev
framework:
type: arduino

Konfiguraci uložíme.
Poté v pravém dolním rohu u zařízení klikneme na tři tečky a vybereme Clean Build Files (tím se vyčistí build cache a přepnutí frameworku se aplikuje “na čisto”).
Klikneme na Install → Manual download a počkáme na kompilaci.
To může trvat několik minut, zvlášť pokud ESPHome běží na Raspberry Pi a kompilujete poprvé.

Po dokončení klikneme na Download a vybereme Factory firmware.

Pro první nahrání přes USB vždy bereme Factory firmware. OTA firmware je až pro další aktualizace přes Wi-Fi.
Otevřeme stránku https://web.esphome.io/.
LilyGo T-Display připojíme k počítači pomocí datového USB-C kabelu (pozor – ne každý USB-C kabel přenáší data, některé jsou jen napájecí).
Na stránce klikneme na tlačítko Connect.
V prohlížeči se objeví okno se seznamem zařízení – vybereme náš displej (COM port) a potvrdíme.
Pokud se zařízení nezobrazí:
- zkontrolujte kabel (častý problém),
- případně zkuste jiný USB port,
- ujistěte se, že používáte podporovaný prohlížeč (Chrome / Edge).
Po připojení klikneme na Install a vybereme soubor Factory firmware, který jsme před chvílí stáhli z ESPHome.
Po instalaci zařízení restartujeme (odpojíme USB a znovu připojíme). Za chvíli by se nám mělo objevit v ESPHome a následně i v Home Assistantu.
Konfigurace displeje ST7789 v ESPHome
Začneme základní částí – api, ota, wifi a logger.
Tyto bloky jsou standardní základ každého ESPHome zařízení. Díky api: komunikuje displej s Home Assistantem, ota: umožňuje budoucí aktualizace přes Wi-Fi bez nutnosti znovu připojovat USB kabel a logger: nám pomůže při ladění.
Načítání CO₂ z Home Assistantu
Nejdůležitější část v kódu je sekce:
sensor:
- platform: homeassistant
Displej sám o sobě žádné CO₂ neměří. Hodnotu si tahá přímo z entity:
sensor.bedroom_co2_mh_z19_co2_value
Jakmile se hodnota změní, spustí se on_value, kde si uložíme aktuální čas (millis()) do globální proměnné co2_update_ts. Tento čas používáme pro jednoduchý animační efekt (fade-in).
Displej ST7789
display:
- platform: st7789v
Definuje samotný TFT displej. Model TTGO TDISPLAY 135×240 už obsahuje většinu potřebného nastavení (rozlišení, interní zapojení).
V lamda části se pak vykresluje celý obsah displeje.
Vykreslování obsahu
Každé překreslení začíná:
it.fill(Color::BLACK);
Tím vyčistíme obrazovku na černé pozadí.
Poté načteme aktuální hodnotu CO₂:
float c = id(co2).state;
Podle hodnoty nastavíme barvu textu:
- pod 1000 ppm → zelená
- 1000–1500 ppm → oranžová
- nad 1500 ppm → červená
Pokud by hodnota nebyla dostupná (například po restartu), zobrazí se — ppm.
Fade-in efekt
Pomocí jednoduchého výpočtu času od poslední změny vytvoříme efekt postupného rozsvícení textu během 400 ms.
Není to nutné pro funkčnost, ale díky tomu změna hodnoty nepůsobí tvrdě a displej působí „živěji“.
Rozložení prvků
Displej má šířku 240 px, proto je střed na hodnotě 120 (cx = 120).
Nadpis „CO2“ je nahoře a samotná hodnota je vykreslena větším fontem přibližně uprostřed.
Tím máme hotový plně funkční CO₂ displej, který:
- čerpá data z Home Assistantu,
- barevně reaguje na kvalitu vzduchu,
- a vizuálně zvýrazní každou změnu hodnoty.
Úprava prahových hodnot a barev
if (!isnan(c)) {
if (c < 1000) { r = 0; g = 255; b = 0; }
else if (c < 1500) { r = 255; g = 165; b = 0; }
else { r = 255; g = 0; b = 0; }
}
Změna prahů (ppm)
Stačí upravit hodnoty 1000 a 1500.
Například:
if (c < 900)
else if (c < 1300)
Tím si nastavíte vlastní hranice pro změnu barvy.
Změna barvy
Barva je definovaná pomocí RGB hodnot r, g, b v rozsahu 0–255.
Například méně výrazná červená může být:
{ r = 200; g = 0; b = 0; }
Po úpravě konfiguraci nahrajte přes OTA a změna se projeví okamžitě.
esphome:
name: esphome-web-737fac
friendly_name: Bedroom - CO2 display
min_version: 2025.9.0
name_add_mac_suffix: false
esp32:
board: esp32dev
framework:
type: esp-idf
logger:
api:
encryption:
key: ""
ota:
platform: esphome
password: ""
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Fallback Hotspot"
password: ""
# --- CO2 z Home Assistantu ---
sensor:
- platform: homeassistant
id: co2
entity_id: sensor.bedroom_co2_mh_z19_co2_value
on_value:
then:
- lambda: |-
// při každé změně CO₂ spustíme fade-in
id(co2_update_ts) = millis();
spi:
clk_pin: GPIO18
mosi_pin: GPIO19
# --- čas poslední změny CO₂ pro fade-in ---
globals:
- id: co2_update_ts
type: uint32_t
initial_value: '0'
# --- fonty ---
font:
- file: "gfonts://Inter"
id: f_huge
size: 52
- file: "gfonts://Inter"
id: f_label
size: 18
# --- displej ST7789 135x240 (model už interně řeší podsvit na GPIO4) ---
display:
- platform: st7789v
id: tft
model: "TTGO TDISPLAY 135x240"
# cs_pin: GPIO5 # odkomentuj jen pokud by byl černý obraz
dc_pin: GPIO16
reset_pin: GPIO23
rotation: 90
lambda: |-
// Černé pozadí pořád
it.fill(Color::BLACK);
// Barva textu podle CO₂
float c = id(co2).state;
uint8_t r = 255, g = 255, b = 255; // default bílá, když je NaN
if (!isnan(c)) {
if (c < 1000) { r = 0; g = 255; b = 0; } // zelená
else if (c < 1500) { r = 255; g = 165; b = 0; } // oranžová
else { r = 255; g = 0; b = 0; } // červená
}
// Fade-in jasu po změně hodnoty (400 ms, ease-out)
const float fade_ms = 400.0f;
float t = (millis() - id(co2_update_ts)) / fade_ms;
if (t < 0.0f) t = 0.0f;
if (t > 1.0f) t = 1.0f;
float e = 1.0f - powf(1.0f - t, 3.0f);
// Ztlumíme/rozsvítíme zvolenou barvu podle e
Color txt = Color((uint8_t)(r * e), (uint8_t)(g * e), (uint8_t)(b * e));
// Layout
const int cx = 120;
const int top = 8;
const int mid = 40;
it.printf(cx, top, id(f_label), TextAlign::TOP_CENTER, "CO2");
if (!isnan(c))
it.printf(cx, mid, id(f_huge), txt, TextAlign::TOP_CENTER, "%.0f ppm", c);
else
it.printf(cx, mid, id(f_huge), txt, TextAlign::TOP_CENTER, "--- ppm");
V ukázce konfigurace jsou API klíč a OTA heslo uvedené přímo v kódu.
V praxi doporučuji tyto údaje přesunout do souboru secrets.yaml, aby:
- nebyly veřejně viditelné (např. při sdílení kódu),
- se omylem nedostaly do Git repozitáře,
- a bylo možné je snadno změnit bez úpravy hlavního YAML.
Každý si tedy nahraďte:
- API encryption key,
- OTA heslo,
- případně fallback AP heslo
vlastními hodnotami.
Načítání teploty a vlhkosti z Home Assistantu
esphome:
name: esphome-web-737fac
friendly_name: Bedroom - CO2 display
min_version: 2025.9.0
name_add_mac_suffix: false
esp32:
board: esp32dev
framework:
type: esp-idf
logger:
api:
encryption:
key: ""
ota:
platform: esphome
password: ""
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Fallback Hotspot"
password: ""
# --- CO2 z Home Assistantu ---
sensor:
- platform: homeassistant
id: temp
entity_id: sensor.bedroom_temperature_and_humidity_sensor_ble_temperature
- platform: homeassistant
id: hum
entity_id: sensor.bedroom_temperature_and_humidity_sensor_ble_humidity
on_value:
then:
- lambda: |-
// při každé změně CO₂ spustíme fade-in
id(co2_update_ts) = millis();
spi:
clk_pin: GPIO18
mosi_pin: GPIO19
# --- čas poslední změny CO₂ pro fade-in ---
globals:
- id: co2_update_ts
type: uint32_t
initial_value: '0'
# --- fonty ---
font:
- file: "gfonts://Inter"
id: f_huge
size: 52
- file: "gfonts://Inter"
id: f_label
size: 18
# --- displej ST7789 135x240 (model už interně řeší podsvit na GPIO4) ---
display:
- platform: st7789v
id: tft
model: "TTGO TDISPLAY 135x240"
# cs_pin: GPIO5 # odkomentuj jen pokud by byl černý obraz
dc_pin: GPIO16
reset_pin: GPIO23
rotation: 90
lambda: |-
it.fill(Color::BLACK);
float t = id(temp).state;
float h = id(hum).state;
const int cx = 120;
it.printf(cx, 8, id(f_label), TextAlign::TOP_CENTER, "Bedroom");
if (!isnan(t))
it.printf(cx, 40, id(f_huge), TextAlign::TOP_CENTER, "%.1f °C", t);
else
it.printf(cx, 40, id(f_huge), TextAlign::TOP_CENTER, "--.- °C");
if (!isnan(h))
it.printf(cx, 100, id(f_label), TextAlign::TOP_CENTER, "Humidity: %.0f %%", h);
else
it.printf(cx, 100, id(f_label), TextAlign::TOP_CENTER, "Humidity: -- %%");
V této variantě už displej nezobrazuje CO₂, ale přímo hodnoty teploty a vlhkosti z Home Assistantu.
Stejně jako u CO2 se používá:
platform: homeassistant
To znamená, že ESPHome nic neměří samo – pouze si přebírá aktuální hodnoty z existujících entit v Home Assistantu.
Zpracování hodnot
V lambda části si načteme aktuální stav:
float t = id(temp).state;
float h = id(hum).state;
Protože se po restartu nebo při ztrátě spojení může stát, že hodnota ještě není dostupná, kontrolujeme ji pomocí:
if (!isnan(t))
Pokud je hodnota dostupná, zobrazí se na displeji.
Pokud ne, vykreslí se náhradní text (–.- °C nebo — %), aby bylo jasné, že data zatím nejsou k dispozici.
Rozložení na displeji
- Horní část: název místnosti
- Střed: velká hodnota teploty
- Spodní část: vlhkost
Díky TextAlign::TOP_CENTER je vše zarovnané na střed displeje a přizpůsobené rozlišení 135x240px.
Automatické překreslování
Parametr:
update_interval: 1s
zajišťuje, že se displej každou sekundu překreslí.
To je důležité zejména po restartu nebo při obnovení spojení s Home Assistantem.
Tohle je funkčně čistá a přehledná varianta – ideální například na noční stolek nebo do pracovny, kde člověk chce rychle vidět aktuální klima v místnosti.
Přepínání obrazovek tlačítkem
esphome:
name: esphome-web-737fac
friendly_name: Bedroom - CO2 display
min_version: 2025.9.0
name_add_mac_suffix: false
esp32:
board: esp32dev
framework:
type: esp-idf
logger:
api:
encryption:
key: ""
ota:
platform: esphome
password: ""
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Fallback Hotspot"
password: ""
# --- SPI (nutné pro ST7789V) ---
spi:
clk_pin: GPIO18
mosi_pin: GPIO19
# --- stránky + fade timestamp ---
globals:
- id: page
type: int
initial_value: '0'
- id: co2_update_ts
type: uint32_t
initial_value: '0'
# --- tlačítko pro přepínání obrazovek ---
binary_sensor:
- platform: gpio
id: btn_next
name: "T-Display Button"
pin:
number: GPIO0
inverted: true
mode:
input: true
pullup: true
on_press:
then:
- lambda: |-
id(page) = (id(page) + 1) % 2;
id(co2_update_ts) = millis();
# --- fonty ---
font:
- file: "gfonts://Inter"
id: f_huge
size: 52
- file: "gfonts://Inter"
id: f_label
size: 18
# --- senzory z Home Assistantu ---
sensor:
- platform: homeassistant
id: co2
entity_id: sensor.bedroom_co2_mh_z19_co2_value
on_value:
then:
- lambda: |-
id(co2_update_ts) = millis();
- platform: homeassistant
id: temp
entity_id: sensor.bedroom_temperature_and_humidity_sensor_ble_temperature
- platform: homeassistant
id: hum
entity_id: sensor.bedroom_temperature_and_humidity_sensor_ble_humidity
# --- displej ---
display:
- platform: st7789v
id: tft
model: "TTGO TDISPLAY 135x240"
dc_pin: GPIO16
reset_pin: GPIO23
rotation: 90
update_interval: 1s
lambda: |-
it.fill(Color::BLACK);
const int cx = 120;
// -------------------------------
// Page 0: CO2
// -------------------------------
if (id(page) == 0) {
float c = id(co2).state;
uint8_t r = 255, g = 255, b = 255;
if (!isnan(c)) {
if (c < 1000) { r = 0; g = 255; b = 0; }
else if (c < 1500) { r = 255; g = 165; b = 0; }
else { r = 255; g = 0; b = 0; }
}
const float fade_ms = 400.0f;
float t = (millis() - id(co2_update_ts)) / fade_ms;
if (t < 0.0f) t = 0.0f;
if (t > 1.0f) t = 1.0f;
float e = 1.0f - powf(1.0f - t, 3.0f);
Color txt = Color((uint8_t)(r * e), (uint8_t)(g * e), (uint8_t)(b * e));
it.printf(cx, 8, id(f_label), TextAlign::TOP_CENTER, "CO2");
if (!isnan(c))
it.printf(cx, 40, id(f_huge), txt, TextAlign::TOP_CENTER, "%.0f ppm", c);
else
it.printf(cx, 40, id(f_huge), txt, TextAlign::TOP_CENTER, "--- ppm");
}
// -------------------------------
// Page 1: Teplota + vlhkost
// -------------------------------
else {
float t = id(temp).state;
float h = id(hum).state;
it.printf(cx, 8, id(f_label), TextAlign::TOP_CENTER, "Bedroom");
if (!isnan(t))
it.printf(cx, 40, id(f_huge), TextAlign::TOP_CENTER, "%.1f °C", t);
else
it.printf(cx, 40, id(f_huge), TextAlign::TOP_CENTER, "--.- °C");
if (!isnan(h))
it.printf(cx, 100, id(f_label), TextAlign::TOP_CENTER, "Humidity: %.0f %%", h);
else
it.printf(cx, 100, id(f_label), TextAlign::TOP_CENTER, "Humidity: -- %%");
}
V této variantě využíváme hardwarové tlačítko na desce LilyGo T-Display a pomocí něj přepínáme mezi dvěma obrazovkami.
Používáme globální proměnnou page, která určuje, co se má právě zobrazit
- 0 -> CO2 obrazovka
- 1 -> teplota a vlhkost
Po stisku tlačítka se hodnota zvýší a díky operátoru % 2 se vždy vrátí zpět na 0 nebo 1. Tím vznikne jednoduché přepínání mezi dvěma stránkami.
CO₂ obrazovka
První obrazovka zůstává stejná jako v předchozí variantě:
- hodnota CO₂ se načítá z Home Assistantu
- podle prahových hodnot se mění barva:
- zelená – dobrý vzduch
- oranžová – zvýšená koncentrace
- červená – je čas větrat
- při změně hodnoty se spustí krátký fade-in efekt
Díky tomu displej nepůsobí „digitálně tvrdě“, ale má jemnou animaci.
Teplota a vlhkost
Druhá obrazovka zobrazuje:
- aktuální teplotu v °C
- relativní vlhkost v %
Obě hodnoty jsou opět brány přímo z Home Assistantu pomocí platform: homeassistant, takže zde není žádný fyzický senzor připojený k ESP32 – zařízení slouží čistě jako zobrazovací jednotka.
Tip: místo dvou stránek můžete přidat třetí (např. tlak, čas, stav okna…) – stačí změnit % 2 na % 3 a doplnit další větev v lambda.
Automatické rotování obrazovky
esphome:
name: esphome-web-737fac
friendly_name: Bedroom - CO2 display
min_version: 2025.9.0
name_add_mac_suffix: false
esp32:
board: esp32dev
framework:
type: esp-idf
logger:
api:
encryption:
key: ""
ota:
platform: esphome
password: ""
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Fallback Hotspot"
password: ""
# --- SPI (nutné pro ST7789V) ---
spi:
clk_pin: GPIO18
mosi_pin: GPIO19
# --- stránky + fade timestamp ---
globals:
- id: page
type: int
initial_value: '0'
- id: co2_update_ts
type: uint32_t
initial_value: '0'
# --- tlačítko pro přepínání obrazovek ---
binary_sensor:
- platform: gpio
id: btn_next
name: "T-Display Button"
pin:
number: GPIO0
inverted: true
mode:
input: true
pullup: true
on_press:
then:
- lambda: |-
id(page) = (id(page) + 1) % 2;
id(co2_update_ts) = millis();
# --- fonty ---
font:
- file: "gfonts://Inter"
id: f_huge
size: 52
- file: "gfonts://Inter"
id: f_label
size: 18
# --- senzory z Home Assistantu ---
sensor:
- platform: homeassistant
id: co2
entity_id: sensor.bedroom_co2_mh_z19_co2_value
on_value:
then:
- lambda: |-
id(co2_update_ts) = millis();
- platform: homeassistant
id: temp
entity_id: sensor.bedroom_temperature_and_humidity_sensor_ble_temperature
- platform: homeassistant
id: hum
entity_id: sensor.bedroom_temperature_and_humidity_sensor_ble_humidity
interval:
- interval: 10s
then:
- lambda: |-
id(page) = (id(page) + 1) % 2;
id(co2_update_ts) = millis();
# --- displej ---
display:
- platform: st7789v
id: tft
model: "TTGO TDISPLAY 135x240"
dc_pin: GPIO16
reset_pin: GPIO23
rotation: 90
update_interval: 1s
lambda: |-
it.fill(Color::BLACK);
const int cx = 120;
// -------------------------------
// Page 0: CO2
// -------------------------------
if (id(page) == 0) {
float c = id(co2).state;
uint8_t r = 255, g = 255, b = 255;
if (!isnan(c)) {
if (c < 1000) { r = 0; g = 255; b = 0; }
else if (c < 1500) { r = 255; g = 165; b = 0; }
else { r = 255; g = 0; b = 0; }
}
const float fade_ms = 400.0f;
float t = (millis() - id(co2_update_ts)) / fade_ms;
if (t < 0.0f) t = 0.0f;
if (t > 1.0f) t = 1.0f;
float e = 1.0f - powf(1.0f - t, 3.0f);
Color txt = Color((uint8_t)(r * e), (uint8_t)(g * e), (uint8_t)(b * e));
it.printf(cx, 8, id(f_label), TextAlign::TOP_CENTER, "CO2");
if (!isnan(c))
it.printf(cx, 40, id(f_huge), txt, TextAlign::TOP_CENTER, "%.0f ppm", c);
else
it.printf(cx, 40, id(f_huge), txt, TextAlign::TOP_CENTER, "--- ppm");
}
// -------------------------------
// Page 1: Teplota + vlhkost
// -------------------------------
else {
float t = id(temp).state;
float h = id(hum).state;
it.printf(cx, 8, id(f_label), TextAlign::TOP_CENTER, "Bedroom");
if (!isnan(t))
it.printf(cx, 40, id(f_huge), TextAlign::TOP_CENTER, "%.1f °C", t);
else
it.printf(cx, 40, id(f_huge), TextAlign::TOP_CENTER, "--.- °C");
if (!isnan(h))
it.printf(cx, 100, id(f_label), TextAlign::TOP_CENTER, "Humidity: %.0f %%", h);
else
it.printf(cx, 100, id(f_label), TextAlign::TOP_CENTER, "Humidity: -- %%");
}
V této variantě ponecháváme jak tlačítko, tak automatické přepínání. Displej se tak sám rotuje v intervalu, ale kdykoliv jej lze ručně přepnout. Jedinou nevýhodou může být situace, kdy uživatel přepne obrazovku těsně před automatickým intervalem – v takovém případě dojde k dalšímu přepnutí téměř okamžitě.
Rotování nám zajišťuje tento kód:
interval:
- interval: 10s
then:
- lambda: |-
id(page) = (id(page) + 1) % 2;
id(co2_update_ts) = millis();
3D tištěná krabička
Chtěl jsem, aby displej nepůsobil jako vývojová deska z laboratoře, ale hotové zařízení. Proto jsem pro LilyGo T-Display navrhnul vlastní tištěnou krabičku.
Nejde jen o ochranu elektroniky, ale šlo mi i o vzhled a praktičnost.
Model je navržen přímo pro verzi 1,14″ TFT a respektuje:
- přesné usazení desky
- přístup ke všem tlačítkům a USB portu
- čistý vzhled bez rušivých prvků
Model najdete na MakerWorldu.
FAQ – často kladené otázky:
1) Jaký USB kabel potřebuji pro LilyGo T-Display? → Datový USB-C kabel (ne pouze napájecí).
2) Musím mít fyzický CO₂ senzor připojený k ESP32? → Ne, ESPHome načítá hodnoty přímo z entit v Home Assistantu.
3) Funguje LilyGo T-Display s Arduino frameworkem? → Ano, v konfiguraci ESPHome je nutné přepnout z esp-idf na arduino.
4) Kde najdu 3D model krabičky? → Na MakerWorldu .
Shrnutí závěrem: Co všechno zvládne LilyGo T-Display s ESPHome
LilyGo T-Display je přesně ten typ zařízení, který mě baví. Je malý, levný a jednoduchý a přitom si s ním můžete vyhrát prakticky do nekonečna.
Za jeden večer jsme z obyčejné ESP32 vývojové desky s displejem udělali:
- CO2 panel s barevným displejem
- displej na teplotu a vlhkost
- přepínání tlačítkem
- automatické rotování obrazovek
- a nakonec i hotové zařízení v 3D tištěné krabičce
Upřímně – tohle je přesně důvod, proč mám rád ESPHome. Není to hotový produkt z obchodu. Je to stavebnice a výsledek si uděláte přesně podle sebe.
Můžete si tam dát stav oken, výkon fotovoltaiky, notifikace z Home Assistantu, stav 3D tiskárny nebo cokoliv dalšího, co vás napadne.
Já ho mám aktuálně jako CO2 panel v ložnici. Možná z něj časem udělám vícestránkový informační panel. Možná přidám animace. Možná ho úplně předělám. A to je na tom to nejlepší.
Tak displejům zdar!
