Seznamujeme se s CyberPi

CyberPi je novinka od společnosti Makeblock. Základ je tvořen malým mikropočítačem, který spolu s barevným displejem, řadou LED diod, joystickem, dvěma tlačítky a periferiemi pro připojení dalších rozšíření, vytváří skvělé prostředí, ve kterém si můžeme užít spoustu zábavy.

Na CyberPi mě na první pohled zaujala možnost programovat v Pythonu. Od Makeblocku už mám předchozí zkušenost s robotem mBot, který lze programovat prostřednictvím Arduino IDE, nicméně hlavní důraz je kladen na programování v prostředí Makeblock pomocí jazyku Scratch a to nemusí vyhovovat každému. CyberPi lze programovat kromě Scratche také v Pythonu a MicroPythonu, což z něj dělá solidního favorita na výuku těchto jazyků v kombinaci s poznáváním hardwaru.

Více informací a projekty naleznete zde:

Rozbalujeme

CyberPi dorazil v úhledné krabičce, ve které je kromě samotného mikropočítače také Pocket Shield, což je vlastně battery pack s rozhraním pro DC motory, serva a senzory. Součástí balení je také USB-C kabel, takže není třeba prohledávat šuplík.

Mikropočítač využívá operační systém CyberOS. Po prvním zapnutí je uživatel vyzván k volbě jazyka – čeština mezi nabízenými bohužel není, volba tedy pravděpodobně padne na angličtinu. Po následném restartu se spustí program, který je možné vybrat ve volbě „Switch program“. Bohužel, programy nejsou pojmenovány podle toho, co dělají, ale Program1 (zvukový záznamník), Program2 (pětipásmový indikátor vybuzení), atd. Celkem osm ukázkových programů, které demonstrují široké možnosti CyberPi.

Technická specifikace

Srdcem CyberPi je modul ESP32-WROVER-B, který mikropočítači poskytuje bezdrátovou konektivitu Wi-Fi/BT BLE. Hlavními periferiemi pro interakci s uživatelem jsou 1.44″ IPS displej s rozlišením 128×128 bodů, pět RGB LED, pětisměrný joystick, celkem tři tlačítka a mikrofon. Určitě potěší i přítomnost akcelerometru a gyroskopu, které lze využít např. v aplikacích rozpoznávání gest rukou. Pocket Shield obsahuje 800mA Li-ion baterii. Pocket shield má na sobě vypínač – pokud je CyberPi připojen pomocí USB k počítači, při vypnutém vypínači se nabíjí baterie.

Kromě USB-C by mělo být možné připojit CyberPi k PC i pomocí technologie Bluetooth. To se mi bohužel nepodařilo: v operačním systému (Windows 10) byl CyberPi nalezen, spárován a dokonce se objevila i malá ikonka na displeji. Ta ovšem po chvíli zmizela a spojení z IDE nebylo možné navázat.

Programujeme v Pythonu

Připravené programy pochopitelně nechceme využívat, chceme programovat! Chtěl jsem využít toho, že na aktuálním počítači nemám nainstalováno nic, co by mělo nějakou souvislost s produkty Makeblock a budu se tedy řídit pouze uživatelským manuálem. Webová adresa manuálu je zakódována do QR kódu, přiloženého v krabičce. Z manuálu lze nabýt dojmu, že cesta k programování CyberPi v Pythonu vede přes utilitu mLink2 a online editor. Chyba lávky: editor je kompletně v čínštině. Manuál doporučuje provozovat online editor v Google Chrome, ale pravděpodobně jen proto, že tam je k dispozici možnost překladu, editor je stejně nepoužitelný (pokud tedy netrpíte značnou dávkou odhodlání). Neplatný pokus č.1 – co teď?

mBlock – senznam připojených zařízení a přepínač režimu

Po chvilce googlení jsem našel mBlock PC version (245MB), offline prostředí, ve kterém by mělo jít všechno jako na drátkách. Po instalaci se nabídne Scratch, ten přeskakuji a vrhám se do editoru Pythonu. Otevírá se ukázkový projekt, který využívá knihovnu pygame. Paráda, tu znám, těším se. Zkouším pustit program pomocí Run, pygame není nainstalovaná, instalujeme. Znova Run a objeví se simulační okénko, ve kterém běží krásná Matrix animace. Cože, tohle poběží na tom malém displeji? Těším se ještě víc! Přepínám z režim z Živě na Upload, nahrávám program… a nic. V CyberPi chybí pygame, neplatný pokus č.2.

Python na CyberPi? Jak se to vezme. Kdybych se řídil jen odkazovaným manuálem a neměl žádné tušení o tom, jak podobné hračky fungují, mohl bych snadno získat pocit, že napíšu program v Pythonu a ten pak prostě pustím na Cyber Pi. Chyba lávky – programy v Pythonu 3.x běží v Live módu, který ale v tomto případě nijak nevyužívá prostředky CyberPi, ale je spouštěn jako emulace v rámci editoru. Ke skutečnému programování je třeba použít knihovnu cyberpi, což se ale četbou manuálu nelze dovědět – dokumentace aplikačního rozhraní je totiž součástí dokumentace mBlock Python editoru.

Úkrok stranou – nezkusíme přece jen ten Scratch?

Blokové programování ve Scratchi je léty prověřenou metodou, jak přiblížit programování začátečníkům, včetně těch nejmenších zájemcům o programování. Makeblock používá rozhraní, původně vyvinuté na MIT, u většiny svých produktů, je tedy celkem přirozené, že je výchozím programovacím nástrojem i u CyberPi. V následujícím textu budu používat již stažené offline prostředí mBlock v5.3.0.

Bloky, které má programátor k dispozici, jsou rozděleny do několika skupin:

  • Zvuk – přehrávání zvukových vzorků z paměti, záznam a reprodukce zvuku, přehrávání not a generování tónů o specifickém kmitočtu
  • LED – ovládání pětice RGB diod
  • Displej – funkce pro tisk a formátování textu na displej, tabulky, řádkového a sloupcového grafu
  • Pohybový senzor – čtení hodnot z akcelerometru a gyra, je možné ovládat pandu v editoru
  • Vnímání – čtení polohy joysticku, hodnot tlačítek, úrovně hlasitosti, okolního světla, časovače a úrovně baterie
  • LAN – posílání zpráv v síti a spouštěč řízený specifickou zprávou
  • AI – rozpoznávání a syntéza řeči, vyžaduje připojení k wi-fi
  • IoT – komunikace s cloudem, vyžaduje připojení k wi-fi
  • Události – spouštěče akcí, které reagují na zapnutí CyberPi, stisky tlačítek a pohyby joystickem, náklony a specifické pohyby, úroveň světla a přijaté zprávy
  • Ovládání, operátory a proměnné – standardní Scratch bloky

Pro první pokusy můžeme buď využít dostupné příklady, nebo se rovnou vrhnout na vlastní tvorbu.

Program 1: Světelný had ovládaný náklonem

Jako první program jsem se pokusil naprogramovat jednoduchého světelného hada, jehož rychlost se bude ovládat pomocí náklonu CyberPi. Program tedy čte úhel naklonění ve stupních, z něj vypočítané číslo se použije jako doba, po kterou svítí jedna z pěti LED diod. Hodnotu náklonu můžeme kontrolovat zápisem čísla na střed displeje. Úhel natočení je v rozsahu 0 až 90 stupňů, je tedy třeba nalézt funkci, která rozsah vhodně změní. Takovou funkcí je třeba logaritmus, u kterého je ovšem třeba zajistit, aby logaritmovaná hodnota nebyla rovna nule. Příklad tak může demonstrovat hned několik důležitých programátorských konstrukcí.

Příjemnou vlastností editoru je možnost testovat programy nebo jednotlivé bloky v režimu Živě, ovšem je třeba počítat s celkem vysokou latencí, způsobenou velkým objemem dat, který se přenáší po USB rozhraní.

Program 2: Ovládání pohybu znaku joystickem

Na druhém programu si můžeme ukázat i jednoduchou optimalizaci programu. Dejme tomu, že náš program by měl pohybovat znakem po displeji podle toho, jak uživatel hýbe joystickem. První verze programu by mohla vypadat asi takto, pro zjednodušení jde o pohyb pouze v jednom směru.

Princip programu je zřejmý: vytvoříme celočíselnou proměnnou x a její hodnotu měníme (přičteme nebo odečteme číslo 2) při pohybu joystickem. Pozice joysticku je kontrolována v nekonečném cyklu, v každé iteraci cyklu pak program smaže displej a vykreslí znova znak.

V druhé verzi programu využijeme schopnost Scratche vyhodnocovat události generované periferiemi a řeší dva problémy:

  • blikání, způsobené zbytečným mazáním displeje v každé iteraci cyklu: Lze řešit rozdělením programu a vytvoření vlastního bloku, který nazveme překresli. Tento blok vykreslí bod pouze v případě, že došlo k pohybu joystickem
  • vyjíždění znaku mimo displej: Tady můžeme použít jednoduchý programátorský trik: místo hodnoty x použijeme výsledek celočíselného dělení šířkou displeje – tato operace zaručí, že vykreslovaný znak bude vždy na displeji (protože výsledkem dělení je hodnota v rozmezí 0 až 127), při „vyjetí“ doprava se objeví vlevo a obráceně. Zároveň v poslední verzi programu nastavíme pozici znaku při startu na přibližný střed displeje.

Na rozdíl od první verze programu, která v nekonečném cyklu kontroluje stav joysticku, takže je možné udělat na displeji plynulý pohyb pouhým držením joysticku ve správném směru, v této verzi programu je potřeba k pohybu bodu vyvolat v programu událost, tj. joystick pustit a znova pohnout v požadovaném směru.

Program 3: Kreslení grafiky

Vrtalo mi hlavou, jak je udělaný jeden z vestavěných programů, nazvaný Kaleidoscopes. V desktopové aplikaci totiž nejsou žádné bloky, pomocí kterých by šlo kreslit a to ani v nabízených rozšířeních. Program Kaleidoscopes je přitom nabízen v příkladech, ovšem nefunguje. (Jak se ukáže v dalším odstavci, desktopová aplikace je trochu pozadu za webovou aplikací.)

Program 4: Připojení k wi-fi a cloudové služby

Na závěr prvního dílu jsem chtěl vyzkoušet připojení CyberPi k síti a komunikaci s cloudem. Ve skupině IoT bloků jsou potřebné bloky, které nelze použít v režimu Živě, tak pozor na to.

Bloky pro IoT jsou v programu využity ke zjištění aktuálního počasí ve zvolené lokalitě. Kromě teploty a vlhkosti je možné získat i textovou informaci o počasí, pochopitelně v angličtině. V nabídce je i blok pro získání informací o kvalitě vzduchu a čase východu a západu Slunce.

Během práce na programu s IoT bloky mě napadlo, jestli není náhodou pro využití IoT funkcionality třeba mít účet na webu Makeblock. Vytvořit účet bylo dílem okamžiku, ale ukázalo se, že není úplně potřeba. Měl jsem ale možnost se opět podívat do online prostředí, tentokrát o několik hodin chytřejší. Na rozdíl od desktopové verze lze v online editoru pracovat se všemi příklady, např. při otevření zmiňovaného příkladu Kaleidoscopes se mezi bloky automaticky objeví dvě nové skupiny: Sprites a Doodle. Nevýhodou webového IDE je ovšem absence lokalizace do češtiny.

Závěr

Cílem prvního dílu bylo seznámit čtenáře s mikropočítačem CyberPi a jeho možnostmi pomocí programů v jazyce Scratch. V následujících dílech si vyzkoušíme programování v Pythonu a podíváme se také na externí periferie.

Eshop

Makeblock CyberPi Go Kit

Programovatelný mikropočítač, který je určen pro výuku IoT a Pythonu.


Leave a Reply