\chapter{Implementace vlastního zařízení} \label{kapitola:implementace}

Tato kapitola se zaměřuje na učitele, kteří by se chtěli vydat cestou implementace vlastního zařízení splňujícího výše stanovená kritéria, viz kapitola \ref{kapitola:kriteria}. Vzhledem k~tomu, že zařízení není v~tuto chvíli komerčně dostupné, je nezbytné nechat jej vyrobit u~libovolného výrobce PCB. Je zde rozebrán postup návrhu takového zařízení, včetně výběru typů součástek, výběr vhodného software a~samotný návrh tištěných spojů.

První část kapitoly je věnována výběru vhodných nástrojů pro tvorbu všech částí zařízení. Následuje popis návrhu základní vývojové desky, která určuje základní rozměry, a~dále jsou uvedeny detaily týkající se rozšiřujících modulů.

Poslední část kapitoly se zaměřuje na přípravu softwarového vybavení potřebného pro práci s~na\-vr\-že\-nou vývojovou deskou a~jejími moduly.

V~návaznosti kapitolu \ref{kapitola:kriteria} jsou zde shrnuty základní parametry, dle kterých je zařízení navrhováno a~které ovlivňují výběr vhodných komponent. Cílem výsledného produktu je splnit tyto podmínky:

\begin{itemize}
    \item Vhodné pro cílovou skupinu žáků vyššího gymnázia
    \item Nízká pořizovací cena
    \item Přehledná dokumentace
    \item Podpora běžně dostupných softwarových knihoven
    \item Podpora PlatformIO
    \item Široké spektrum využití a~snadná rozšiřitelnost
    \item Pozitivní přínos pro výuku programování
\end{itemize}


\section{Výběr nástroje pro návrh modulů}

Výběr optimálního nástroje probíhal na základě analýzy dostupného softwaru schopného pracovat s~komplexními návrhy plošných spojů. Agregaci takovýchto nástrojů poskytuje článek \emph{Best PCB Design Software}, který jednotlivé programy nejen uvádí, ale také porovnává a~hodnotí. \parencite{3dsourced-pcb-design-software}

Některé z~uvedených nástrojů nejsou svou jednoduchostí vhodné pro vytváření složitých návrhů, jako je právě vývojová deska z~této diplomové práce. Níže je shrnutí nástrojů, které byly vyhodnoceny jako vhodné pro tvorbu složitého návrhu:

\subsection{Altium Designer}

Altium Designer je špičkový software pro návrh plošných spojů (PCB), který vyniká zejména svými pokročilými funkcemi pro 3D vizualizaci, tvorbu schémat a~návrh desek. Je zaměřen na náročné projekty, což se projevuje podporou složitých vícevrstvých desek a~designů s~flexibilními částmi. Umožňuje také optimalizaci pracovních postupů, čímž usnadňuje celý proces návrhu od počáteční fáze až po výrobu. Díky integraci se simulačními nástroji a~knihovnami komponent mohou inženýři snadno spravovat své návrhy a~sledovat dostupnost součástek i~náklady v~reálném čase.

Pokud jde o~dostupnost a~licencování, Altium Designer je placený software, což jej činí dostupným především pro komerční firmy a~zkušené profesionály. Licence je nákladnější, ale zároveň poskytuje přístup k~pravidelným aktualizacím a~technické podpoře. Tento nákladný model je zaměřen na profesionály, kteří vyžadují špičkovou technologii a~pokročilé nástroje pro návrh složitých desek.

Na druhou stranu, software není dostupný pro různé operační systémy, nýbrž jen pro systém Windows, což může omezovat některé uživatele. Uživatelé systémů GNU/Linux nebo macOS musí hledat alternativní řešení nebo využívat virtualizační nástroje. Tento omezený přístup může být nevýhodou pro značnou část uživatelů.

\subsection{Autodesk Eagle}

Autodesk Eagle je oblíbený nástroj pro návrh PCB, který kombinuje editaci schémat, tvorbu návrhů desek a~přístup k~rozsáhlé knihovně komponent v~uživatelsky přívětivé platformě. Nabízí robustní funkce, jako jsou modulární návrhové bloky, které umožňují znovu použít části návrhů, a~nástroje pro online spolupráci, což je ideální pro týmy pracující na dálku. K~programu je také dostupná široká škála dokumentace a~edukačních materiálů.

Co se týče licencování a~podpory operačních systémů, Eagle je dostupný na více platformách, včetně Windows, macOS a~Linuxu, což rozšiřuje jeho dostupnost pro různé typy uživatelů. Program je k~dispozici v~placené i~bezplatné verzi, avšak verze zdarma je omezena v~počtu vrstev a~velikosti desky, což může limitovat možnosti pokročilých návrhů. Verze zdarma je proto vhodnější pro menší projekty a~hobby využití, zatímco komerční licence přináší plný přístup k~profesionálním funkcím, jako je například práce s~vícevrstvými deskami, pokročilé knihovny a~podpora cloudového ukládání.

\subsection{KiCad}

KiCad nabízí širokou škálu funkcí pro profesionální i~amatérské návrháře. Mezi jeho hlavní přednosti patří rozsáhlé knihovny komponent, které usnadňují návrh a~výběr potřebných součástek, nebo také podpora 3D vizualizací, což umožňuje uživatelům lépe si představit výsledný produkt. Kromě toho je KiCad známý pro svou flexibilitu a~otevřenost, což ho činí ideálním nástrojem pro různé typy projektů, od jednoduchých až po složité elektronické návrhy. Díky aktivní komunitě a~pravidelným aktualizacím je nástroj neustále vylepšován.

KiCad je svobodný software, což znamená, že je zdarma a~jeho zdrojový kód je veřejně dostupný. Tato vlastnost je obzvlášť ceněná mezi vývojáři a~studenty, kteří mohou software využívat bez nutnosti platit licenční poplatky. Podporuje širokou škálu operačních systémů, včetně Windows, GNU/Linux a~macOS, což zajišťuje dostupnost pro uživatele různých platforem.

\begin{figure}[h!]
    \vspace{10pt}
    \centering
    \includegraphics[width=\textwidth]{obrazky/kicad-pcb.png}
    \caption{Vývojové prostředí softwaru KiCad; Trasování desky.}
    \label{fig:kicad-pcb}
    \vspace{10pt}
\end{figure}

Pro návrh vývojové desky a~modulů byl zvolen nástroj KiCad. Na rozdíl od Altium Designeru a~Autodesk Eagle je zcela zdarma a~nevyžaduje placenou licenci, což z~něj činí ekonomicky dostupnou volbu pro široké spektrum uživatelů. Jako svobodný software poskytuje také volný přístup ke zdrojovému kódu, což umožňuje přizpůsobení a~rozšiřování funkcí dle potřeb uživatelů. Další předností KiCadu je jeho podpora různých operačních systémů, což zvyšuje jeho flexibilitu a~dostupnost. Tyto faktory, společně s~aktivní komunitou uživatelů, činí KiCad atraktivním nástrojem, který umožňuje se snadno zapojit do úprav vytvořených návrhů v~rámci této práce.

\section{Návrh modulů}

Tato sekce se zabývá procesem návrhu prototypu vývojové desky a~jednotlivých modulů. Výsledné zdrojové soubory pro jejich výrobu jsou volně dostupné ve veřejném Git repozitáři na adrese \url{https://github.com/realcharmer/capyboard}.

\subsection{Základní vývojová deska}

Deska je osazena výhradně povrchově montovanými součástkami (SMD), což zajišťuje, že na zadní straně desky není žádná vystupující ostrá hrana. Toto uspořádání minimalizuje riziko nechtěného poškrábání pracovního stolu a~umožňuje bezpečné používání zařízení v~různých prostředích, včetně učeben bez pracovních podložek. Avšak nevýhodou je, že v~domácích podmínkách není možné desku osadit bez použití specializovaných nástrojů. Navíc je třeba zdůraznit, že cena některých SMD sou\-čás\-tek může být nepatrně vyšší, stejně tak i~náklady za výrobu. Při odběru většího množství desek však tento cenový rozdíl nehraje příliš velkou roli.

\begin{figure}[h!]
    \vspace{20pt}
    \centering
    \includegraphics[width=0.5\textwidth]{obrazky/capyboard-plot.pdf}
    \caption{Schéma vývojové desky}
    \label{fig:schema}
    \vspace{15pt}
\end{figure}

Na obrázku \ref{fig:schema} je zobrazeno schéma prototypu vývojové desky, které zahrnuje pohled na vrchní stranu (vlevo) a~spodní stranu (vpravo). Tmavě jsou zvýrazněny pájecí plochy pro jednotlivé SMD komponenty a~trasy propojující tyto komponenty. Návrh desky byl proveden s~důrazem na minimalizaci rušení, což zahrnuje pečlivé trasování cest, implementaci výřezu pro anténu a~optimalizaci přenosových charakteristik. K zajištění stabilního napájení přispívá široká napájecí cesta a~\uv{prokovy} spojující vrchní a~spodní stranu desky, které pomáhají při distribuci napájení a~zemnění. Doplňující funkci v~eliminaci šumu plní také správně navržené filtry \parencite{sierra-decoupling-capacitor}. Tyto prvky společně přispívají k~dosažení spolehlivého a~stabilního provozu desky.

Deska postrádá jakékoli fyzické ovládací prvky, senzory či indikátory výstupů, jako například světelné diody, opomeneme-li však integrované senzory přímo v~ESP32, například senzor teploty, magnetismu, nebo kapacitní senzory \parencite{esp32-sensors}. Tato funkcionalita je výhradně implementována prostřednictvím modulů, které jsou připojeny k~základní desce pomocí postranních konektorů běžně známých pod názvem \uv{Pin Header}. 

Na každé straně je osazeno dvanáct konektorů v~jedné řadě s~roztečí \emph{2.54~mm}, což představuje standardní formát pro takovéto konektory, využívaný například v~platformě Arduino či jiných vývojových deskách s~platformou ESP32. Druhým a~zároveň posledním dostupným konektorem je USB-C, který slouží jak pro napájení desky a~modulů, tak i~pro programování ESP32. Rozměry samotné desky jsou velmi kompaktní, konkrétně \emph{34~mm} na šířku a~\emph{69~mm} na výšku.

\begin{figure}[h!]
    \vspace{20pt}
    \centering
    \includegraphics[width=0.6\textwidth]{obrazky/capyboard-3d.png}
    \caption{3D náhled prototypu vývojové desky}
    \label{fig:mainbaord-3d}
    \vspace{20pt}
\end{figure}

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í. Tento přístup byl inspirován právě zmíněnou stavebnicí Hardwario TOWER, viz sekce \ref{hardwario-tower}, která disponuje napájecím bateriovým modulem chytře připojitelným ze spodní strany vývojové desky.\footnote{V nové verzi vývojové desky jsou již tyto konektory ze spodní strany implementovány.} \label{sekce:implementace-baterie}

\newpage
\subsection{Světelný modul}

Tento modul poskytuje matici diod ve vzoru 8×8. Každá ze 64 světelných diod v~matici může být samostatně zapnuta nebo vypnuta, což umožňuje zobrazování různých vzorů, písmen nebo čísel. Inspirací pro tento modul byl známý vzdělávací mikroprocesorový systém BBC micro:bit, který také využívá matici LED pro zobrazování informací a~interaktivních vzorů. Stejně jako micro:bit, i~tento modul umožňuje uživatelům snadno programovat a~ovládat jednotlivé LED, což je ideální pro výuku programování. Tímto způsobem se modul stává vynikajícím nástrojem pro vzdělávací účely, experimentování a~vytváření různých projektů s~vizuální zpětnou vazbou.

\begin{figure}[h!]
    \vspace{20pt}
    \centering
    \includegraphics[width=0.6\textwidth]{obrazky/led-modul-3d.png}
    \caption{3D náhled světeleného modulu}
    \label{fig:led-modul-3d}
    \vspace{20pt}
\end{figure}

Funkcionalita tohoto modulu čerpá inspiraci z~dřívě zmíněného nástroje BBC micro:bit, viz kapitola \ref{kapitola:nastroje}. Jednou z~jeho předních a~široce využívaných funkcí je světelná matice diod, umožňující individuální adresování jednotlivých bodů. Díky tomu lze snadno vytvářet zajímavé tvary, vzory nebo animace. Na rozdíl od BBC micro:bit, který disponuje maticí o~velikosti 5×5 diod, je tento modul vybaven maticí 8×8 diod, což poskytuje širší možnosti pro tvorbu komplexnějších tvarů, vzorů a~animací.

Modul využívá čip MAX7221, který je specializován na adresování a~ovládání jednotlivých diod, čímž usnadňuje jejich řízení. Čip MAX7221 je přímo řízen základní deskou, což znamená, že procesor ESP32 poskytuje všechny potřebné signály a~napájení pro provoz modulu. Komunikace mezi hlavní deskou a~modulem probíhá prostřednictvím rozhraní SPI (Serial Peripheral Interface). Tento čip je zároveň podporován běžně dostupnými softwarovými knihovnami.

SPI je sériové komunikační rozhraní, které umožňuje rychlý a~efektivní přenos dat mezi hlavní deskou a~čipem MAX7221. Toto rozhraní využívá několik pinů pro přenos dat, hodinový signál a~další řídicí signály, což zajišťuje spolehlivou komunikaci a~ovládání diod v~matici. \parencite{adi-spi}


\newpage
\subsection{Klimatický modul}

Tento modul představuje komplexní sadu senzorů určených k~přesnému měření klimatických a~dalších environmentálních veličin. Díky této sadě lze snadno vytvořit jednoduchou, ale plně funkční meteostanici pro vnitřní použití, která poskytuje přesné údaje o~podmínkách v~místnosti či jiném uzavřeném prostoru. Kromě toho může modul sloužit také k~individuálnímu monitorování specifických parametrů okolního prostředí, což jej činí vhodným nástrojem pro řadu aplikací, od domácí automatizace až po monitorovací systémy v~laboratořích či průmyslu.

\begin{figure}[h!]
    \vspace{20pt}
    \centering
    \includegraphics[width=0.6\textwidth]{obrazky/klimaticky-modul-3d.png}
    \caption{3D náhled klimatického modulu}
    \label{fig:klimaticky-modul-3d}
    \vspace{20pt}
\end{figure}

Modul je navržen s~ohledem na maximální kompatibilitu a~využívá výhradně běžně dostupné senzory, které lze ovládat standardními softwarovými knihovnami. Toto řešení zajišťuje širokou přenositelnost výsledného kódu i~na jiné vývojové platformy, pokud jsou kompatibilní s~uvedenými knihovnami. Obsahuje čtyři základní senzory pro sběr okolních veličin:

\begin{itemize}
    \item \textbf{Senzor světla} -- Tento senzor umožňuje měření intenzity okolního osvětlení, což umožňuje monitorování světelných podmínek, například pro zajištění vhodného osvětlení rostlin nebo pracovních prostor.
    \item \textbf{Teplotní senzor} -- Senzor teploty umožňuje přesné sledování okolní teploty, což je užitečné pro různé aplikace, od základního monitorování teploty v~místnosti až po detekci teplotních změn v~reálném čase, například pro optimalizaci topných nebo klimatizačních systémů.
    \item \textbf{Senzor tlaku a~vlhkosti} -- Tento kombinovaný senzor měří atmosférický tlak a~relativní vlhkost vzduchu, čímž poskytuje užitečné údaje pro předpovědi a~analýzu prostředí.
    \item \textbf{Senzor CO\textsubscript{2}} -- Tento senzor měří koncentraci oxidu uhličitého v~okolním prostředí, což umožňuje sledování kvality vzduchu v~uzavřených prostorách. Tato data mohou být využita k~optimalizaci systémů větrání a~k~zajištění zdravějšího a~produktivnějšího prostředí.
\end{itemize}

Je však nutné zdůraznit, že tento modul nebyl pro testování v~praxi vyroben, a~to z~důvodu nedostatku finančních prostředků. Projekt zůstal ve fázi návrhu a~nebyl realizován do fyzické podoby, což znamená, že nebylo možné provést testování ani validaci funkcí na reálném zařízení. Tento stav omezuje možnosti praktického použití návrhu, ale poskytuje základ pro případnou budoucí výrobu a~testování, pokud budou k~dispozici potřebné finanční zdroje.


\section{Pořizovací cena} \label{sekce:implementace-cena}

V~rámci práce bylo vyrobeno pět prototypů vývojové desky a~pět světelných modulů. Výsledné ceny byly přepočítány z~amerických dolarů podle aktuálního kurzu k~listopadu 2024, který činí 23,96 českých korun za 1 americký dolar. Ceny jsou tedy následující:

\begin{table}[h!]
\vspace{10pt}
\centering
\begin{tabular}{lll}
\textbf{Modul}          & Vývojová deska         & Světelný modul \\
\textbf{Výroba}         & 96 Kč                  & 96 Kč          \\
\textbf{Osazení}        & 2295 Kč                & 443 Kč         \\
\textbf{Cena za kus}    & 478 Kč                 & 108 Kč
\end{tabular}
\end{table}

K~výsledné pořizovací ceně je nutné připočítat také dovozní daň ve výši 815 Kč a~náklady na dopravu, které v~tomto případě činily 765 Kč. Celková pořizovací cena tak dosáhla přibližně 4318 Kč za pět kusů, což odpovídá 903 Kč za jeden kus prototypu, zahrnujícího základní desku a~světelný modul.

Je však důležité mít na paměti, že ceny prototypů bývají obvykle vyšší. Při výrobě ve větším objemu dochází k~výraznému snížení nákladů na jednotlivé kusy. Cena jednotlivých součástek se navíc může lišit v~závislosti na jejich aktuální dostupnosti.


\section{Software}

Tato sekce se věnuje softwarovým aspektům práce s~vývojovou deskou. Zabývá se výběrem vhodné platformy pro vývoj a~konfigurací potřebných nástrojů. Důraz je kladen na přípravu projektu, nastavení základních parametrů a~usnadnění práce uživatelům prostřednictvím optimalizovaných konfiguračních souborů. Sekce se rovněž zabývá správou softwarového prostředí a~zdrojového kódu, které zajišťují snadné využití vývojové desky v~praxi.

Veškerá zde zmíněná a~zároveň průběžně aktualizovaná konfigurace je dostupná ve veřejném Git repozitáři na adrese \url{https://github.com/realcharmer/capyboard-starter}.


\subsection{Výběr softwarové platformy} \label{sekce:platforma}

Vzhledem k~tomu, že vývojová deska využívá implementaci ESP32, podporuje různé platformy. V~současné době jsou hlavními platformami \emph{Arduino} (Nese stejný název jako zařízení Arduino) a~\uv{ESP-IDF} (Espressif IoT Development Framework). Volba mezi těmito platformami závisí na požadavcích projektu, osobních preferencích a~úrovni kontroly, kterou chce uživatel nad hardwarem udržovat.

Pro demonstraci lze použít jednoduchý program pro rozblikání jedné diody, také známý pod názvem \emph{blink}, který je často implementován jako ukázkový program v~řadě učebnic, například ve zmíněném \emph{Arduino Projects Book} \parencite{arduino-projects-book}, či v~učebnici \emph{Robotika pro střední školy: programujeme Arduino} \parencite{imysleni-arduino} z~portálu \emph{Informatické myšlení}.

\vspace{10pt}
\begin{listing}[!ht]
\caption{Příklad implementace programu Blink pro platformu Arduino}
\label{src:platforma-arduino}
\begin{minted}[linenos]{c}
void setup() {
    pinMode(2, OUTPUT);
}

void loop() {
    digitalWrite(LED_BUILTIN, HIGH);
    delay(1000);
    digitalWrite(LED_BUILTIN, LOW);
    delay(1000);
}
\end{minted}
\end{listing}

\begin{listing}[!ht]
\caption{Příklad implementace programu Blink pro platformu ESP-IDF}
\label{src:platforma-esp-idf}
\begin{minted}[linenos]{c}
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>

extern "C" void app_main() {
    gpio_pad_select_gpio(GPIO_NUM_2);
    gpio_set_direction(GPIO_NUM_2, GPIO_MODE_OUTPUT);

    while (1) {
        gpio_set_level(GPIO_NUM_2, 1);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        gpio_set_level(GPIO_NUM_2, 0);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}
\end{minted}
\end{listing}
\vspace{10pt}

Při vývoji na platformě Arduino může být dosaženo jednodušší abstrakce, což je vhodné pro za\-čá\-teč\-ní\-ky. Arduino poskytuje vysokoúrovňové funkce a~knihovny, což zjednodušuje celý proces vývoje programu. Pro tuto platformu je také dostupná rozsáhlá škála knihoven a~dokumentace. Lze dokonce využít dokumentaci existujících projektů pro zařízení postavená na čipech z~rodiny ATMEL (Arduino) a~libovolné další projekty pro ESP. Naopak vývoj s~platformou ESP-IDF nabízí nižší úroveň abstrakce s~přímou kontrolu hardwaru.

Čtenáři, který má zkušenosti s~programováním podobných zařízení, je ukázka \ref{src:platforma-arduino} pravděpodobně známější, než příklad \ref{src:platforma-esp-idf}, který využívá ESP-IDF. Pro účely referenční implementace byla proto zvolena platforma Arduino, jelikož pro ni existuje mnoho dostupných projektů, knihoven a~učebnic. Navíc jsou učitelé pravděpodobněji obeznámeni s~touto platformou spíše než s~ESP-IDF. Nic však nebrání učiteli kurzu zakomponovat ESP-IDF do výuky v~případě, že se chce této oblasti věnovat.

\subsection{Konfigurace projektu} \label{sekce:konfigurace}

Pro efektivní využití vývojové desky je nutné připravit základní konfiguraci projektu pro PlatformIO. Je nutné podotknout, že tyto konfigurační soubory se mohou s~dalšími verzemi vývojové desky měnit. Nejnovější verze konfiguračních souborů jsou vždy dostupné ve zmíněném Git repozitáři. Tato konfigurace se skládá z~několika částí:

\begin{itemize}
    \item Soubor \emph{platformio.ini}: Tento soubor obsahuje základní konfiguraci desky, včetně specifikace čipu a~dalších nezbytných parametrů pro kompilaci a~nahrávání firmwaru.
    \item Složka \emph{src}: Tato složka obsahuje samotný zdrojový kód projektu.
    \item Soubor \emph{makefile}: Tento soubor slouží pro jednoduché ovládání projektu, umožňuje automatizovat běžné úkoly, jako je kompilace, nahrávání firmwaru na desku nebo spuštění sériového monitoru bez nutnosti znát příkazy pro PlatformIO.
\end{itemize}

Protože prototyp vývojové desky byl vyroben s~využitím ESP32-S3-WROOM-1 s~pamětí o~velikosti pouze 4~MB, na rozdíl od běžných verzí s~8~MB, je nutné vytvořit vlastní paměťovou strukturu, bez které nelze výsledný firmware spouštět. Tato paměťová struktura je definována ve formátu hodnot oddělených čárkami (CSV, Comma-Separated Values) v~souboru \emph{partitions.csv} umístěném v~kořenové složce projektu. Tento přístup umožňuje přesnou specifikaci a~správu paměťových oblastí, což je nutné pro správné fungování firmwaru na prototypu s~omezenou pamětí. O~tomto omezení se blíže pojednává v~kapitole \ref{kapitola:reflexe}.

\begin{listing}[!ht]
\caption{Soubor partitions.csv s~definicí paměťové struktury}
\label{src:partitions}
\begin{minted}[linenos]{ini}
# Name,   Type, SubType, Offset,   Size, Flags
nvs,      data, nvs,     0x9000,   0x5000,
otadata,  data, ota,     0xe000,   0x2000,
app0,     app,  ota_0,   0x10000,  0x1E0000,
app1,     app,  ota_1,   0x1F0000, 0x1E0000,
spiffs,   data, spiffs,  0x3D0000, 0x30000,
\end{minted}
\end{listing}

Jak bylo zjištěno při testování vývojové desky v~praxi, viz kapitola \ref{kapitola:overeni-v-praxi}, při vyšší paměťové náročnosti výsledného firmware dochází k~chybě během jeho spouštění. To je způsobeno nedostatečně velkou pamětí pro firmware a~bylo tedy nutné vytvořit novou paměťovou strukturu. Tato změna spočívá v~odstranění oddílů pro funkci OTA (Over-the-air update), která umožňuje nahrávání nové verze firmwaru bezdrátově. Jelikož tato funkcionalita není součástí didaktických materiálů, je možné ji odstranit. Pokročilý uživatel je však schopen tuto funkcionalitu obnovit v~případě potřeby. \label{sekce:konfigurace-ota}

\begin{listing}[!ht]
\caption{Definice paměťové struktury po odstranění funkce OTA a~navýšení paměti pro firmware}
\label{src:partitions-ota}
\begin{minted}[linenos]{ini}
# Name,   Type, SubType, Offset,   Size, Flags
nvs,      data, nvs,     0x9000,   0x5000,
app,      app,  factory, 0x10000,  0x3C0000,
spiffs,   data, spiffs,  0x3D0000, 0x30000,
\end{minted}
\end{listing}

Druhá verze prototypu, v~reakci na uvedený problém, byla osazena čipem \emph{ESP32-S3-WROOM-1-N8}, který disponuje 8 MB paměti Flash. Toto rozšíření paměti řeší nedostatek paměťových zdrojů, který vzniká při použití programu s~velkým počtem knihoven a~tím pádem i~výrazným paměťovým zatížením.

Další důležitou součástí konfigurace je soubor \emph{platformio.ini}, který zajišťuje správné nastavení projektu pro konkrétní vývojovou desku. Tento soubor obsahuje základní nastavení prostředí, definuje použitou platformu (viz sekce \ref{sekce:platforma}) a~importuje také zmíněnou konfiguraci paměti. V~tomto souboru se rovněž nastavuje rychlost sériové komunikace, tzv. \emph{baud rate}.

\begin{listing}[!ht]
\caption{Základní konfigurace PlatformIO pro vývojovou desku}
\label{src:platformio}
\begin{minted}[linenos]{ini}
[env:esp32-s3-devkitc-1]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
board_build.partitions = partitions.csv
board_upload.flash_size = 4MB
monitor_speed = 115200
\end{minted}
\end{listing}

Poslední důležitou částí je \emph{Makefile}, tedy konfigurační soubor pro systém GNU Make, který výrazně usnadňuje práci s~příkazy. Uživatel nemusí ručně vypisovat jednotlivé příkazy pro PlatformIO; místo toho stačí použít příkaz \texttt{make} spolu s~jednou z~dostupných akcí. Níže je uvedena ukázka aktuální podoby souboru \emph{Makefile}, viz ukázka kódu \ref{src:makefile}.

\begin{listing}[!ht]
\caption{Makefile pro práci s~projektem}
\label{src:makefile}
% Makefile highlighting draws red boxes
\usemintedstyle{xcode}
\begin{minted}[linenos]{makefile}
PROJECT_DIR = $(CURDIR)
PLATFORMIO_BIN = /bin/pio

all: build upload

build:
    $(PLATFORMIO_BIN) run -d $(PROJECT_DIR)

upload:
    $(PLATFORMIO_BIN) run -d $(PROJECT_DIR) -t upload

clean:
    $(PLATFORMIO_BIN) run -d $(PROJECT_DIR) -t clean

monitor:
    $(PLATFORMIO_BIN) device monitor

.PHONY: all build upload clean monitor
\end{minted}
\end{listing}

Makefile poskytuje uživateli několik výchozích funkcionalit, včetně \emph{build} pro kompilaci zdrojového kódu, \emph{upload} pro nahrání programu do paměti vývojové desky a~\emph{clean} pro odstranění dočasných souborů vytvořených během kompilace. Dále obsahuje funkci \emph{monitor}, která umožňuje uživateli otevřít sériovou linku přímo k~zařízení za účelem sledování živého výstupu nebo ovládání zařízení pomocí příkazů. Po spuštění programu \emph{make} jsou výchozím nastavením automaticky vyvolány funkce \emph{build} a~\emph{upload}. Po úspěšném nahrání firmwaru do paměti je program na vývojové desce automaticky spuštěn.

\subsection{Práce s~Git repozitářem}

Konfigurační kroky není nutné provádět ručně; stačí naklonovat připravený Git repozitář ze zmíněného repozitáře na adrese \url{https://github.com/realcharmer/capyboard-starter}. Tento postup lze provést následujícím příkazem:

\begin{minted}{sh}
git clone https://github.com/realcharmer/capyboard-starter
\end{minted}

Repozitář obsahuje popsané konfigurační soubory \emph{platformio.ini}, \emph{makefile} pro jednoduché ovládání, \emph{partitions.csv} pro nastavení paměti \footnotemark{} a~složku \emph{src} se zdrojovým kódem, což usnadňuje zahájení práce na projektu.

\footnotetext{Soubor \emph{parititons.csv} není pro druhou iteraci vývojové desky nutný a~není tedy obsažen v~novějších verzích repozitáře.}

Je důležité mít na paměti, že soubory referenční konfigurace z~příkladů \ref{src:partitions}, \ref{src:platformio} a~\ref{src:makefile} se mohou v~budoucnu lišit od poslední revize v~Git repozitáři, a~proto je doporučeno pravidelně kontrolovat jejich potenciální aktualizace a~úpravy. Informace o~práci se zařízením jsou vždy aktualizované v~dokumentaci, o~které se píše v~kapitole \ref{kapitola:didakticke-materialy}.

Jedna z~takových změn je použití čipu ESP32-S3-WROOM-1 s~větší pamětí při implementaci nové verze prototypu, jak bylo rozebráno v~předchozí sekci a~v~kapitole \ref{kapitola:reflexe}, která eliminuje potřebu redefinice paměťové struktury v~souboru \emph{partitions.csv}.

\subsection{PlatformIO IDE} \label{sekce:platformio-ide}

PlatformIO IDE je moderní integrované vývojové prostředí, které rozšiřuje možnosti samotného sys\-té\-mu PlatformIO, popsaného v~kapitole \ref{kapitola:kriteria}. Primárně je určeno pro vývoj embedded systémů a~zaměřuje se na odstranění problémů způsobených fragmentací nástrojů mezi různými platformami. Je postaveno na populárním editoru Visual Studio Code, což mu zajišťuje pokročilé funkce, jako je našeptávání, automatická detekce a~oprava chyb v~kódu či podpora rozšíření. Díky své otevřené povaze a~nulovým nákladům na licencování poskytuje vývojářům plnou kontrolu nad prostředím. \parencite{platformio-ide}

PlatformIO IDE je zároveň výbornou volbou pro vzdělávání, neboť nabízí jednotné prostředí přístupné na všech běžných operačních systémech, což umožňuje snadnou integraci do výuky bez ohledu na používaná zařízení studentů. Integrované funkce, jako je správa knihoven nebo verzovací systém Git, přispívají k~efektivnímu učení a~moderním přístupům k~výuce programování. Minimalizací času potřebného na nastavení a~konfiguraci nástrojů umožňuje PlatformIO IDE zaměřit se přímo na samotné programování, což jej činí ideální volbou pro školy a~další vzdělávací instituce.

Vývojová deska Capyboard je plně kompatibilní s~PlatformIO IDE, což umožňuje snadnou integraci do moderního vývojového prostředí. Zároveň je podporována i~skrze zmíněné konfigurační soubory. Uživatel si tedy může zvolit svůj preferovaný způsob práce se vývojovou deskou.

\begin{figure}[h]
    \vspace{20pt}
    \centering
    \includegraphics[width=\textwidth]{obrazky/platformio-ide.png}
    \caption{Vývojové prostředí PlatformIO IDE}
    \label{fig:platformio-ide}
    \vspace{20pt}
\end{figure}
