Už delší dobu jsem si chtěl postavit nějaké malé domácí zobrazovadlo. Ne tablet, ne monitor a ne další svítící displej, ale něco úsporného, dobře čitelného a ideálně takového, co může stát někde na stole nebo viset na zdi a průběžně ukazovat užitečné informace.
Nakonec padla volba na e-ink displej. Tedy stejný princip, jaký se používá třeba ve čtečkách knih. Hlavní výhoda je jasná: obraz zůstane na displeji i bez trvalého napájení a při běžném použití není potřeba nic podsvěcovat. Pro zobrazování počasí, stavu baterie, solárního měření a pár dalších údajů je to skoro ideální.
Cílem nebylo udělat univerzální chytrý displej, ale jednoduchý a spolehlivý dashboard, který po probuzení stáhne aktuální data, překreslí obrazovku a zase usne.

Použitý hardware
Základem projektu je deska LaskaKit ESPink ESP32 e-Paper v3.6. Ta je pro podobné pokusy velmi pohodlná, protože už je připravená pro připojení e-ink displeje a obsahuje ESP32, takže má Wi-Fi, dost výkonu i režimy nízké spotřeby.
Jako displej používám Pervasive Displays E2741CS0B2, tedy e-ink panel s úhlopříčkou 7,4″ a rozlišením 800 × 480 bodů. To už je dost velká plocha na to, aby se tam vešlo víc informací najednou a pořád to bylo dobře čitelné.
Napájení obstarává Li-pol akumulátor 104050 s kapacitou 2500 mAh. Při jmenovitém napětí 3,7 V to odpovídá zhruba 9,25 Wh energie. Pro e-ink panel je to vhodné řešení, protože zařízení většinu času nemusí aktivně pracovat. Po probuzení si stáhne data, překreslí displej a zase přejde do úsporného režimu.

První test
První důležitý krok byl úplně obyčejný: ověřit, že displej komunikuje a že se na něm vůbec něco zobrazí. U e-ink displejů je tohle docela důležité, protože člověk hned nevidí rychlé změny jako u klasického LCD. Překreslení chvíli trvá a když je něco špatně, může to působit trochu nejistě.
První test ale proběhl dobře. Displej reagoval, obraz se zobrazil a bylo jasné, že zvolená kombinace desky a panelu je použitelná. Pro první ověření jsem použil firmware „živý obraz“, který z displeje udělá jednoduchý vzdálený zobrazovač. Díky tomu jsem nemusel hned řešit vlastní grafiku, parsování dat ani celý dashboard, ale mohl jsem si nejdřív ověřit, že hardware funguje správně.

Tohle je přesně ten okamžik, kdy projekt přestane být jen nápad a začne být reálný.
Co má zobrazovadlo ukazovat
Od začátku jsem nechtěl jen nějaký obecný ukazatel času. Hlavní smysl měl být v tom, že displej bude zobrazovat data z mých vlastních projektů.
Nakonec se jako hlavní obsah ukázaly tyto údaje:
- aktuální počasí – data ČHMÚ
- krátká předpověď počasí – data ČHMÚ
- data ze solárního měření
- stav baterie
- výkon a proud ze solárního systému
- stav výroby
- případně další technické údaje
Tím se z obyčejného displeje stal malý domácí informační panel. Neukazuje náhodná data z internetu, ale hlavně věci, které reálně používám a sleduju.
Data ze soláru
Jedna část zobrazovaných údajů pochází z mého solárního měření. Data jsou uložená v CSV souboru na webu.
Formát dat je jednoduchý:
čas; napětí baterie V; baterie %; napětí sběrnice V; shunt mV; proud mA; výkon W; stav výroby; rssi; IP
Z toho pro zobrazovadlo nejsou potřeba úplně všechny položky. Například napětí sběrnice se ukázalo jako zbytečné pro hlavní obrazovku, takže jsem ho nakonec nezobrazoval. Důležitější je napětí baterie, procenta baterie, proud, výkon a stav výroby.
Tady se objevila jedna z drobných slepých uliček. Proud a výkon se na začátku nezobrazovaly správně, protože bylo potřeba správně ošetřit jednotky a desetinná čísla. Aktuální proud byl třeba v miliampérech, ale na displeji se chvíli tvářil jako ampéry. Podobně malý výkon 0,003 W se po zaokrouhlení zobrazoval jako 0,0 W, což sice matematicky není úplně špatně, ale informačně je to k ničemu.
Nakonec se hodnoty upravily tak, aby dávaly smysl i při malých výkonech. To je u malého solárního systému docela důležité, protože právě malé rozdíly často říkají, jestli panel ještě něco vyrábí, nebo už je prakticky tma.
Software pro ESP32
U první představy by se nabízelo, že ESP32 bude samo stahovat všechna data, zpracovávat CSV soubory, počítat hodnoty, skládat obrazovku a potom ji vykreslovat na e-ink displej. Technicky by to šlo, ale zbytečně by to celé komplikovalo firmware.
Nakonec jsem zvolil jednodušší a spolehlivější cestu. Většina práce se udělá na serveru a ESP32 si stáhne už připravenou binární podobu zobrazovaných dat. Díky tomu nemusí řešit rozložení prvků, formátování textu, parsování předpovědi ani složitější úpravy hodnot.
Program v ESP32 má tedy poměrně jednoduchý úkol:
- probudit se ze spánku,
- změřit stav vlastního akumulátoru,
- připojit se k Wi-Fi,
- odeslat hodnoty baterie na server,
- stáhnout připravená binární data pro displej,
- poslat je do e-ink displeje,
- odpojit Wi-Fi,
- přejít znovu do hlubokého spánku.
Data o baterii se neposílají přímo na displej, ale nejdřív na server. Tam se zpracují společně s ostatními údaji a zapracují se do výsledné obrazovky. Díky tomu je i stav akumulátoru součástí stejného systému jako počasí a solární data.
Tohle řešení má několik výhod. Firmware v ESP32 zůstává jednodušší, displej se překresluje z už připraveného výstupu a případné změny vzhledu dashboardu se dají řešit hlavně na serveru. Když chci změnit rozložení, velikost textu nebo přidat nějakou hodnotu, nemusím nutně pokaždé přehrávat program v ESP32.
ESP32 tak funguje jako úsporný měřicí a zobrazovací modul. Po probuzení změří vlastní baterii, pošle hodnoty na server, stáhne připravený obraz pro displej a zase usne. Veškerá „chytrá“ část, tedy příprava dat a vzhledu obrazovky, běží na webu.
Důležité je i to, že e-ink displej po překreslení obraz udrží. Jakmile je obraz jednou zapsaný do panelu, zařízení už nemusí zůstávat vzhůru jen kvůli tomu, aby byl obsah vidět. To je hlavní rozdíl proti klasickému displeji a také důvod, proč se e-ink pro podobný informační panel hodí.
V ZIPu ke stažení je vlastní program pro ESP32 a také další ZIP soubor s knihovnou pro displej. Tuto knihovnu je potřeba ručně přidat do Arduino IDE.
Postup je jednoduchý:
Projekt → Zahrnout knihovnu → Přidat .ZIP knihovnu…
Potom se vybere celý ZIP soubor s knihovnou. Není potřeba ho předem rozbalovat.
Nastavení desky je podle screenshotu níže. Port si samozřejmě každý zvolí podle toho, na kterém se mu deska v počítači objeví.

Počasí: nejdřív jednoduše, potom lépe
Předpověď počasí byla další část projektu. Nejjednodušší cesta by byla použít některou hotovou službu typu Open-Meteo. To je fajn, funguje to rychle a na spoustu projektů by to úplně stačilo.
Já jsem ale chtěl použít data z ČHMÚ, ideálně lokálnější a pod vlastní kontrolou. Proto vznikla mezivrstva na mém webu, která data stáhne, zpracuje a uloží do jednoduššího CSV souboru.
Na serveru se o zpracování starají PHP skripty. Jeden data stáhne z ČHMÚ, další je převede do jednodušší podoby a výsledkem je CSV, které si zobrazovadlo přečte.
Tady bylo slepých uliček víc. Některé požadavky na ČHMÚ vracely chybu, jednou se řešila špatná metoda požadavku, jindy zase formát odpovědi. Nakonec se ale podařilo najít funkční postup a výsledek je lepší než tahat složitá data přímo do ESP.
Proč vlastní mezivrstva dává smysl
U malých zařízení, jako je ESP32, je dobré nenechávat všechno přímo na mikrokontroléru. Jasně, ESP32 je docela výkonné, ale pořád je lepší, když nemusí zbytečně parsovat složité odpovědi nebo řešit změny formátu.
Výhoda vlastního PHP zpracování je v tom, že když se někde změní zdroj dat, opravím skript na serveru a samotné zobrazovadlo může zůstat stejné.
Výsledkem je jednoduchý princip:
- server stáhne data
- server je zjednoduší
- server připraví binární podobu zobrazovaných dat
- ESP32 stáhne hotová binární data
- displej se překreslí
- zařízení může zase usnout
Tím se většina práce přesune na server. ESP32 pak nemusí složitě skládat celou obrazovku, řešit formátování textu, předpověď ani výpočty. Jeho úkol je hlavně připojit se k Wi-Fi, stáhnout připravená data, poslat je do displeje a znovu přejít do spánku.
Tohle je podle mě jedna z nejdůležitějších částí projektu. Samotný e-ink displej je viditelná část, ale spolehlivost celého řešení hodně stojí právě na tom, odkud a jak se berou data.
Funkční verze dashboardu
Po několika úpravách vznikla funkční obrazovka, která zobrazuje aktuální informace přehledně na jedné stránce. Původně jsem řešil hlavně to, aby se tam vešlo všechno. Jenže u e-inku je potřeba myslet trochu jinak.
Není cílem nacpat na displej co nejvíc údajů. Důležité je, aby byly dobře čitelné. E-ink má výborný kontrast, ale nemá barvy ani podsvícení, takže rozložení, velikost písma a mezery mezi bloky jsou důležitější než efekty.
Postupně se layout upravil tak, aby hlavní hodnoty byly větší a vedlejší informace nepřekážely. Předpověď počasí jsem nakonec zkrátil na 3 dny místo 4, protože výsledek působí vzdušněji a čitelněji.
Taky se odstranily údaje, které neměly spolehlivý zdroj. Například tlak se na začátku zobrazoval, ale v datech ve skutečnosti nebyl, takže se tam ukazovala nesmyslná hodnota. To je přesně typ věci, která na dashboardu nemá být. Lepší je zobrazit méně údajů, ale správně.

Vizuální ladění
Když už technická část fungovala, přišlo na řadu ladění vzhledu. To je u takového displeje překvapivě důležité.
Na klasickém displeji jde hodně věcí zachránit barvou. U e-inku nic takového není. Všechno stojí na kontrastu, velikosti textu, ikonách, rámečcích a rozložení.
Nejvíc se osvědčilo:
- velké hlavní hodnoty
- jednoduché oddělení bloků
- minimum zbytečných detailů
- dostatek volného místa
- jasné nadpisy
- žádné drobné texty, které se špatně čtou
Výsledkem je obrazovka, která nevypadá přeplácaně a dá se přečíst i z větší vzdálenosti. To je u podobného zobrazovadla důležitější než to, jestli se na něj vejde ještě jeden údaj navíc.

Napájení a spotřeba
Velká výhoda e-inku je v tom, že displej nepotřebuje energii k tomu, aby si udržel obraz. Energii potřebuje hlavně při překreslení. To znamená, že celé zařízení může většinu času spát.
V mém případě je cílem, aby se zobrazovadlo probudilo, stáhlo data, překreslilo displej a zase přešlo do úsporného režimu. Díky tomu může běžet z baterie mnohem déle, než kdyby šlo o klasický stále svítící displej.
U baterie s kapacitou kolem 9,25 Wh a spotřebě ve spánku přibližně 0,02 W vychází teoretická výdrž ve spánku zhruba na 19 dní. Reálná výdrž bude samozřejmě o něco kratší, protože je potřeba započítat probouzení, Wi-Fi a překreslování displeje. I tak je ale vidět, že pro pomalu se měnící dashboard je e-ink hodně vhodná technologie.
Slepé uličky a drobné problémy
Projekt nebyl jen přímá cesta od nápadu k hotovému řešení. Několik věcí se muselo upravit nebo úplně zahodit.
První slepá ulička byla předpověď počasí. Open-Meteo bylo jednoduché a funkční, ale nakonec dávalo větší smysl použít vlastní zpracování dat z ČHMÚ.
Další problém byl formát dat. CSV je jednoduché, ale jen do chvíle, než se některá hodnota interpretuje špatně. Proud v mA, výkon ve W, desetinné čárky, zaokrouhlování a zbytečné sloupce umí udělat v zobrazení pěkný nepořádek.
Taky se ukázalo, že není dobré zobrazovat hodnoty jen proto, že se pro ně někde našlo místo. Pokud údaj nemá spolehlivý zdroj, je lepší ho odstranit. Typický příklad byl tlak.
A nakonec se ladil i samotný vzhled. První funkční verze sice zobrazovala data, ale až po úpravách rozložení začal výsledek působit jako skutečné použitelné zobrazovadlo, ne jen testovací výpis hodnot.
Co se povedlo
Výsledkem je funkční e-ink dashboard, který zobrazuje moje vlastní data ze soláru a počasí získané z dat ČHMÚ. Nejde o hotový komerční produkt, ale o přesně ten typ domácího zařízení, který mám rád: jednoduché, účelné a přizpůsobené konkrétnímu použití.
Největší přínos vidím v tom, že celé řešení není závislé jen na jednom cizím API. Důležitá data mám zpracovaná přes vlastní web a ESP32 dostává jednoduché soubory, se kterými se mu dobře pracuje.
Zároveň se ukázalo, že 7,4″ e-ink displej je pro podobný projekt velmi příjemná velikost. Není to jen malý informační štítek, ale už opravdový panel, na kterém se dá rozumně poskládat více údajů.
Krabička
Jako první provizorní stojánek jsem použil náhodnou papírovou krabičku, do které jsem vyřízl drážku pro zasunutí displeje. Od začátku jsem ale počítal s tím, že později buď nechám vyrobit krabičku na 3D tiskárně, nebo použiju nějakou hotovou.

Jenže po několika dnech jsem došel k závěru, že tenhle jednoduchý stojánek vlastně vůbec není špatný – jen by si zasloužil trochu vylepšit. Začal jsem dřevěným hranolem o rozměrech 5 × 6 × 7 cm, kterému jsem zaoblil horní a boční hrany a celý povrch obrousil dohladka.
Jasně, upravil bych to takhle:
Poté jsem nechal zespodu vyfrézovat prostor pro umístění ESP a akumulátoru. Do horní plochy jsem vyřízl zářez pro zasunutí displeje a protažení přívodního pásku. Ze zadní strany jsem pak udělal otvor pro USB kabel.
Nakonec jsem celý stojánek natřel lazurou Balakryl DIXOL v odstínu mahagon.


Poté už zbývalo jen nainstalovat elektroniku. Displej jsem v rozích vlepil do drážky lepidlem Mamut, kterým jsem zároveň vyplnil i zbytek zářezu. Po zaschnutí jsem lepidlo přetřel, aby nebylo tolik výrazné.
ESP a akumulátor jsem do vyfrézovaného prostoru přichytil oboustrannou páskou, aby je bylo možné v případě potřeby jednodušeji vyjmout. Pro vyvedení USB konektoru jsem musel použít prodlužovací kabel. Ten jsem také vlepil pomocí Mamutu do připraveného otvoru a připojil k ESP.

Tím byl stojánek hotový. Spodní otvor jsem jednoduše přelepil papírem, což pro domácí použití úplně stačí.


Zobrazovadlo mám umístěné ve skleněné vitríně, takže mechanické poškození displeje prakticky nehrozí. Proto jsem se nakonec rozhodl spíš pro stylový stojánek než pro uzavřenou krabičku.
Závěr
Stavba e-ink zobrazovadla se ukázala jako hodně povedený projekt. Na první pohled je to jen displej s několika hodnotami, ale ve skutečnosti se v něm spojilo víc věcí najednou: ESP32, e-ink panel, vlastní web, CSV data, ČHMÚ, solární měření a úsporný provoz.
Nejdůležitější poznatek je asi ten, že u podobného projektu není nejtěžší samotné zobrazení textu na displeji. Mnohem důležitější je dobře si rozmyslet, odkud se data berou, jak se zpracují a co má na obrazovce opravdu smysl zobrazovat.

Moc hezké zařízeníčko 🙂
Díky
Kdybys tam chtěl háčky a čárky nad písmeny, tak viz zde: https://github.com/petrbrouzda/fontconvert8-iso8859-2