Standardy v USB, displeje pro IoT a linuxové telefony, InstallFest 2025

26. 3. 2025
Doba čtení: 15 minut

Sdílet

O víkendu 15. a 16. března se v Praze konala tradiční komunitní konference InstallFest. Druhý den se mluvilo o displejích pro IoT, aktualizaci embedded systémů, Linuxu v telefonech a historickém vývoji USB.

Petr Stehlík: Zkušenosti se stavbou Wi-Fi displejů

Co se dozvíte v článku
  1. Petr Stehlík: Zkušenosti se stavbou Wi-Fi displejů
  2. Michal Lenc: Aktualizace embedded systémů pomocí bootloaderu NuttX
  3. David Heidelberg: pravý tučňák v telefonu (2025)
  4. Ondřej Caletka: USB v průběhu věků

Proč vlastně používat a někam připojovat displej? Když začínáme s novým programovacím jazykem, obvykle píšeme Hello world nebo blikáme LEDkou či čteme data z čidla. Dokud máte Arduino připojené k počítači, hodnoty vám běží na displeji počítače, ale nemůžeme ho odpojit a někam odnést. Můžeme doplnit displej, ale ten je zase pak svázaný s čidlem. Wi-Fi displej vám pak umožňuje zobrazovat data jinde, než kde je měříte.

Je možné používat i jiné protokoly, ale Wi-Fi má veliký dosah. Wi-Fi je obvykle připojená k internetu, takže můžete sledovat informace přes celý svět. Můžeme pak zobrazovat další informace, které získáme z internetu. Tím si můžeme vyrobit velmi variabilní zobrazovač čehokoliv.

Schopnosti displejů

Schopnosti displejů záleží na technologii jejich zobrazování. Můžeme používat LCD, OLED nebo e-ink. LCD s pasivní maticí má velmi nízkou spotřebu, ale ty jsou jen monochromatické. TFT displeje s aktivní maticí jsou zase barevné, ale zase mají vysokou spotřebu. Volte raději IPS než TN, má totiž výrazně lepší pozorovací úhly.

Pro stavbu Wi-Fi displeje můžeme použít různé mikrokontroléry, výhodné je použít přímo takové, jaké mají integrovanou Wi-Fi. Je možné použít malé počítače s ESP32, Arduino nebo třeba Raspberry Pi Pico W. Pokud se mikrokontrolérů bojíte, můžete používat některý z jednodeskových počítačů, které mají vyvedené GPIO. K dispozici jsou Raspberry Pi Zero W, Pi 3/4/5 nebo Orange Pi.

Vhodný displej je možné vybrat podle mnoha různých kritérií, například podle okolního osvětlení. Pokud bude provozován v prostředí s neustálým osvětlením, můžeme dobře použít e-ink, který je na přímém slunci výborně vidět. Naopak TFT displeje se hodí spíše do interiéru, protože na přímém slunci jsou špatně čitelné. Existují i displeje, které dynamicky přizpůsobují svůj svit podle okolního světla.

Spotřeba a cena

Můžeme volit také podle spotřeby, protože u bateriově napájeného zařízení potřebujeme šetřit energií. E-ink displej nemá žádnou spotřebu, pokud se nepřekresluje, nevyžaduje vůbec napájení. Naopak TFT displeje mají spotřebu stovek mW na centimetr čtvereční displeje. Dalšími kritérii můžou být uhlopříčka nebo podle počtu signálů, kdy můžeme použít I2C nebo SPI. Je třeba také zvažovat, zda pro vybraný displej máme k dispozici ovladač.

Displeje mohou mít i dotykovou vrstvu, která může být rezistivní nebo kapacitní. Pokud váš displej dotykové ovládání nenabízí, nemusíte házet flintu do žita. Můžete doplnit dotykové ovládání mimo displej. K tomu je možné využít klasická tlačítka, kapacitní dotyková tlačítka nebo třeba starý touchpad z notebooku.

U většiny displejů roste cena s uhlopříčkou exponenciálně. Za rozumnou cenu je možné koupit například 4" displej v rozlišení 480×320. Je ale potřeba dát pozor na různé výrobce, kteří dodávají velmi podobné displeje, které ale používají pro ovládání různé knihovny. Nedal jsem na to pozor a mám mezi lidmi tři různé displeje, pro které musím generovat různý kód s různými ovladači. Displeje bez podpory DMA bývají v překreslování displejů třikrát pomalejší.

Pokud vás nebaví hardware stavět a pájet, existují hotové moduly ESP32 s e-ink displejem. Například LILYGO T5–4.7-S3 má krásný displej s 16 odstíny šedi a řadu dalších výstupů. Stačí vzít tento displej, baterii a můžete fungovat. Podobně jsou k dispozici desky s OLED nebo TFT displeji. Zajímavým projektem je ESP32 CYD (Cheap Yellow Display), což je jednoduché přenosné zařízení s velmi širokou podporou komunity. Velké TFT displeje také existují pod názvem ESP32 Sunton, které je možné koupit až v 7" verzi. Je to velmi podobné zařízení, ale už není ‚cheap‘.

Programování

Pro programování vlastního Wi-Fi displeje je potřeba nízkoúrovňový ovladač pro konkrétní typ displeje, knihovna s primitivy a pak nějaká nadstavba pro kreslení složitějších ovládacích prostředí třeba s menu. Každý displej má svůj vlastní ovladač a je potřeba jej pro daný displej najít. Někteří výrobci dávají na svůj GitHub forky běžných knihoven s doplněním podpory vlastních displejů.

Pro tvorbu pokročilejších grafických rozhraní se používají takzvané widgety, tedy různé prvky, ze kterých se prostředí skládá. Jde o různá tlačítka, posuvníky, menu, grafy a podobně. Tohle nechcete sami psát, je to na roky práce. Petr Stehlík doporučuje grafickou knihovnu LVGL, která se podle něj vymyká z běžných open-source knihoven. Má obrovské množství widgetů a běží úplně na všem, včetně Linuxu a Windows.

Ovládání je velmi podobné HTML a CSS, ale existují i různé WYSIWYG editory, kde je možné napozicovat jednotlivé prvky a vygenerovat zdrojový kód. Mezi ty nejběžnější jsou Squareline Studio, EEZ Studio, LVGL GUI builder, GUILTION a další. Autor LVGL se roky díval, jak se ostatní snaží vytvořit editory pro jeho knihovnu, až vytvořil vlastní LVGL Editor.

Michal Lenc: Aktualizace embedded systémů pomocí bootloaderu NuttX

V embedded světě je někdy potřeba aktualizovat produkční zařízení na dálku. V tomto konkrétním případě jsou zařízení rozeseta po celém světě a používají stovky kB velký obraz. Ten se nahrává do externí paměti NOR, poté se po restartování zařízení program nakopíruje do hlavní paměti. Chceme, aby to bylo rychlé a v případě problémů se to umělo vrátit do původního stavu.

Operační systém NuttX je otevřený RTOS vydaný pod licencí Apache, který je kompatibilní se standardem POSIX a má širokou podporu architektur: ARM, AVR, RISC-V a další. Je napsán v C, přebírá syntaxi Kconfig a je hodně konfigurovatelný. Můžete si spoustu věcí zapnout nebo naopak povypínat. Projekt vznikl už v roce 2007 a nedávno do něj přibyla podpora zavaděče MCUboot. To je přesně ten typ updatování, který jsme hledali.

Více oddílů

O nahrání nového firmwaru se stará sama aplikace, bootloader pak při příštím startu novou verzi objeví a nasadí. Využívají se při tom dva oddíly, kdy je update nahrán do sekundárního oddílu a po rebootu je překlopen do primárního. Primární se zároveň překlopí do sekundárního a slouží jako záloha. V režimu scratch se používá ještě třetí oddíl, který slouží jako odkladiště části kopírovaného firmwaru. Dále existují algoritmy offset a move, které mají o něco větší odkladiště a posouvají se v něm.

Nevýhodou tohoto přístupu je, že třetí oddíl je opotřebováván častými přepisy. Je třeba také zálohu provést při každém updatu, což je výrazný bottleneck, pokud je sekundární oddíl v externí paměti. Potvrzení se také provádí zápisem do paměti, ze které program běží, čemuž je lepší se vyhnout.

Bezpečně se zálohou

Velkým problémem originálního řešení byla také doba aktualizace, kterou je možné vyřešit eliminací zápisu na NOR. Záloha by měla být dostupná pořád a nevytvářet se během updatu. Proto se používají tři oddíly: z prvního běží program a na něm je bootloader.

Nejprve proběhne záloha primárního na terciální oddíl a poté se ze sekundárního na primární zapíše nová verze firmware a po rebootu se spustí. Pokud by něco selhalo, je možné vše znovu z terciálního oddílu přenést zpět na primární. Celý update je pak vlastně jen kopírování obrazu z terciální paměti do primární.

Vylepšený algoritmus

Původní algoritmus vyžadoval pro update čtyři až pět minut, pokud už je záloha vytvořená, stačí pro nový update jen 20 sekund při 2MB obrazu. Potřebujeme ale tři oddíly a klade to větší nároky na externí paměť. Tento způsob byl poslán jako patch do MCUboot, ale úprava byla během několika měsíců odmítnuta. Hlavně se jim nechtělo udržovat další algoritmus.

Je možné se vyhnout forkování tím, že si vývojáři napíší vlastní bootloader. Pokud vynecháme šifrování a podpisy, je to relativně jednoduché. V primární paměti je na začátku bootloader a za ním je obraz systému. Ten má hlavičku a případně ocásek. Výsledný algoritmus pak vlastně jen kopíruje obrazy mezi oddíly. Rozhodli jsme se to napsat do NuttiXu.

Hlavička se skládá ze speciální magické hodnoty označující obraz pro bootloader, verze hlavičky, velikosti hlavičky, kontrolního součtu CRC, velikosti obrazu, identifikátoru a adresy další hlavičky pro budoucí rozšíření. Všechny informace za CRC jsou už hlídané, kdyby se nám při přenosu něco rozbilo. Bootloader je připraven i na to, kdyby se restartoval v půlce zálohy. Po zápisu totiž původní verzi zneplatní a tím pozná, že je hotovo. Dokud není update zneplatněný, bude probíhat znovu.

NuttX bootloader umožňuje spolehlivé a rychlé aktualizace se zálohou, navíc používá algoritmus šetrný k paměti. Je integrovaný v mainline NuttXu, můžete si to stáhnout a vyzkoušet. Zatím chybí šifrování a počítá se jen s tím, že používáte externí paměť, protože sloty zabírají více místě v paměti.

David Heidelberg: pravý tučňák v telefonu (2025)

Uživatelé chtějí věci rychle, levně a kvalitně. Na serveru to kvalitně jde, linuxáci mají jednodušší život než windowsáci. Pokud to chcete levně, budete se mnoho věcí muset naučit sami.

Mnoho aktuálních aplikací se umí přizpůsobit mobilnímu zobrazení, takže řada aplikací je už teď k dispozici. Linux na telefonu umožňuje si prostředí přizpůsobit specifickým spotřebám. Telefon je pak možné využívat netradičním způsobem nebo jej ovládat neobvyklými metodami, třeba jen tlačítky.

Mnoho lidí už dnes každodenně používá linuxové telefony, běžné úkony jsou proveditelné, jen občas méně pohodlné. Babičce byste ho asi dávat neměli, ale běžný ajťák si s ním bez problémů poradí. K populárním aplikacím jsou na Linuxu funkční alternativy: Flare umí například psát s uživateli v síti Signal.

Jak vybrat telefon

Když začínaly přicházet linuxové telefony, předpokládali byste, že je vše funkční a výrobce do vývoje vložil spoustu peněz. Ne každá firma je schopná investovat, proto chodí zkratkami. Je možné koupit telefony, na kterých běží běžný Linux, jaký máte třeba na svém počítači. Příkladem takového přístroje je Librem 5, který ale nemá příliš dobrou výdrž na baterie. Výrobce vám ale garantuje, že vše funguje, jak má.

Dále je možné zvolit telefon, který byl původně dodáván s Androidem, ale byl na něj portován Linux. U nich není žádná podpora od výrobce, ale můžete se obrátit o pomoc na komunitu. Příkladem takového telefonu je například OnePlus 6.

Existují i přístroje, které jsou dodávány bez software, například PinePhone PRO. Původní vývoj software skončil a výrobce začal dodávat jen telefony. Pak jste na úrovni telefonů s Androidem, kde výrobce váš Linux vůbec nezajímá.

Relativně nový způsob nabízejí přístroje, kde běží linuxová distribuce, ale využívá se původní jádro dodávané v Androidu. Výrobce dodal software, který funguje. Obvykle se ale nepočítá s příliš dlouhou údržbou. V poslední době se to mění, protože nová evropská pravidla tlačí na to, aby výrobce podporoval zařízení déle. Stále jsou tu ale problémy s takto upravenými linuxovými jádry, jejichž úpravy nejsou příliš kvalitní a často ani bezpečné.

Poslední kategorií jsou komunitní hračky, což jsou recyklované starší telefony. Zajímavý seznam zařízení je možné najít na webu distribuce postmarketOS. Jsou ale v různém stavu podpory, někde sotva nabootujete jádro, jinde funguje celkem vše. Jakmile je kolem konkrétního zařízení silná komunita, je to dobré. Pokud je tam jednotlivec, který ve svém volném čase občas něco udělá, není výsledek příliš použitelný.

Různé distribuce

Existuje celá řada různých linuxových distribucí, například postmarketOS, Mobian, Manjaro a řada dalších experimentů. Projekt postmarketOS vznikl jako projekt, který recykluje staré telefony, ale už podporuje i aktuální přístroje a bude se přejmenovávat. Mobian staví na Debianu a doplňuje svoje úpravy pro lepší běh na telefonu.

Z uživatelského prostředí si můžete vybrat mezi řadou rozhraní jako GNOME, Phosh, KDE, SXMO, Ubuntu Touch a další jako třeba Lomiri. S celou řadou jiných prostředí si můžete hrát, ale na běžné používání to asi není.

Rozběhnout základ Linuxu na telefonu je obvykle možné, postmarketOS má návody týkající se různých přístrojů a postupů k jejich zprovoznění. Často jsou některé hlavní části používány v různých průmyslových zařízeních a už mají ovladače. Paradoxně rozběhnout Wi-Fi a Bluetooth je velmi snadné, protože vlastně stačí načíst firmware a pak použít ovladač. Složitější je to se zvukem a telefonováním.

Pro uživatele je dnes nejdůležitějším parametrem kvalita kamery, což je pro linuxové telefony aktuální téma. Je tam celá řada komponent, které musejí spolupracovat a zpracovávají obraz. Výhodou linuxového světa je, že je možné recyklovat předchozí práci ostatních vývojářů. V noteboocích se začaly používat moderní kamery, které jsou velmi podobné těm v telefonech. Díky tomu jsme mohli software pro zpracování obrazu použít i v telefonech.

Najděte si komunitu

Při vývoji pro linuxové telefony je potřeba začít nalezením správné komunity. Najděte si něco, v čem jste dobří, a zapadněte do komunity. Sledujte, co se tam děje. Ostatní uživatelé jsou obvykle ochotní odpovídat a pomáhat s mnoha věcmi. Poté stačí pokračovat malými krůčky, nahlášením chyby nebo přidáním funkcionality. Každý malý krůček se počítá, budou z toho mít zisk všichni.

Komunity v současné době řeší zejména zpracování obrazu z kamer, spolehlivost a testování na reálném hardware, podporu lokální umělé inteligence a získání finančních příspěvků na hosting a další činnost. Provoz stojí nějaké peníze, dává smysl přispět nějakému projektu, který stejně používáte.

Ondřej Caletka: USB v průběhu věků

Počítače existovaly ještě před USB a v té době se jednoduše použily ty konektory, které už byly na trhu k dispozici. Obvykle jsme s nimi používali specializovaná jednoúčelová zařízení jako klávesnice, tiskárny a další. Existovalo mnoho nefunkčních a nebezpečných kombinací a vše bylo určeno pro připojení ve vypnutém stavu. Do této situace vstoupilo USB, které mělo většinu problémů vyřešit.

USB je univerzální rozhraní pro připojení periferií, má nové exkluzivní konektory a kabely a je navrženo pro zapojování za provozu. Takové kabely poznáte podle toho, že mají napájecí piny delší než datové. Návrh navíc přímo eliminuje nebezpečná a nefunkční zapojení.

Zajímavou novinkou také byla možnost napájení malých periferií včetně správy odběru. Hardware byl navržen tak, aby byl levný a jednoduchý, zbytek se zařizuje softwarově uvnitř počítače.

Sběrnice a konektory

Sběrnice je zapojena do podoby stromu, na jehož vrcholu je hostitel a dále se mohou jednotlivé větve vytvářet pomocí hubů. Takto je možné zapojit až 127 zařízení. Přenos probíhá po dvou drátech a je řízen hostitelem.

K dispozici jsou různé konektory. Nejobvyklejší je klasický obdélníkový konektor je typu A slouží pro připojení zřízení, druhým standardním portem je port B. Ten známe vlastně jen z tiskáren, protože se nikde jinde nepoužívá. Kabely je možné buď na obou stranách odpojit nebo jsou jednou stranou napevno připojeny k zařízení. Původně mohly mít kabely až pět metrů, později byla maximální délka zkrácena na tři.

Základní přenosová rychlost pro malá zařízení byla 1,5 Mbps a je možné k ní využít jen napevno připojené kabely. Druhou rychlostí je pak 12 Mbps a USB 2.0 přišlo s rychlostí 480 Mbps. Tato rychlost se přidala do repertoáru rychlostí, takže tyto varianty už dnes podporuje každé zařízení.

Kabely jsou vždy orientované pomocí konektorů, aby nebylo možné je zapojit obráceně a vytvářet zakázané kombinace. Existují i zakázané typy kabelů, například takzvané USB prodlužovačky nebo kabely se stejným typem konektorů. Standard také říká, že na horní straně konektoru je přítomna ikona, která nabízí optickou i hmatovou odezvu. Při zapojování tedy musíme ikonu vidět a tím zajistíme, že je konektor orientován správně. To je ale jen teorie, která počítá s tím, že lidé neignorují standardy.

Širší využití

Ukázalo se, že by mohlo být výhodné používat USB také k něčemu jinému. Například by se telefon někdy mohl chovat jako hostitel a někdy jako zařízení. Můžete ho připojit k počítači, ale také k němu pak můžete připojit třeba flešku. To nám ale zase kazí systém jednoznačných kabelů a zapojení. Standard tedy byl rozšířen o režim USB On-The-Go, který používá například populární Raspberry Pi.

USB má možnost automatického adresování a enumerace připojených zařízení. Počítač automaticky zjistí, že jste připojili nové zařízení a pozná jeho typ. Často není potřeba mít ani žádný speciální ovladač, protože existuje celá řada obecných zařízení jako klávesnice, myši, bloková zařízení, webové kamery, sluchátka, modemy a čtečky karet. K těmto zařízením je možné přistupovat přímo bez jakýchkoliv přídavných ovladačů.

Později přišlo rozhraní USB 3, které přineslo další vysoké rychlosti až do 5 Gbps. Pro to už nestačí původní kabely a používají se dvě linky navíc pro duplexní přenos. Zajímavé je, že se jim podařilo zachovat zpětnou kompatibilitu se zásuvkami a konektory typu A a zásuvky typu B. Může tak koexistovat s USB 2.0, které může zůstat beze změny. Později přišly rychlosti až do 40 Gbps.

Napájení

USB počítá s napájením zařízení, přičemž dodává 5 V a proud přiděluje po jednotkách, které jsou v základním stavu 100 mA a hostitel má v základu pět těchto jednotek. Pokud používáte hub, ten má obvykle čtyři porty, jednu jednotku si vezme pro sebe a čtyři rozdělí mezi ně.

Poté přišly mobilní telefony a ukázalo se, že USB je pro tento účel docela výhodné. Pro to nám 500 mA už nestačí a odebírat víc je rizikové, protože můžou zareagovat protizkratové ochrany. Výrobci tedy začali používat datové dráty pro vyjednání vyššího proudu. Poté přišel standard, který umožnil signalizovat možnost z USB portu odebírat až 1500 mA.

To ale nestačilo, proto se objevily pokročilejší nabíjecí systémy, které začaly měnit napětí postupnými kroky od 5 voltů až do 20 voltů. Nejznámější je Quick Charge, který ve verzi 3.0 dovoluje dokonce telefonu objednat si správné napětí, které je pak přivedeno rovnou na nabíjenou baterii. Nejhorší, co musíte řešit při nabíjení, je teplo. Proto se vám hodí, když nemusíte používat uvnitř další měnič. Tohle je ale nestandardní řešení, které má své problémy.

USB typu C

Všechno nám ale převrátil konektor USB-C, protože vznikl konektor, který umí pracovat na obou stranách kabelu. Přestalo nám dávat smysl řešit, kterým směrem potečou data a napájení. Konektor dovoluje přenést až 5 A a je možné ho využít k mnoha různým účelům, nejen pro USB. Uvnitř je celkem 24 linek a konektor je symetrický a je možné ho libovolně otočit.

Konektor typu C přidal další možnosti napájení, včetně kombinace 5V/1,5A a 5V/3A. Poté přišel standard Power Delivery dovoluje signalizovat na konfiguračním kanálu mimo jiné zvýšení napájecího napětí. Z původních 5 V je možné jít na 20 V a nejnověji až na 48 V. Každý kabel s USB-C je schopen přenést až 60 W, s digitálně značkovanými kabely jsme schopni přenášet až 240 W.

Power Delivery umožňuje změnit směr toku proudu. Pokud máte například monitor s USB-C, můžete z něj napájet připojený notebook, který mu v opačném směru posílá data. Zařízení se mohou domluvit, že budou používat jiný protokol než USB, třeba Thunderbolt.

Svět ovšem není ideální a ne všichni výrobci se drží standardů. Někteří vynechávají v konektorech rezistory Rd a pak zařízení nelze napájet kabelem C-C. Nebo používají společný rezistor Rd, nepropojují zrcadlové datové linky nebo chybí přepínač SuperSpeed linek. SuperSpeed USB pak funguje jen v jedné orientaci konektoru.

linux_sprava_tip

Směrnice Evropského parlamentu a Rady EU číslo 2022/2380 říká, že malá přenosná zařízení musejí používat zásuvky typu USB-C a musejí používat Power Delivery pro více než 5 V a 3 A. Navíc musejí obsahovat standardní piktogramy, které signalizují přítomnost nabíječky v balení a požadovaný výkon. Tato směrnice má za úkol omezit elektroodpad, ale nezakazuje přibalovat do zařízení nabíječku.

(Autorem fotografií je Petr Krčmář.)

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.