Fyzikální kabinet FyzKAB

Tvorba vlastního rozšíření v Extension Builder pro mBlock (verze 5)

Prostředí mBlock je blokový programovací nástroj postavený na prostředí Scratch. Původním posláním prostředí mBlock byla tvorba kódů pro roboty mBot, ale dnes se použití rozšířilo i na programování kreslených postaviček (Sprites) a různých programovatelných modulů (Arduino, Micro:bit…). I když je asi primární zaměření spíše na děti, lze toto prostředí použít pro výuku obecné algoritmizace. Zajímavé je jistě i využití mBlock jako nástroje pro programování „robotických“ modulů. Může tak docela pěkně vyplnit mezeru mezi chutí něco řídit programovatelným modulem a profesionální realizací daného projektu plnohodnotným programovacím jazykem. Konec konců, jak jsem se snažil ukázat ve článcích Prostředí mBlock & Arduino, mBlock není žádné „ořezávátko“!

Rozšíření prostředí mBlock

Nespornou výhodou prostředí mBlock je jeho určitá otevřenost. Díky tomu mohou různými vývojáři do prostředí mBlock přidávat další rozšíření, například jako různé funkční knihovny do programovacích jazyků. To má tu výhodu, že řada problémů a ovládání některých periférií modulu Arduino (servo, krokový motor, teploměr, tlakové čidlo…) je již vyřešena a jinak složité ovládání je záležitostí vložení několika bloků vznikajícího kódu.

V tomto článku si na konkrétním příkladu ukážeme, jak takové rozšíření můžeme vytvořit. Hotové rozšíření lze dokonce odeslat ke schválení, aby se stalo součástí celosvětové databáze a mohlo sloužit i ostatním globálním uživatelům.

Tvorba vlastního rozšíření – krok za krokem

mBlock 5 Extension Builder

Nové rozšíření prostředí mBlock se vytváří pomocí on-line nástroje mBlock 5 Extension Builder, dostupného na adrese: https://ext.mblock.cc/. Ale nelekněte, stránky se nejdříve otevřou v čínštině! Do angličtiny je nastavíte pomocí volby v pravém horním rohu – viz volba (1) v obrázku 1.

Přihlášení do Extension Builder
Obrázek 1 – přihlášení do Extension Builder

Pro tvorbu svého vlastního rozšíření je třeba mít založený mBlock účet. Je to zdarma a postačí jen email a heslo. Pokud využíváte prostředí mBlock trochu více a využíváte i možnost ukládání svých projektů do cloudu, jistě již tento účet máte. Na vstupní stránce zadáte tyto údaje do polí (2) a potvrdíte volbou Sign in (3).

Tvorba rozšíření

Otevře se Vám hlavní stránka Extension Builderu – viz obrázek 2. Na levé straně (v tmavém pruhu) je rozbalovací menu, kde nás postupně budou zajímat volby My Plugin a na závěr Publish Service. Při tvorbě svého vlastního rozšíření zvolíme volbu My Extension (1), kde se postupně vytváří seznam našich vlastních rozšíření. Nové rozšíření vytvoříme tlačítkem Add extension (2). Je možné i načíst kód již hotového rozšíření jiného autora pomocí Import data.

Hlavní stránka Extension Builder
Obrázek 2 – hlavní stránka Extension Builder

Po kliknutí na tlačítko Add Extension musíme zvolit, zda nové rozšíření bude sloužit pro tvorbu rozšíření pro modul Arduino, či zda zvolíme univerzální tvar rozšíření. My chceme používat prostředí mBlock pro programování modulu Arduino, tak je jasné, že zvolíme vytvoření rozšíření pro modul Arduino – viz obr. 3

Nastavení šablony rozšíření
Obrázek 3 – nastavení šablony rozšíření

Po nastavení šablony pro tvorbu rozšíření jsme vyzváni k zadání jména vznikajícího rozšíření. Na následujícím obrázku č. 4 vidíme, že jsem si zvolil název Testovací rozšíření. Zároveň vidíme, že maximální počet znaků pro název rozšíření je stanoven na 20. Doporučuji použít tento název spíše anglicky a tak, aby jednoznačně určoval, jaké je určení tohoto rozšíření.

Zadání názvu rozšíření
Obrázek 4 – zadání názvu rozšíření

Karta Basic configuration

Po zvolení a potvrzení názvu se dostáváme do prostředí pro tvorbu bloků příkazů. To vidíme na obrázku 5, který ukazuje základní nastavení rozšíření (1). První sloupec (2) udává tzv. kategorii bloků. Naše rozšíření může obsahovat několik kategorií. Každá kategorie jasně udává množinu daných příkazů. Na liště příkazů v prostředí mBlock je jedna tato kategorie dána jednou odrážkou. Například v základní sestavě prostředí mBlock je jedna kategorie nazvaná Pin, další Sériový port, další Data a tak dál. My bychom tak mohli jedním rozšířením přidat hned několik takových kategorií. Například má-li rozšíření ovládat dva různé typy krokových motorů, tak každý typ bude mít svou vlastní kategorii, aby se nám řídicí příkazy vzájemně nepletly.

Vytvoření bloku příkazu
Obrázek 5 – vytvoření bloku příkazu

My si budeme ukazovat přidání jen jediného příkazu, takže zůstaneme u jediné kategorie, stejně tak u jediného příkazu v dané kategorii. První příkaz je v dané kategorii se automaticky vytvořil ve druhém sloupci (3) a jeho parametry budeme postupně vytvářet a nastavovat v pravém sloupci (4). Jen připomínám důležitou věc: Všechny provedené změny a nastavení v tomto sloupci je třeba potvrdit volbou Save (5). Jakmile na to zapomenete, je veškerá vaše snaha nenávratně ztracena.

Karta Advanced configuration

Ještě než se pustíme do tvorby konkrétního příkazu rozšíření, podíváme se na záložku rozšířeného nastavení – Advanced configuration – viz obrázek 6. Zde nás především bude zajímat verze daného rozšíření (1), kterou budeme měnit, pokud provedeme nějakou změnu kódu oproti předešlé verzi. A pole Description (2), kde bychom měli (anglicky) stručně popsat, co má dané rozšíření dělat. Tato informace je důležitá pro závěrečnou publikaci, protože se pak zobrazuje ostatním uživatelům v průvodci rozšířeními. Stejně tak můžeme nahrát obrázek (3), který se u našeho rozšíření bude v tomto průvodci ostatním uživatelům zobrazovat. Nahrajeme například následující obrázek:

obrázek pro zobrazení v průvodci rozšíření

Dalším nastavením je volba (4), která udává, zda bude toto rozšíření dostupné pro offline aplikaci mBlock nebo jen v online tvůrci kódu. Asi necháme zaškrtnuté obě volby. Důležitým nastavením je volba (5), která určuje pro které moduly Arduino, má být naše rozšíření určené. Zde doporučuji opravdu zvolit jen moduly, pro které je zaručena 100% kompatibilita. Tedy pokud chceme nyní vytvořit rozšíření jen pro modul Arduino UNO, zbylé moduly prostě „vykřížkujeme“.

Nastavení Advanced configuration
Obrázek 6 – nastavení Advanced configuration

Po nahrátí obrázku do volby (3) a zvolení cílových modulů Arduino (5) vše potvrdíme tlačítkem Save (6).

Tvorba příkazového bloku

Na obrázku 7 vidíme, že jsme se vrátili na záložku základního nastavení (Basic Configuration). Ještě než se pustíme do vytvoření nového rozšiřujícího příkazu, všimněte si, jak se oproti minulému obrázku změnila horní řádka. Vedle názvu Testovací rozšíření se vlevo objevila ikona nahraného našeho obrázku, vpravo se zase objevilo změněné číslo verze. Je zde též uvedeno jen Arduino UNO, což říká, pro jaký modul bude toto rozšíření platné.

Volba typu bloku
Obrázek 7 – volba typu bloku

Teď se však již zaměříme na pravý sloupec, kde budeme postupně vytvářet nový blok našeho příkazu. Pro naši ukázku budeme chtít vytvořit blok, který bude na zvoleném digitálním pinu nastavovat vybranou hodnotu LOW (odpovídá logické 0) a HIGH (logická 1). Tento příkaz je již v základní výbavě prostředí mBlock, ale my si na něm zde ukážeme, jak při tvorbě takového „svého“ bloku postupovat.

Nejdříve si zvolíme typ bloku. Na obrázku č 7 (výše) vidíme, že máme v rozbalovací nabídce možnosti: Commad (klasický příkaz), String, Number, Boolean (bloky jejichž návratová hodnota je řetězec, číslo a logická hodnota), Events (vyhodnocení události a spuštění dalšího asynchronního kódu), Conditional (struktura podmínky), Button (tlačítko). My chceme klasický příkaz, který nastaví stanovený pin, tedy zvolíme volbu Command.

Podle zvoleného typu (kategorie) příkazu se změní tvar v náhledu nového bloku. Do položky Content (viz obrázek 8) začneme vpisovat to, co se bude zobrazovat na bloku příkazu. Zde bych se opět přimlouval za angličtinu. Český překlad tohoto textu si pak nastavíme jinde. Správně by zde měla být čínština, angličtina se též pak nastavuje v překladu (stejně jako ta čeština). Ale ruku na srdce, kdo z nás bude schopen příkaz zapsat čínsky? Vsaďme tedy aspoň na „mezinárodní“ angličtinu. Na obrázku je jako odstrašující případ použit nic neříkající text „Nějaký příkaz“. Všimněte si, že se tento text hned prokopírovává do náhledu bloku.

Chceme-li do příkazu zadat nějaké vstupní pole, zde například budeme chtít číslo piny a pak volbu jeho stavu (HIGH/LOW), zadáme tento vstup do textu Content pomocí znaku zavináče. Jakmile napíšete tento znak, otevře se vám nabídka formátu vstupního pole – viz obrázek 8. Tato nabídka je skutečně pestrá, tak zde nebudeme procházet všechny možnosti. Doporučuji vyzkoušet samostatně jednotlivé volby. To, co jste právě zadali, se okamžitě projeví nahoře v interaktivním náhledu bloku. My chceme, aby se zde zadávalo číslo výstupního pinu, tedy po zadaném zavináči vybereme volbu Number.

Vložení vstupního pole pomocí @
Obrázek 8 – vložení vstupního pole pomocí @

Zavináč zmizí a na jeho místě se objeví zvolený formát vstupu – viz obrázek 9 (text v položce Content). Podle zvoleného formátu vstupního pole se změní nejen náhled bloku, ale především nás bude zajímat nabídka, která se otevře pod položkou Content. V záložce Number zde můžeme zvolit název proměnné, pomocí které se bude toto vstupní pole dále načítat. Já zde nechám standardně nastavené mumber_1, ale můžete si zvolit, co chcete – třeba „číslo_pinu“. V položce Default value si zvolíte, jaké hodnota má být standardně nabízena – zde zvoleno 1 (obr. 9)

Specifikace vstupního pole NUMBER
Obrázek 9 – specifikace vstupního pole NUMBER

Na obrázku 10 vidíme, že pokračujeme v položce Content tím, že jsem za Number zapsal další text, protože chceme vložit další vstup. Konkrétně je zde zapsána jen čárka (ale napsat lze třeba „nastav na hodnotu“). Obdobným způsobem přes zápis zavináče jsme vložili další vstupní pole – zde typ Dropdown (rozbalovací pole). Další vstupní pole se nejen zobrazí v náhledu bloku, ale i jako další záložka na přehledu vstupních polí – viz obrázek 10, volba (1). Můžeme opět změnit jméno proměnné, pod kterou bude dostupná hodnota vstupního pole (2), ale spíše se zaměříme na nastavení (3). To nám umožní nastavit výběr vstupních hodnot výběrového pole.

POZNÁMKA:
Pozor jen na úpravu textu v sekci Content, zvláště na mazání vstupních polí. Často se stává, že při vymazání vstupního pole v nezobrazeném textu zůstane zavináč. My jej nevidíme, program ano. Díky tomu se část textu změní na proměnnou, naopak proměnná se tváří jako text. V tu chvíli je nejlepší vše smazat a začít se zápisem vstupních polí do textu Content úplně znova ☹.
Nastavení vstupního pole DROPDOWN
Obrázek 10 – nastavení vstupního pole DROPDOWN

Máme zde dva sloupce (viz předešlý obrázek 10, volba (3)) levý sloupec je zobrazovaná hodnota, pravý skutečná hodnota, která se dosadí do kódu. Dále je zde tlačítko (+), kterým se vyvolá následující dialog pro hromadné přidání těchto hodnot parametru.

Obrázek 11 ukazuje, jak můžeme zadat dvojice hodnot parametrů. První hodnota, zde HIGH, či LOW, je ta, co se bude zobrazovat v nabídce bloku. Oddělené čárkou jsou hodnoty, které se budou ukládat do kódu. Konkrétně: první řádka ukazuje, že první dvojice bude zobrazovaná nabídka HIGH, do kódu se místo ní bude vkládat hodnota 1. Když vytvoříme všechny tyto možnosti vstupních hodnot, uložíme je tlačítkem OK. Jen ještě připomenu, že je třeba si dát pozor na používání mezery. Pokud takto deklarujete dvojici HIGH, čárka a 1 nebo HIGH čárka, mezera a jedna, bude v druhém případě brána hodnota jako „čárka jedna“. Poučení zní – mezery nedělat!

Zadání hodnot pro rozbalovací nabídku
Obrázek 11 – zadání hodnot pro rozbalovací nabídku

Po vložení dvojic „nabídka čárka hodnota“ se do tabulky možných hodnot přidají námi zadané hodnoty. Pozor, ony se přidají, tedy původní prázdná dvojice, které tam byla nabídnuta, zůstane – viz obrázek 12. První prázdný řádek je tedy třeba odstranit pomocí ikony křížku.

Odstranění prázdného řádku nabízených hodnot
Obrázek 12 – odstranění prázdného řádku nabízených hodnot

Pochopitelně i zde můžeme zvolit výchozí hodnotu ve volbě Default value – standardně to bývá ta první položka v seznamu.

Obrázek 13 již ukazuje, jak máme nastavený blok příkazu. Je to příkazový blok jménem „Nějaký příkaz“ se vstupním číselným polem (s výchozí hodnotou 1) a s rozbalovací nabídkou, která nabízí možnosti HIGH a LOW. V tuhle chvíli je nejlepší nastavení uložit pomocí tlačítka Save (2).

Vytvořený blok příkazu
Obrázek 13 - vytvořený blok příkazu

Máme nastavený vstupní blok. Nyní se zaměříme na jeho výkonnou část – tedy musíme napsat kód, který se místo tohoto bloku bude vkládat do zdrojového kódu programu.

Výkonná část bloku – psaní kódu

V pravém sloupci (obr. 14), kde jsme připravovali vzhled bloku „Nějaký příkaz“ (1), stačí odrolovat níže (2), kde je několik černých polí, kam budeme vkládat kód. Tuto části zcela korespondují se strukturou programu v prostředí Arduino C. První části lib je určená pro vkládání případných externích knihoven, o tom někdy jindy. Další část declare, to je část kódu deklarací, kde lze deklarovat proměnné, konstanty, ale i potřebné procedury a funkce. Kód vložený do části setup se vloží do stejnojmenné procedury, která se spouští jen jednou po startu modulu Arduino. Část code obsahuje příkazy, které se vkládají dále na místo určené pozicí bloku (Zpravidla do nekonečné smyčky, kterou ale musíme při tvorbě programu vytvořit). Naopak část _loop, to je část příkazů, které se budou opakovat stále dokola.

Tato část je u mBlock trochu zvláštní. Při normálním programování modulu Arduino se využívají dvě základní procedury. Procedura setup, která většinou nastaví potřebné vstupy a výstupy a procedura loop, která se neustále opakuje a tím vykonává kód. V mBlock, můžeme vytvořit program, který proběhne jen jednou – pak se jeho výkonná část vnoří do procedury setup. Pokud vytvoříme blok nekonečné smyčky, nejde v tomto případě o příkazy v proceduře loop, ale je vytvořená nekonečná smyčka stále v proceduře setup. Procedura loop by se spustila až po dokončení procedury setup. Ta by se však, díky existenci nekonečné smyčky, nikdy nespustila! (Nevím, proč je to tak řešené!) Díky tomu, ale je třeba tuto smyčku spouštět uměle. Na to slouží procedura _loop. Ta se buď spouští ve smyčce loop (pokud není v setup nekonečná smyčka) nebo vždy na konci nekonečné smyčky – mBlock to naštěstí dělá automaticky. Takže do procedury _loop můžeme vložit příkazy, které se musí automaticky spustit pokaždé. Je to vlastně stejné, jako bychom je vložili do procedury loop při klasickém programování modulu Arduino.

Shrnuto: Příkazy v sekci code se vloží tam, kam potřebujeme (dáno zápisem našeho programu), příkazy v sekci _loop se vždy budou vždy opakovat (dobré kupříkladu pro obnovování LED zobrazovačů).

Zadávání výkonné části bloku (tvorba kódu)
Obrázek 14 – zadávání výkonné části bloku (tvorba kódu)

Nejdříve pro náš jednoduchý příklad budeme využívat sekce declare, kde nastavíme zvolený pin na výstup. To vidíme na následujícím obrázku 15. Po kliknutí na černý pruh sekce declare se nám otevře okno editaci kódu. V jazyku Arduino C se nastavuje výstup na výstup příkazem pinMode(1, OUTPUT), kde 1 udává číslo pinu. My ale číslo pinu nemůžeme zadat konkrétním číslem, protože nevíme, jakou hodnotu zadá programátor do bloku při tvorbě svého programu. Potřebujeme tedy, aby se za pin dosadilo číslo zadané do vstupního pole v bloku. To uděláme tak, že na toto místo zadáme název vstupního parametru, který jsme zadali při tvorbě bloku – zde tedy number_1. Tento název se zadává speciálním zápisem, kdy jméno tohoto vstupního pole „zabalíme“ do znaků /*{ a }*/. Námi zadaný kód tedy bude vypadat:

pinMode(/*{number_1}*/, OUTPUT);

Zapsaný kód je třeba potvrdit volbou OK.

Vložení kódu do sekce declare
Obrázek 15 – vložení kódu do sekce declare

Pokud umíme přenést hodnotu vstupního pole do výkonného kódu, bude již editace části code hračkou. Klikneme na sekci code a napíšeme následující příkaz: (viz obrázek 16)

digitalWrite(/*{number_1}*/,/*{fieldMenu_2}*/);

Tento zápis odpovídá nastavení digitálního výstupu čísla daného vstupním polem munber_1 na hodnotu fieldMenu_2 (v bloku se zobrazuje HIGH a LOW, ale do kódu se vkládá námi zvolená hodnota 0 nebo 1).

Vložení kódu do sekce code
Obrázek 16 – vložení kódu do sekce code

Z hlediska funkčnosti máme hotovo! Ze samé radosti nezapomeňme opět uložit tlačítkem Save (viz obr. 17)!

Uložení hotového bloku
Obrázek 17 – uložení hotového bloku
Vytváření dalších bloků a kategorií příkazů

Pochopitelně nyní jsme vytvořili jeden jediný příkaz nazvaný „Nějaký příkaz“ v kategorii „Testovací rozšíření“. Pokud bychom chtěli vytvořit v dané kategorii další příkaz, stačí na patě sloupce Block list kliknout na ikonu (+), které přidá nový příkaz. Nastavení jeho bloku a výkonného kódu je obdobné tomu, jak jsme vytvářeli u našeho zkušebního bloku „Nějaký příkaz“.

Kdybychom chtěli, aby naše rozšíření obsahovalo několik kategorií třeba „příkazy pro vstupy“ a „příkazy pro výstupy“ založili bychom příslušné kategorie příkazů kliknutím ikony (+) na patě sloupce Block category.

Další nastavení

Nyní se pustíme do dalšího nastavení. To již není pro samotnou funkčnost potřeba, ale je dobré jej také dokončit. Na hlavní stránce našeho rozšíření klikneme na ikonku tužtičky ve sloupci Block category (viz obrázek 18, volba (1)). Otevře se nám nastavení kategorie rozšíření. Můžeme zde nastavit jméno této kategorie, stejně tak tu můžeme nahrát obrázek, který se bude zobrazovat místo klasického puntíku na liště příkazů. Já jsem sem pro ukázku nahrál obrázek modré krychličky (2). Stejně tak je dobré nastavit barvu bloků této kategorie. Bývá zvykem dodržovat určité značení pro vstupy a výstupy. Zde bude barva bloků nastavena na modrou, abychom později viděli, že se oproti standardně nastavené zelené barvě změnila (3). Volby uložíme tlačítkem Save. (4)

Nastavení Block category
Obrázek 18 – nastavení Block category

Jazyková lokalizace bloku

Další doplňující nastavení je překlad našeho vytvořeného bloku. Editaci jazykové lokalizace zvolíme na záložce Translation settings na liště v hlavní nabídce – viz obrázek 19. V levém sloupci máme vypsané všechny textové hlášky, které jsme zadali. Ve výběru jazyků zaklikneme ty, pro které chceme naše rozšíření lokalizovat. Tím se nám otevřou okna pro texty v daných jazycích. Všimněte si na následujícím obrázku, že když jsem vybral češtinu, je zde rámeček pro čínštinu a angličtinu doplněn i češtinou. Čínština a angličtina jsou zde vybrány automaticky, ale můžeme je vypnout. Do polí čínštiny jsou prokopírované texty, které jsme zadali. Například na následujícím obrázku vidíme, že je tam text „Testovací rozšíření“. To je ten důvod, proč jsem apeloval na to, abychom pro pojmenování rozšíření a jeho parametrů zvolili aspoň angličtinu.

Pokud některé výrazy nechcete překládat, kupříkladu číselné hodnoty, klikněte u daného výrazu na ikonu (–), která nastaví této položce atribut ignored a tím nebude potřeba její překlad. Bude použita její původní („čínská“) hodnota.

Jazyková lokalizace rozšíření
Obrázek 19 - jazyková lokalizace rozšíření

Test rozšíření

Ať už jsme nastavili barvu bloku, či jeho lokalizaci, nebo jsme to zatím nechali být. Důležité je, aby naše rozšíření fungovalo. Funkčnost rozšíření můžeme vyzkoušet dvěma způsoby:

  1. Online nástrojem
  2. Stáhnout a vložit „offline“ do svého mBlock

Testování online

Nejdříve si ukážeme možnost online.

V pravém horním rohu hlavní nabídky máme dvě ikony Download a Preview. Pro online vyzkoušení klikneme na Preview (obrázek 20 volba (1)). Spustí se příprava rozšíření, které po úspěšném dokončení vypadá jako na následujícím obrázku. Tam klikneme na odkaz Open manually (2), tím se v novém okně prohlížeče otevře online verze prostředí mBlock.

Test vytvořeného rozšíření
Obrázek 20 – test vytvořeného rozšíření

Po otevření online prostředí mBlock se v něm otevře mezi příkazy i naše rozšíření. Následující obrázek (obr. 21) nám to ukazuje. Všimneme si zde několika věcí. Zaprvé v sloupci Device je zvolen modul Arduino UNO. Kdybychom při tvorbě rozšíření vybrali i další moduly Arduino, byly by zde zastoupeny. Zadruhé na liště příkazů je naše rozšíření pojmenováno „Testovací rozšíření“ (Jak jsme zvolili na začátku nebo mohli změnit ve sloupci Block category) Také má toto rozšíření ikonu namodralé krychličky a samotný blok příkazu je modrý tak, jak jsme si nastavili v předešlých krocích.

Nic nám nebrání zkusit vytvořit první program s naším novým příkazem!

Test rozšíření v online prostředí mBlock
Obrázek 21 – test rozšíření v online prostředí mBlock

Na obrázku 22 vidíme jak bloky našeho jednoduchého programu, tak jeho podobu v jazyku Arduino C. Program dělá to, že se vteřinovou prodlevou rozsvěcí a zhasíná LED na pinu číslo 13 modulu Arduino UNO. Pochopitelně to dělá pomocí našeho zkušebního bloku. Celý kód je vnořeno do nekonečné smyčky opakuj stále. Na pravé straně vidíme kód, který by byl odeslán na modul Arduino.

V sekci setup je „náš“ příkaz pinMode, který jsme zadali v sekci setup při tvorbě rozšíření. Díky propojení vstupního pole a výkonného kódu direktivou /*{number_1}*/ , je zde automaticky dosazeno číslo 13. V nekonečné smyčce vytvořené prostředím mBlock pomocí cyklu while(1) je „vsazen“ příkaz pro nastavení zadaného výstupu na stav HIGH a LOW, což jsou podoby příkazu, který jsme zadávali do sekce code. Opět i zde je číslo pinu prokopírováno ze vstupného pole použitého bloku. Stejně tak jsou zde zadané hodnoty 0 a 1 dle hodnot HIGH a LOW tak, jak jsme nastavili v definici bloku.

Pokud chceme opravdu vyzkoušet funkčnost vzniklého kódu, můžeme jej z online prostředí mBlock nahrát do připojeného modulu Arduino. Pro propojení webového prohlížeče s online prostředím mBlock a modulu Arduino na USB portu je třeba mít ve svém počítači doinstalován ovladač mLink. Pokud jej v PC nemáte, online prostředí mBlock Vás na to upozorní a nabídne Vám odkaz na stažení tohoto doplňku.

Program s užitím bloku našeho rozšíření a výsledný kód v Arduino C
Obrázek 22 – program s užitím bloku našeho rozšíření a výsledný kód v Arduino C

Testování offline

Druhým způsobem, jak vyzkoušet funkčnost vytvořeného rozšíření, je jeho stažení z hlavní nabídky Extension Builderu – viz volba Download (1) na obrázku 23. Proběhne podobný dialog, jako jsme viděli při volbě Preview, jen skončí tlačítkem Download now (2). Uložíme tak soubor s příponou mext do svého počítače. Ten pak vložíme do své aplikace mBlock.

Stažení souboru našeho rozšíření pro offline testování
Obrázek 23 – stažení souboru našeho rozšíření pro offline testování

Po otevření prostředí mBlock ještě své rozšíření v něm nemáme. Vložíme ho tak, že vezmeme stažený soubor s příponou mext a přetáhneme jej na plochu prostředí mBlock. Jakmile se souborem najedeme nad prostředí mBlock, prostředí zešedne a objeví se nápis „Přetáhněte soubor a umístěte jej sem.“ (obrázek 24). Uvolněním tlačítka myši, dojde k načtení souboru rozšíření.

Rázem máme na liště příkazů naše rozšíření, stejně jako bychom jej třeba přidali pomocí průvodce rozšíření. Tvorba programu (tedy i test funkčnosti) našeho rozšíření se odehrává stejně jako v případě online prostředí mBlock.

Drag&Drop přitažení souboru rozšíření do prostředí mBlock
Obrázek 24 – Drag&Drop přitažení souboru rozšíření do prostředí mBlock

Pokud jsme přidali do svého prostředí mBlock vygenerovaný soubor s příponou mext, je samozřejmě dostupný i v průvodci rozšířeními. Můžeme ho tam kupříkladu i „vypnout“. To si můžete vyzkoušet tak, že kliknete na ikonu průvodce rozšířeními – viz obrázek 25, volba (1).

Otevře se standardní nabídka všech dostupných rozšíření. Abychom v této značné nabídce našli to své, zadáme do vyhledávacího pole prvních pár znaků jeho názvu – například Testovac (volba (2)). Tím se zobrazí to naše rozšíření, které má tento specifický název.

Na obrázku vidíte, jak to pak vypadá. V průvodci rozšířeními je naše rozšíření zobrazeno s obrázkem a informacemi, které jsme zadali v kategorii Advanced configuration – viz (3). Stejně tak by měli rozšíření vidět i ostatní uživatelé, pokud se jej rozhodneme publikovat.

Zobrazení našeho rozšíření v průvodci rozšíření
Obrázek 25 – zobrazení našeho rozšíření v průvodci rozšíření

Publikace rozšíření je posledním možným krokem, do kterého se při tvorbě vlastního rozšíření můžeme pustit. Je na zváženou, zda je tento krok vždy nutný. Viděli jsme, že můžeme své rozšíření vytvořit, stáhnout v souboru s příponou mext a normálně pro svou potřebu používat. Konec konců nic nám nebrání, abychom tento vzniklý soubor poskytovali dále, kupříkladu svým přátelům.

Publikace rozšíření

K publikaci našeho rozšíření do celosvětové databáze by si měl každý vývojář řádně rozmyslet. Nechci zde uvádět všechny aspekty, které je třeba zvážit, ale mezi ty základní, na které by si měl vývojář umět odpovědět, jsou tyto:

  • Opravdu je mé rozšíření užitečné i pro ostatní vývojáře?
  • Neexistuje již podobné nebo dokonce lepší?
  • Je mé rozšíření obecně použitelné? (To, že mně ve speciálním případě funguje, není ještě zárukou, že bude fungovat v jiném případě někomu jinému?)
  • Je toto opravdu taková verze, kterou bude možné do budoucna rozvíjet s ohledem na zpětnou kompatibilitu?

Také je dobré, pokud se rozhodneme rozšíření publikovat, rozšíření dobře jazykově lokalizovat a vyplnit všechny popisy, které uvidí uživatel. Bohužel toto všichni vývojáři nečiní, takže někdy je používání rozšíření druhých uživatelů pěkné dobrodružství! Používání bloků, co jsou jen v čínštině, turečtině apod. je pak fakt adrenalin!

Ale pokud jsem Vás nezviklal a opravdu máte pocit, že Vaše rozšíření je zralé na vstup do světa jménem mBlock, využijeme volby Extension Management v sekci Publish Service na levém tmavém pruhu v Extension Builderu – viz obrázek 26, volba (1). Je zde tlačítko Publish new extension, volba (2). Kliknete-li na něj, vysune se na pravé straně publikační dialog.

Do položky Name (or ID) zadáme pár prvních znaků ze jména našeho rozšíření (3). Tím se nám pod toto řádkou rozbalí tabulka všech našich rozšíření, které tento výraz splňují. Na následujícím obrázku vidíme, že výraz „Te“ splňuje naše Testovací rozšíření (4). To, které chceme publikovat, vybereme kliknutím na výběrové tlačítko (4). Zde vidíme nejen název daného rozšíření, ale i jeho verzi. Zde je potřeba dodržovat to, aby publikace každé novější verze měla vždy jiné (vyšší) číslo.

Do sekce Version details (volba (5)), je potřeba stručně (anglicky) shrnout, co je to za rozšíření, popřípadě co je v této verzi přidáno oproti předchozí.

Tlačítkem OK odešlete své rozšíření ke schválení. Samotné odesílání trvá asi 2–3 minuty, tak nepanikařte a nezavírejte prohlížeč, ani nemačkejte tlačítko „Načíst znova“. Opravdu dejte tomu čas a nechte tento proces proběhnout.

Postup publikace rozšíření
Obrázek 26 – postup publikace rozšíření

Po odeslání ke schválení, je rozšíření uvedeno v Extension Manageru a je u něj uveden stav – v jednání, schváleno… Samotné schválení trvá asi týden. Pokud je rozšíření schváleno, začne být prostřednictvím průvodce rozšířeními dostupné i pro ostatní uživatele prostředí mBlock.

POZNÁMKA:
Ani po úspěšném schválení našeho rozšíření ještě nemáme hotovo! Až po schválení rozšíření je potřeba ještě doplnit texty nápovědy. To bohužel řada vývojářů již neudělá! Ale to je na jiné povídání…

Odstranění rozšíření z Extension Builderu

Na samý závěr si ještě ukážeme, jak právě vytvořené testovací rozšíření z Extension Builderu odstranit. Jen upozorňuji, že odstraníte dané rozšíření, nikoliv jeho publikovanou podobu. To, co jste jž publikovali, si již žije v databázi publikovaných rozšíření vlastním životem. (Další důvod, proč je dobré případnou publikaci rozšíření dobře zvážit!)

V sekci My extension (viz obrázek 27) vidíme vypsané všechny své rozšíření – zde pochopitelně jen to jedno naše zkušební. V pravé přehledu rozšíření části vidíme ikony: Edit, Download, Preview a Delete. Odstranění rozšíření je tedy jen otázkou kliknutí na Delete.

Jen ještě dodám, že pokud jsme si uložili soubor mext můžeme rozšíření zpět nahrát pomocí tlačítka Import data.

Odstranění rozšíření z Extension Builder
Obrázek 27 – odstranění rozšíření z Extension Builder

Závěr

Ukázali jsme si, jak krok za krokem vytvořit své vlastní rozšíření pro prostředí mBlock. Jednalo se spíše o základní seznámení s online prostředím Extension Builder. Pro podrobnější seznámení doporučuji nebát se zkoušet a experimentovat!

Naopak v případě publikace svých rozšíření bych byl opatrnější. Pokud totiž porušíte zpětnou kompatibilitu jednotlivých verzí, stane se to, že uživatelům, kteří použili Vaše rozšíření, najednou s novou verzí přestanou staré programy fungovat. A to je průšvih! Zpravidla taková nová verze neprojde procesem schvalování, ale tím pádem v internetové databázi zůstane jen ta stará původní verze, která se tak může stát jakousi slepou vývojovou větví.

Osobně si myslím, že nejlepší je vytvářet své rozšíření, pokud je nutně potřebujeme, jen pro svou potřebu. Používat je pomocí souboru mext, který kdykoliv můžete poskytnout ke stažení na internetu společně se svým projektem v mBlock. Otevřenost prostředí mBlock, která se projevuje kupříkladu i relativně snadnou možností vytvářet své rozšíření, činí z mBlock lehké, intuitivní a dynamické prostředí. Snad tento text Vám částečně pomohl k tomu, abyste se naučili těchto předností co nejvíce využívat.

Autor článku: Miroslav Panoš
UPOZORNĚNÍ:
Nesouhlasíme s vyřazením Newtonových zákonů, Ohmova zákona a zákona zachování energie z učiva fyziky základních škol v České republice!