\chapter{Reflexe} \label{kapitola:reflexe}

Tato kapitola se zabývá vyhodnocením didaktických materiálů a~možnými změnami pro další iteraci vývojové desky, které vyplývají z~výsledků ověřování během praktické výuky a~testování, jak je podrobně popsáno v~kapitole \ref{kapitola:overeni-v-praxi}. Výsledky těchto ověřování zahrnují zpětnou vazbu ohledně funkčnosti, spolehlivosti a~uživatelské přívětivosti vývojové desky, ale také strukturu a~náročnost vytvořených úkolů. Zohledňují se také názory a~doporučení kolegů, kteří se podíleli na konzultaci výsledného produktu. Tyto konzultace přinesly cenné postřehy týkající se optimalizace návrhu, snížení výrobních nákladů a~zlepšení celkového pohodlí a~přehlednosti pro uživatele. Na základě těchto poznatků je možné identifikovat možné oblasti pro zlepšení, jako je výběr alternativních komponent, úpravy v~návrhu desky pro usnadnění montáže, změny didaktických materiálů a~širší možnosti využití vývojové desky ve výuce, nebo v~běžné praxi.


\section{Didaktické materiály}

Jak bylo popsáno v~kapitole \ref{kapitola:overeni-v-praxi}, ověření probíhalo ve dvou scénářích, konkrétně v~prostředí střední školy a~následně na vysoké škole. Účastníky tvořili žáci a~studenti různých věkových a~dovednostních kategorií. Z~důvodu časové tísně byly oba kurzy zaměřeny na práci se základní deskou a~světelným modulem. Praxe ukázala, že začínat s~bezdrátovým spojením, jak je navrženo v~původní struktuře didaktických materiálů, je značně náročné. Je proto vhodné nejprve posílit dovednosti v~práci s~vývojovou deskou a~se samotným programovacím prostředím a~jazykem pomocí jednodušších úkolů.

Z~původní struktury byla tedy rozdělena kategorie \emph{Základní deska} na kategorie \emph{Základy} a~\emph{Sítě}. Toto uspořádání se v~návaznosti na výsledky ověření jeví jako nejvhodnější pro systematické a~efektivní osvojení potřebných dovedností. Zde je srovnání původní a~upravené struktury úkolů:

\newpage
\begin{mdframed}[innerleftmargin=20pt, innerrightmargin=20pt, innertopmargin=20pt, innerbottommargin=20pt]
    \begin{center} % Obalíme obsah středovým boxem
    \begin{minipage}{0.9\textwidth} % Nastavíme šířku obsahu na 80 % rámečku
    \begin{multicols}{2}
    \baselineskip 15pt
    
    {\centering \textbf{\large Původní struktura}\par}
    \vspace{5pt}
    \begin{itemize}
        \item Základní deska
        \begin{itemize}
            \item Sériová linka
            \item Wi-Fi
            \item HTTP Server
            \item Bluetooth
        \end{itemize}
        \item Světelný modul
        \begin{itemize}
            \item Světla
            \item Tvary
            \item Animace
            \item Rolovací text
            \item Hra života
        \end{itemize}
        \item Klimatický modul
        \begin{itemize}
            \item Meteostanice
            \item Webová stránka
        \end{itemize}
    \end{itemize}
    
    \vfill\null
    \columnbreak
    
    {\centering \textbf{\large Nová struktura}\par}
    \vspace{5pt}
    \begin{itemize}
        \item Základy
        \begin{itemize}
            \item Sériová linka
        \end{itemize}
        \item Světelný modul
        \begin{itemize}
            \item Světla
            \item Tvary
            \item Animace
            \item Rolovací text
            \item Hra života
        \end{itemize}
        \item Klimatický modul
        \begin{itemize}
            \item Meteostanice
            \item Webová stránka
        \end{itemize}
        \item Sítě
        \begin{itemize}
            \item Wi-Fi
            \item HTTP Server
            \item Bluetooth
        \end{itemize}
    \end{itemize}
    \end{multicols}
    \end{minipage}
    \end{center}
\end{mdframed}
\vspace{10pt}

Kategorie \emph{Základy} nyní obsahuje úkoly zaměřené na základní práci s~vývojovou deskou, primárně tedy se sériovou linkou, která je potřebná pro většinu dalších navazujících úkolů z~ostatních kategorií. Uživatel si zde procvičí základní práci s~vývojovou deskou, sériovou linkou a~syntaxi jazyka.

Druhá nová kategorie \emph{Sítě} se již věnuje zmíněným náročnějším úkolům, tedy zprovoznění Wi-Fi, HTTP serveru a~technologii Bluetooth a~je zařazena za všechny ostatní kategorie. Protože je například práce s~Wi-Fi sítí obsažena v~některých dalších úkolech, je na ni občas odkazováno jako na prerekvizitu formou viditelného upozornění v~hlavičce stránky, viz obrázek \ref{fig:web-upozorneni}, což narušuje linearitu postupu v~jednotlivých úkolech. I~přesto je tento nelineární přístup u~některých úkolů v~praxi výhodnější.

\begin{figure}[h!]
    \vspace{10pt}
    \centering
    \includegraphics[width=\textwidth]{obrazky/web-upozorneni.png}
    \label{fig:web-upozorneni}
    \caption{Upozornění na prerekvizitu pro úkol.}
    \vspace{10pt}
\end{figure}

Lze však očekávat, že struktura úkolů bude v~budoucnu podrobena změnám vzhledem k~přibývajícímu obsahu, dalším úpravám a~testování nových funkcí zařízení. Aktuální verze sady úkolů bude vždy k~dispozici na webové verzi dokumentace.

S~ohledem na časové rozvržení materiálů se zdá být původní návrh správný, tj. rozsah šesti setkání, který vychází z~praxe kroužku programování platformy Arduino na Gymnáziu Jana Keplera. Tento rozsah se osvědčil a~je také cílem pro navržené didaktické materiály, tedy jednotlivé úkoly. Lze tedy předpokládat, že stejný rozsah bude adekvátní i~pro sadu připravených úkolů a~není třeba provádět mnoho úprav v~návaznosti na časové rozvržení. Záleží však na učiteli, jaké úkoly se rozhodne se žáky řešit a~kolik času jim bude věnovat. To ovšem také závisí i~na dovednostech skupiny žáků a~výsledná časová náročnost se může u~různých skupin lišit.

Forma dokumentace a~didaktických materiálů v~podobě webových stránek se ukázala jako velmi vhodná. Uživatelé během testování vyzdvihovali jejich přehlednost a~jednoduchost. Zároveň je velmi snadné provádět úpravy a~rozšiřovat obsah těchto webových stránek nejen ze strany autorů, ale i~uživatelů a~veřejnosti jednoduchou úpravou ve verzovacím systému Git.


\section{Softwarové vybavení}

Zvolení PlatformIO jakožto vývojové platformy se v~praxi ukázalo jako velmi vhodné řešení. PlatformIO poskytuje jednotnou platformu pro správu zdrojového kódu a~hardware, což umožňuje efektivní práci s~vývojovou deskou napříč různými operačními systémy. Díky této multiplatformní podpoře mohou uživatelé minimalizovat technické obtíže související s~kompatibilitou.

Jedním z~důležitých aspektů je zavedení jednotného prostředí, tedy editoru a~s~ním spjatých nástrojů. Jednotné prostředí se ukázalo jako důležité pro hladký průběh práce s~celým systémem, zejména v~kontextu vzdělávacích kurzů s~mnoha účastníky. I~když PlatformIO není úzce spjato s~konkrétním textovým editorem či vývojovým prostředím, sjednocení takového prostředí mezi všemi účastníky kurzu přináší výrazné výhody. Vedoucí výuky může zvolit vhodné prostředí v~návaznosti na skupinu účastníků a~jejich úroveň znalostí a~dovedností.

Toto sjednocení umožňuje učiteli efektivně prezentovat základní principy systému prostřednictvím jednoho sdíleného nástroje. Minimalizuje se tím riziko fragmentace individuálních problémů, které by mohly vzniknout při využití různých vývojových prostředí s~odlišnými funkcemi a~nastaveními.

Flexibilita PlatformIO však zároveň umožňuje pokročilým uživatelům zvolit si vlastní, pro ně vhodnější vývojové prostředí. Tento přístup podporuje individuální přizpůsobení na základě osobních preferencí a~zkušeností, což je výhodné zejména při práci na složitějších projektech.

Autor práce proto doporučuje využití vývojového prostředí PlatformIO IDE (viz sekce \ref{sekce:platformio-ide}), které kombinuje textový editor, správu knihoven a~multiplatformní podporu. Tato kombinace nástrojů vytváří ucelený a~intuitivní rámec, který je ideální jak pro začínající, tak pokročilé uživatele, a~před\-sta\-vu\-je vhodnou volbu zejména pro vzdělávací kurzy a~projekty zaměřené na práci s~vývojovými deskami.


\section{Hardware}

Následující poznatky jsou založeny na testování první verze vývojové desky. Na základě těchto poznatků vyplývajících  z~testování v~praxi, viz kapitola \ref{kapitola:overeni-v-praxi}, byla vytvořena druhá verze, která řeší značnou část problémů, jež se během testování objevily. Tato nová verze je nyní dostupná jako oficiální funkční iterace v dříve zmíněném Git repozitáři na adrese \url{https://github.com/realcharmer/capyboard}.

\subsection*{Pořizovací cena}

Zásadním problémem, kterému čelí prototyp vývojové desky, i~přes původní cíl nízkých výrobních nákladů, je vysoká pořizovací cena. Tato částka je ovlivněna několika faktory, zejména složitým procesem osazování některých komponent a~jejich vysokou cenou, jako je například SMD USB-C konektor, nebo samotný ESP32 modul, který vyžaduje složitý proces pájení, který není snadné reprodukovat v~domácích podmínkách.

Dalším nevýhodným aspektem je výroba v~malých sériích, která je nákladná, viz sekce \ref{sekce:implementace-cena}. Při větší sériové výrobě by cena výrazně poklesla. Nicméně, nelze soupeřit s~rozsáhlou produkcí konkurenčních nástrojů, jako je například micro:bit, které jsou vyráběny ve velkých množstvích a~za nižší cenu. Tyto konkurenční nástroje však mají i~mnoho nevýhod, jak je rozebráno konkrétně v~kapitole \ref{kapitola:nastroje}.

Když vezmeme v~potaz nákupní cenu některých stavebnic, například desky Arduino a~potřebných rozšíření a~součástek, zjistíme, že abychom touto sadou a~jejími součástkami pokryli možnosti implementovaného prototypu, vyšplhá se výsledná cena také poměrně vysoko. Samotné Arduino UNO lze v~tuto chvíli sehnat za přibližně 700 korun\footnote{Aktuální cena v~Internetovém obchodě \url{rpishop.cz}}, ale jakmile přidáme senzory, moduly pro komunikaci, napájecí komponenty a~další příslušenství, celkové náklady rychle rostou. Naopak jiný typ vývojových desek, například zmíněný micro:bit, svou podstatou ani neumožňuje tak rozsáhlá rozšíření funkcionality.

Jako příklad může sloužit situace, kdy chceme z~Arduina vytvořit zařízení s~podobnými funkcemi jako má prototyp vývojové desky. Potřebovali bychom zakoupit základní desku Arduino, několik senzorů (např. teplotní senzor, světelný senzor), moduly pro komunikaci (např. Wi-Fi nebo Bluetooth), různé konektory, nepájivé pole (breadboard) a~případně i~další rozšiřující komponenty. Kromě vysokých nákladů na komponenty bychom také museli investovat čas a~úsilí do jejich integrace.

V~kontrastu s~tím, Capyboard nabízí hotové řešení, které eliminuje potřebu mnoha externího pří\-slu\-šen\-ství, což může z~dlouhodobého hlediska představovat nejen úsporu nákladů, ale i~času a~úsilí. Pro vzdělávací instituce, které se snaží efektivně spravovat své zdroje, může být tato integrovaná přístupná platforma výrazně výhodnější, navzdory počátečním investicím.

\subsection*{Velikost paměti}

První verze prototypu desky Capyboard využívá jako své jádro modul \emph{ESP32-S3-WROOM-1-N4} s~pamětí o~velikosti pouze 4~MB, což vyžaduje speciální konfiguraci pro strukturu paměti, viz sekce \ref{sekce:konfigurace}. To nijak nebrání funkcionalitě, avšak představuje další konfigurační soubor, který může zbytečně navyšovat komplexnost při iniciálním pochopení celého systému u~nových uživatelů.

Tato potřeba speciální konfigurace může být pro nováčky odrazující, zejména pokud nejsou obez\-ná\-me\-ni s~detaily hardwarové architektury a~správou paměti. Na druhou stranu, pro pokročilejší uživatele tato konfigurace nabízí možnost optimalizace a~efektivního využití dostupné paměti.

V~praxi se však ukázalo, že původní navrhované řešení změny struktury paměti v~sekci \ref{sekce:konfigurace} nestačí v~případě, že je výsledný firmware příliš veliký, například při integraci mnoha externích knihoven. Proto bylo potřeba strukturu paměti optimalizovat. Optimalizace zahrnovala přerozdělení dostupné paměti tak, aby byl maximalizován prostor pro firmware a~minimalizovány nepoužívané oblasti. To má za následek znehodnocení funkce OTA (Over-the-air update), tedy bezdrátové aktualizace firmwaru. Podrobnosti o~těchto změnách jsou popsány v~příkladu \ref{src:partitions-ota} v~sekci \ref{sekce:konfigurace-ota}.

Konečné a~optimální řešení však vzniklo v~podobě druhé verze prototypu, která nově využívá modul \emph{ESP32-S3-WROOM-1-N8} s~větší dostupnou pamětí. Tato verze vývojové desky je nyní dostupná ve výše zmíněném Git repozitáři.

\subsection*{Tlačítko Reset}

Původní prototyp byl navržen bez jakýchkoliv přídavných LED či tlačítek. Při prvním testování se však ukázalo, že toto omezení představuje problém, protože některé operace vyžadují resetování programu bez přerušení spojení se sériovým monitorem. Reset je přitom možné provést stažením pinu EN k~zemi. Softwarově lze ESP32 resetovat pouze nahráním nového firmwaru nebo pomocí nástroje \emph{esptool.py}, který však vyžaduje, aby nebyla otevřena sériová linka. To lze provést například následujícím příkazem:

\begin{minted}{bash}
esptool.py --port /dev/ttyUSB0 run
\end{minted}

Tento postup je však velice krkolomný a~bylo by vhodné na vývojovou desku implementovat tlačítko pro reset, jelikož jeho využitím se ulehčí mnoho čekání na znovu-nahrání firmware, či eliminuje potřebu pro nástroj \emph{esptool.py}. Nové revize vývojové desky již tuto změnu zahrnují a~lze provést reset pomocí tlačítka umístěného přímo na desce.

\subsection*{Změny v~usazení USB-C konektoru}

Během testování vznikl podnět, který poukazoval na fakt, že umístění USB-C konektoru na úrovni kraje desky může představovat významný problém při integraci desky do ochranného krytu nebo krabičky. V~takové konfiguraci je připojení USB-C kabelu obtížné a~nepraktické, protože konektor není snadno přístupný. Vhodnější by bylo, kdyby USB konektor vyčníval, což by umožnilo snadné a~pohodlné připojení kabelu bez nutnosti vyjmutí vývojové desky ven z~krabičky.

Na druhou stranu, umístění zařízení do krabičky je relevantní v~případě, že je již naprogramované. Vytvoření otvoru pro USB-C konektor by jej mohlo vystavit prachu a~dalším nečistotám, což by mohlo ovlivnit jeho funkčnost. V~praxi se pravděpodobně ukáže jako lepší řešení zařízení z~krabičky při každé potřebě přeprogramování vyjmout. V~tomto případě by současné umístění konektoru na kraji desky bylo vyhovující.

\subsection*{Modul s~baterií}

Po naprogramování desky a~vytvoření plnohodnotně funkčního výrobku, například meteostanice s~po\-u\-ži\-tím klimatického modulu, nelze výsledné zařízení snadno umístit do místnosti a~provozovat například ke sledování stavu ovzduší. To je způsobeno tím, že základní desku lze napájet pouze skrze USB-C konektor nebo připojením baterie na správné GPIO piny. Ukázalo se tedy, že bateriový modul je velmi vítaným rozšířením pro další iterace vývojové desky, jak bylo zmíněno v~kapitole \ref{sekce:implementace-baterie} následovně:

\begin{displayquote}
    \uv{Za zmínku rovněž stojí fakt, že využitím postranních konektorů typu SMD, ačkoliv zvětšují plochu celé desky, je možné desku v~budoucnu rozšířit o~stejnou sadu konektorů i~ze spodní strany, například pro modul s~baterií.}
\end{displayquote}

Tato úprava zjednodušuje použití zařízení v~reálném světě a~také zvyšuje jeho atraktivitu pro různé praktické aplikace, od monitorování životního prostředí až po autonomní senzory a~zařízení nasazená v~terénu. Připojení baterie by tedy umožnilo nepřetržitý provoz bez nutnosti modul připojovat a~napájet jej skrze USB-C. Poslední verze prototypu je již pro tento modul připravena a~nabízí konektory z~obou stran.

\subsection*{Zajištění správné orientace připojení modulů}

V~tuto chvíli je prototyp desky osazený dvěma identickými bočními konektory, jak je vidět na obrázku \ref{fig:mainbaord-3d}. To může způsobit situaci, kdy uživatel zapojí libovolný modul opačně, tedy otočený o~180 stupňů se špatnou polaritou. To by nemělo poškodit vývojovou desku ani samotný modul, avšak nebude jej možné ovládat.

Tento problém může mít významné důsledky pro funkčnost celého systému a~negativně ovlivňuje pohodlnost práce se stavebnicí. Nesprávné zapojení může vést k~frustraci uživatele, zejména pokud není okamžitě zřejmé, že problém spočívá v~nesprávné polaritě konektoru.

Řešením tohoto problému by mohlo být osazení vývojové desky jiným typem konektorů, nebo využití konektorů s~různou délkou. To ovšem nutně neeliminuje problém s~opačným propojením.

Další možností je zahrnutí ochranných mechanismů přímo na úrovni desky nebo modulu. To může zahrnovat například diody pro ochranu proti obrácené polaritě, které zamezí průchodu proudu v~případě nesprávného zapojení. Takový přístup však může zvyšovat náklady a~složitost návrhu desky.

Nejvhodnějším řešením by mohlo být použití klíčovaných konektorů, které fyzicky zabrání nes\-prá-n-mu zapojení. Klíčované konektory mají asymetrický tvar nebo speciální zářezy, které umožňují správné spojení pouze jedním směrem. Nabízí se tedy využít boční konektory, které na desce nejsou propojeny k~žádné součástce nebo čipu (často označované jako NC -- Not Connected). V~tomto případě by bylo možné jeden z~těchto konektorů zaslepit, čímž by se fyzicky zabránilo možnosti opačného zapojení modulu. Toto řešení je relativně jednoduché a~levné na implementaci a~zároveň poskytuje vysokou míru spolehlivosti při zamezení nesprávného zapojení.

\subsection*{Vrstvení jednotlivých modulů}

Stávající rozšiřující moduly jsou navrženy s~konektory směřujícími pouze dolů, což umožňuje jejich připojení k~vývojové desce. Tento přístup vytváří velmi jednoduchý systém, avšak neumožňuje vrstvení jednotlivých modulů. V~této souvislosti se nabízí otázka, zda by nebylo žádoucí rozšířit funkcionalitu systému o~možnost zapojení více modulů současně, a~zda je výhodné obětovat jednoduchost ve prospěch modularity.

Jednou z~možností je navrhnout nové moduly, které budou připraveny pro sériové zapojení tím, že budou mít konektory i~na své druhé straně. Tento přístup by neměl způsobit žádné problémy, protože pro komunikaci s~moduly se využívají protokoly SPI nebo \( I^2C \).

Jako druhá možnost se nabízí návrh modulu, který by poskytoval více výstupů pro připojení dalších modulů a~agregoval by je do jedné sběrnice.

\subsection*{Zigbee a~Thread}

Jak bylo dříve zmíněno, prototyp vývojové desky využívá modul ESP32-S3-WROOM-1, který disponuje několika bezdrátovými technologiemi pro přenos dat, konkrétně Bluetooth a~Wi-Fi. Firma ESPRESSIF však nabízí i~další verze tohoto čipu, které rozšiřují možnosti bezdrátové komunikace. Podrobnosti o~různých verzích čipů jsou dostupné v~nástroji ESPRESSIF Product Selector\footnote{\url{https://products.espressif.com}}, z~nichž konkrétně ESP32-C6 a~ESP32-H2 podporují technologie \emph{Zigbee} a~\emph{Thread}. Využitím zmíněných alternativních čipů lze dosáhnout podpory i~těchto bezdrátových technologií. \parencite{espressif-product-selector}

Zigbee i~Thread jsou protokoly pro bezdrátové sítě založené na standardu IEEE 802.15.4, které jsou oblíbené zejména v~aplikacích zaměřených na nízkou spotřebu energie a~robustní komunikaci. Tyto technologie, zejména Zigbee, jsou hojně využívány v~oblasti IoT, jak je patrné z~aktuální nabídky chytrých zařízení pro domácnosti. Typicky se používá v~chytrých domácnostech, průmyslové automatizaci a~dalších aplikacích, kde je požadována nízká latence a~spolehlivost. \parencite{zigbee-faq}

IEEE 802.15.4 je standard navržený pro nízkou spotřebu energie a~nízkou přenosovou rychlost pro bezdrátové síťové technologie. Tento standard definuje fyzickou a~linkovou vrstvu pro bezdrátové sítě s~malým dosahem a~nízkými nároky na energetickou spotřebu, jak popisuje oficiální standard \parencite{ieee-802-15-4}. Hlavní rysy standardu IEEE 802.15.4 zahrnují:

\begin{itemize}
    \item \textbf{Nízká spotřeba energie:} Optimalizován pro zařízení s~omezeným napájením.
    \item \textbf{Nízká datová rychlost:} Nabízí přenosové rychlosti typicky od 20 kb/s do 250 kb/s.
    \item \textbf{Síťová topologie:} Podporuje hvězdicové, clusterové a~meshové topologie.
    \item \textbf{Bezpečnost:} Zahrnuje základní mechanismy pro zabezpečení dat a~přístupu k~síti.
    \item \textbf{Frekvence a~dosah:} Pracuje v~bezlicenčním pásmu rádiových frekvencí (např. 2,4 GHz nebo 868/915 MHz) s~dosahem obvykle několika desítek metrů.
\end{itemize}

\subsection*{Popisky GPIO}

Pokud se uživatel rozhodne využívat vývojovou desku bez připojených modulů, je orientace v~GPIO konektorech bez relevantních popisků značně složitá. Proto by bylo vhodné označit tyto konektory podle zavedených konvencí, což výrazně usnadní jejich použití a~minimalizuje chyby při zapojování vlastních komponent v~případě, že uživatel nechce používat pouze navržené rozšiřující moduly.

První možností je vytvořit sítotiskovou masku, známou v~angličtině jako \uv{silkscreen mask}, která zahrnuje bílé nebo černé popisky jednotlivých součástek a~konektorů. Tento přístup je běžně používaný v~průmyslu pro jasné a~trvalé označení komponent. Nicméně, vývojová deska je velice kompaktní a~pro umístění těchto popisků by pravděpodobně musela být rozšířena, což nemusí být vždy možné nebo žádoucí. Alternativně lze popisky natisknout na spodní stranu desky, což sice zachovává kompaktní rozměry, ale může ztížit čitelnost a~orientaci při práci s~deskou.

Další možností je umístění popisků přímo na plastový obal jednotlivých bočních konektorů. Tento přístup zajišťuje, že popisky jsou snadno viditelné a~přímo připojené k~relevantním konektorům, což usnadňuje jejich identifikaci. Nicméně, výroba konektorů s~takto specifickým označením může být finančně náročná, což by mohlo zvýšit celkové náklady na výrobu vývojové desky.