Živý Obraz – Nový firmware 3.0 je malou revolucí

Projekt Živý Obraz má jeden velký update za druhým. Autor stále přidává nové widgety, vychytávky, rozšiřuje možnosti projektu. Nyní se dostala i velká aktualizace samotného firmware, kódu běžícího na řídících deskách od Laskakit, Pájeníčko, SeeedStudio a dalších. Tento firmware se stará o zobrazování vámi navržené obrazovky na ePapar/eInk a nyní toho umí mnohem víc.

Tento článek se bude zabývat novinkami ve firmware projektu Živý Obraz. Pokud nevíte, co to je, detailněji jsem se rozepsal tady.
Ve zkratce: ŽivýObraz.eu je projekt pro usnadnění vytvoření vlastního dashboard, informačního displeje, založeném na technologii ePaper/eInk. Drag&Drop editor usnadňuje vytvoření vlastního displeje. Informační displej může zobrazovat sdílený kalendář (apple, microsoft, google), předpověď počasí, odjezdy pražské MHD, srážkový radar, cenu a graf bitcoinu, elektřiny, akcií, kalendář a spoustu dalšího.
Výhoda ePaper displeje je velmi nízká spotřeba, velmi dobrý pozorovací úhel a navíc nesvítí.

Článek napsal Michal Ševčík, autor projektů TMEP.cz, ŽivýObraz.eu a OnlyBirds.cz.
Za článek děkuji.

Úvod

Malý image pro desku, velký skok pro Živý obraz. I tak by se dalo popsat vydání nové verze FW, které přichází téměř po roce od vydání jeho zásadnější verze. Nyní je novinek celá řada – pojďme se na ně společně podívat. Jejich dopad pro rychlé a úsporné fungování je velký, ale v novém FW je toho daleko více.

Poděkování

Obrovské díky patří Andymu, který se ujal refactoringu firmwaru do více logicky oddělených souborů, takže roztrhl patnáctiset řádkový monolit a nadále se o kód stará nejen při review, ale pomohl i s přidáním dalších funkcí. Ne, že bych s původním kódem měl zásadní problém (účelu sloužil), ale pro budoucí vývoj bylo potřeba kód výrazně zpřehlednit a rozdělit. Na jednu stranu je fajn, když se kód ještě pohodlně vejde do jednoho souboru – tím spíše do něj přispěje někdo další, kdo si chce na jednom místě projít jak se FW chová. Přeci jen princip KISS (Keep It Simple Stupid) má něco do sebe. Na druhou stranu – když to uděláte pořádně, tak se za kód nemusíte stydět a pro další rozšiřování to je jediná správná cesta. Také chci poděkovat Patriku Novákovi, který si našel čas a s vývojem nové verze rovněž pomohl.

Firmware

Co se týká “abych se za kód nemusel stydět”, tak to je záležitost i řady následujících funkcí. Dobře jsem věděl o řadě slabin, které je potřeba pořešit a mám ohromnou radost, že se je (a spoustu novinek navíc) podařilo dotáhnout a přidat. Opět – nedá se věnovat všemu, obzvlášť když je projekt stále spíše hobby záležitost. Určitě je lepší vydat něco funkčního, než se snažit udělat vše a nikdy s ničím nevyjít ven, protože to není dost dobré.

Poslední firmware můžete flashnout přes webový prohlížeč na stránce s instalací.

Dost okecávání, pojďme na to a začneme hned zásadní novinkou:

Mnohem rychlejší načítání obsahu

Načítání obrázku ze server bylo vylepšené o dvě podstatné funkce – streamování obsahu po velkých kusech dat do zařízení a také následný zápis po řádcích přímo do bufferu řadiče displeje. Koneckonců streamování dat si o to přímo říká. Na načtení obsahu tak v drtivé většině případů stačí jeden jediný průchod (namísto stránkovaného výpisu) a načtení obsahu trvá výrazně kratší dobu, typicky čtvrtinovou.

Bylo potřeba pořešit řadu překážek, ať už přidání podpory přímého zápisu pro některé modely ePaperů, tak správu paměti a její alokace pro jednotlivé úlohy. Z typické RAM 320 KB v ESP32 WROOM (které je díky desce LáskaKit ESPInk 2.x nejrozšířenější) si desítky a desítky KB ukousne buffer pro HTTPS, Wi-Fi, zpracování PNG přes PNGLE (zde má vlastní formát Zx používaný ŽO výhodu) a nakonec samotné streamování a velikost řádku v závislosti na potřebném kódování (pro konkrétní typ barevnosti displeje).

Jako vše do čeho se ponoříte – není to žádná věda, jen více věcí na které je potřeba si dát pozor. Hlavní je, že výsledek stojí za to.

Ještě podstatně lepší výdrž na baterii

Díky tomu, že stažení obrázku proběhne daleko rychleji, se také spotřebuje mnohem méně energie než doposud. I když výdrž byla velmi dobrá již nyní, odteď bude ještě lepší. Firmware totiž přináší ještě několik dalších zajímavých vylepšení:

  • Před vykreslováním displeje se vypne Wi-Fi – ta již není potřeba.
  • Při vykreslování displeje se deska přepíná do režimu “light sleep”. Odběr je typicky okolo 1 mA namísto až cca 200 mA (záleží na typu desky, taktu a aktivní Wi-Fi). U displejů vykreslujících až desítky vteřin (vícebarevné) tak dojde ke značné úspoře při běhu programu.

Fast refresh – rychlé vykreslení displeje bez probliknutí

Jedna z často poptávaných záležitostí, která se ukázala být o něco složitější na implementaci, než jsem čekal. Ve výsledku má bohužel několik zásadních omezení – je potřeba mít BW (Black and White) nebo Grayscale displej a u Grayscale je tento režim obnovení podporovaný jen pro BW typ obrázku, takže přijdete o stupně šedi. Popravdě to pro většinu informativních obrazovek nemusí tolik vadit. Je tedy na vás, jestli v administraci po upgradu na 3.0 tuto funkci u podporovaného displeje zapnete a vyzkoušíte.

Podpora nového čidla a celkově inteligentní práce s čidly

Přibyla podpora nového čidla STCC4 s detekcí teploty, vlhkosti vzduchu a CO2, které má v nabídce LáskaKit (ovšem pozor – v době psaní článku bylo potřeba čidla zkalibrovat před jejich používáním, více se dozvíte na stránce produktu). Novinkou je i inteligentní práce s čidly – doposud se software snažil při každém běhu na sběrnici detekovat použité čidlo, nyní ho zjišťuje jen při prvním zapnutí nebo po resetu. Pokud čidlo najde, tak si cachuje jeho typ a nadále používá už jen to konkrétní (do příštího vynuceného restartu desky tlačítkem nebo přerušením napájení).

Nové JSON API s pokročilejší telemetrií

Původně firmware předával veškeré parametry (rozlišení displeje, připojené AP, napětí na baterii…) jako parametry HTTP requestu typu GET. Request jako takový byl krátký, ale přeci jen předávat data strukturovaně přes JSON je lepší.

Díky tomu se nově na server předávají další informace jako je typ vývojové desky, typ displeje, verze API, teplota CPU (spíše pro zajímavost), důvod restartu zařízení (probuzení z deep sleep, vynucené tlačítkem…), jak dlouho trvalo stažení obsahu a jak dlouho vykreslení displeje, IP adresa zařízení na místní síti), …

Přesnější uspávání desky

Dříve bylo uspání desky řízené na minuty, od verze 3.0 je možné ho řídit efektivně na vteřiny s tím, že doba běhu programu a překreslení displeje se na tomto údaji kompenzuje a o tuto dobu je sleep zkrácený.

Například – pokud se zařízení má probudit za 600 vteřin, ale stažení a vykreslení dat  zabralo 8 vteřin, tak se uspí na 592 vteřin. Samotné uspání desky na dlouhou dobu ve výsledku způsobuje nepřesnost, ale nyní je možné ji předvídatelně řešit.

Podpora obrázků ve formátu PNG

Firmware v první verzi podporoval pouze BMP, ve verzi 2.0 přibyl vlastní jednoduchý RLE formát Zx na míru vytvořený pro ePaper displeje. Ten má výhodu v nutnosti malého bufferu pro streamování a v některých scénářích (např. dashboard s černou, bílou a červenou barvou) dokáže být výrazně úspornější než PNG. PNG má výhodu snadné použitelnosti a možnosti Obrazovku na serveru ukládat v tomto formátu, takže jde jednoduše exportovat/sdílet.

Podpora BMP je od této verze pryč, nemělo smysl ji udržovat a řešit jeho streamování. Server BMP sice ještě pro cca 8 historických zařízení vrací, ale i to nyní přijde pryč (a uživatelé budou nuceni upgradovat z FW 1.0).

Možnost z webu firmware jen aktualizovat

Novinkou je i to, že při aktualizaci firmwaru z webu se nově automaticky nepřepíše celá flash paměť zařízení. Instalace navíc začne i při vymazání paměti daleko rychleji.

Firmware již není generovaný jako jeden velký binární soubor, ale je správně rozdělený na bootloader apod. Nyní tak při přehrání firmware nemusíte zařízení znovu připojovat na Wi-Fi a nesmažou se informace v něm uložené (pokud při instalaci na webu nezakliknete “Erase device”).

OTA aktualizace

Od verze 3.0 se firmware umí vzdáleně aktualizovat, když to server zařízení poručí. Je to spojené i s tím, že nyní je v komunikaci se serverem udávaný přesný typ desky a displeje. Souvisí to s předchozí novinkou možnost firmware z webu jen aktualizovat – pro OTA update se použije právě jen jedna část binárek, která byla dříve součástí jednoho velkého souboru.

Přenášená data jsou šifrovaná

HTTPS na ESP32 sice není zásadní překážka, ale přeci jen ubere něco z výkonu a především alokované RAM. Přesto stojí za to ho mít, už jen proto, že to je mnoho let standard a bezpečnost je vždy potřeba brát vážně. Od této verze je komunikace se serverem zabezpečená.

Navíc se údaje na server přenáší v těle požadavku jako JSON namísto GET parametrů.

Podpora dalšího tlačítka

Aktualizovaná deska LáskaKit ESPInk 3.5 má na sobě další extra tlačítko. To je nyní možné využít – držte extra tlačítko, krátce stiskněte tlačítko pro reset desky (a pusťte) a pokud extra tlačítko přestanete držet až:

  • Po dvou+ vteřinách – obraz se vymaže do bílé a zařízení je možné odpojit z napájení a uskladnit (není vhodné skladovat ePaper, který zobrazuje obsah).
  • Po šesti+ vteřinách – vymažou se uložená data (Wi-Fi) a zařízení bude potřeba znovu připojit do sítě.

Extra tlačítko na této desce není připojené na RTC GPIO, takže s ním není možné desku probudit. Proto je potřeba ho držet při jejím resetu přes resetovací tlačítko.

Druhým zařízením, kde je tlačítko podporované, je reTerminal od SeeedStudio – zelené tlačítko na vrchu zařízení slouží při krátkém stisku k restartu a při delším stisku umí stejné věci popsané výše.

Obecně jsou tlačítka a jejich podpora pro Živák téma do budoucna, zda a jak je více podporovat. Protože nyní na server jde se stisknutím tlačítka reset i informace, že deska byla schválně restartovaná (namísto běžného probuzení z deep sleepu), tak je možné i na toto chování případně navázat nějakou akci.

Přidaný PIN do komunikace se serverem pro přidání entropie

Komunikace se serverem byla vázaná čistě na MAC adresu zařízení. Nyní je pro zvýšení nahodilosti přidaný ještě PIN kód (přenášený pod názvem X-API-key), který si každé zařízení vygeneruje a uloží v paměti. Při aktualizaci firmwaru nedojde k jeho přepisu, leda byste zvolili vymazání paměti. PIN slouží k tomu, aby každý nemohl jednoduše na základě uhodnutí MAC adresy stáhnout navázanou obrazovku daného zařízení.

Jakmile zařízení po upgradu pošle PIN na server, tak ho můžete buď ručně vyplnit v zařízení u konkrétního zařízení, nebo ještě jednodušeji: stačí odkliknout odkaz v e-mailu. Ten vám přijde po první komunikaci a budete dotázáni, zda se jedná o vaše zařízení a jestli k němu do administrace chcete přidat použitý PIN.

Lepší stabilita při nahrávání obsahu

Sice velmi výjimečně, ale mohlo docházet k timeoutu při načítání obsahu. Díky bufferovanému načítání je vše daleko rychlejší a tím pádem méně náchylnější k těmto chybám (kratší přenos = menší šance, že bude zrovna omezený zarušením nebo něčím dalším).

I tak je nyní rozdělený a zvětšený timeout při načítání obsahu pro to, abychom této situaci pomohli předcházet.

Podpora nového čtyřbarevného displeje GDEM075F52

Knihovna GxEPD2 sice s vývojem stagnuje, ale to neznamená, že je problém do ní přidávat další displeje svépomocí.

Displej GDEM075F52 od Good Display je čtyřbarevný (černá, bílá, červená, žlutá) 800x480px na úhlopříčce 7.5” a má opravdu velmi hezké barvy a celkový obraz.

Displej je nově podporovaný ve forknuté verzi GxEPD2 a jako hotový FW na stránkách ŽO.

Podpora nové desky SVERMIO

Pájeníčko přišlo se svojí deskou pro SPI ePaper displeje a přináší hned několik nových hotových produktů. Deska je firmwarem plně podporovaná a všechna sestavení FW najdete na webu ŽO pod instalací.

Přehlednější výpis do konzole

Konzolový výpis ke kvůli řadě novinek a možné nutnosti jejich debugu o něco upovídanější, ale přesto i přehlednější díky rozřazení řádek do standardních úrovní a témat.

Poslední verze knihoven

Firmware je tradičně sestavený na posledních verzích knihoven, jejichž seznam najdete jak v README na úvodu repozitáře, tak v hlavičce souboru src/main.cpp:

Článek napsal Michal Ševčík, autor projektů TMEP.cz, ŽivýObraz.eu a OnlyBirds.cz.
Za článek děkuji.

Sdílejte článek:
Ukaž světu,
že jsi Maker!
Koupit tričko
Kafe pro Chiptrona
Dodej energii dalšímu článku

Související články

Zalíbil se mi projekt zivyobraz.eu, protože jednoduše zpřístupňuje zobrazovací technologii ePaper/eInk běžným lidem bez znalosti programování. Ti si mohou naprosto jednoduchým způsobem vytvořit vlastní informační displej. Co na displeji bude je jen na nich. Služba nabízí desítky modifikovatelných widgetů -…

Oprava nefunkčního Riden RD6006

Dostal se mi do rukou „mrtvý“ regulovatelný zdroj RIDEN RD6006. Po zapnutí se neprojevoval žádnými známkami života. Jal jsem se ho tedy oživit a tady dávám návod pro ostatní. Navíc jsem nahrál alternativní firmware, který má několik předností oproti tomu oficiálnímu.

Zdroje Riden

Regulovatelné zdroje RIDEN (Ruideng) patří mezi nejoblíbenější volby bastlířů a profesionálů v dostupné cenové kategorii. Kombinace přesného měření, široké škály výkonů a aktivní komunitní podpory z nich dělá spolehlivé pomocníky do každé dílny. Tento článek poskytuje kompletní přehled všech aktuálních…

Nedávno zveřejněné zprávy poukazují na potenciální bezpečnostní rizika spojená s široce používanými čipy ESP32, které vyrábí čínská společnost Espressif.

MeshCore jako alternativa k populární off-grid textové komunikaci Meshtastic je nyní už i v Česku. Během velmi krátké chvíle se vytvořila silná komunita, která pracuje na vylepšení pokrytí právě sítí MeshCore pracující pomocí rádií s podporou LoRa. Chcete se zapojit?…

Trendy