Před časem jsem narazil na zajímavý čínský vývojový kit, který mě oslovil hned na první pohled a hned jsem viděl projekt, na kterém bych ho mohl použít. A tak jsem si objednal jednu sadu. Nejde ale jen o destičku se součástkami, kterou programujete a blikáte si ledkou, jde spíše o kompletní řešení v krabičce, které můžete použít jako hotový produkt a nemusíte se za to vůbec stydět. Celý vývojový kit se nazývá M5Stack a detailněji se na něj podíváme v následujícím článku.
Základní stavební kámen
Základním článkem celé platformy je malá krabička o velikosti 5,5 x 5,5 cm s barevným TFT LCD displejem o úhlopříčce 2″ a rozlišením 320×240 pixelů (obr. 1 a 2), která postrádá zadní stranu. Ačkoliv krabička působí trochu nenápadně, tak skrývá neuvěřitelné možnosti. Na první pohled zaujme pěkným vzhledem a je k dostání dokonce v několika barevných variantách (šedá, bílá, červená a černá). Já mám k dispozici momentálně jen šedou variantu a dále v článku se dozvíte proč právě tu. Barevné varianty se od sebe liší nejen vzhledem, ale také vnitřní výbavou. Takže, jak už bylo zmíněno, na první pohled vidíme displej a pod ním jsou umístěné tři tlačítka, jejichž funkci můžeme ovlivnit v programu. Na bocích krabičky si můžeme všimnout USB-C portu, který slouží k programování a také k nabíjení případného akumulátoru, nad tímto konektorem je červené tlačítko, které slouží k vypínání, zapínání a případně i restartu celého zařízení. Funkce tohoto tlačítka se dají také měnit, ale bohužel už ne tak snadno, jako tomu je u třech tlačítek na čelní straně. Na stejné straně jako USB-C konektor a vypínací tlačítko ještě najdeme speciální konektor, který je označován jako GROVE a slouží k připojení rozšiřujících modulů po I2C sběrnici. Na spodní straně krabičky je slot pro mikro SD kartu. Na pravém boku už je jen několik otvorů, za kterými se skrývá reproduktor, ale myslím, že k ničemu jinému, než pípnutí jej nebudete chtít použít 🙂
Obr. 1: Základní modul M5Stack (pohled z vrchu) Obr. 2: Základní modul M5Stack (pohled zespodu)
Obr. 3:
Základní modul M5Stack (pohled dovnitř)
Uvnitř této základní krabičky se skrývá vlastně téměř vše, co Vaše zařízení může potřebovat (obr. 3). Základem je procesor ESP32, který umožňuje připojení jak na WiFi, tak i Bluetooth Low Energy (BLE). K procesoru je připojena FLASH paměť pro program. Velikost této paměti se liší podle zvolené varianty a také podle verze. Já získal pouze 4MB flash, ale to je rozhodně dostačující. Dále uvnitř najdete napájecí obvody a také kontrolér baterie IP5306, který rozhodně na první pohled zaujme tím, že je to upravená I2C verze, ale po podrobném zkoumání může leckoho trochu zklamat. Posledním prvkem, který stojí za zmínku, je dlouhý konektor pro připojení zadní strany podle potřeby. Jaké zadní strany můžeme připojit, na to se podíváme dále.
Různé varianty
Jak již jsem zmínil, tak produkt můžete koupit v různých variantách, čemuž odpovídá samozřejmě i cena. A nejde jen o varianty základního modulu, ale také o to, co vše dostanete v balení. Pro moje účely se hodilo něco víc, než jen základní modul s displejem – a tak jsem zakoupil balení, které prezentují jako FACES (obr. 4), které obsahuje základní modul v šedé barvě spolu se zadní stranou, na kterou se dá napojit klávesnice, enkodér nebo herní tlačítka, jako měl například Game Boy. Celé tohle je jen v šedé barvě, ale i přesto to vypadá více než luxusně (obr. 3).
Celé balení tedy obsahuje:
- Základní modul (obr. 1 – bez spodní strany obr. 2)
- Rozšířenou spodní stranu (viz obr. 4)
- Tři různé moduly klávesnice (QWERTY, kalkulačka, herní ve stylu GameBoy)
- Dokovací nabíjecí stanici (viz obr. 4)
- USB-C kabel
- Poutko (viz obr. 4)
Obr. 4: Celá sada M5Stack FACES (Zleva z vrchu: Základní modul, Zadní strana, Nabíjecí stanice, GameBoy klávesnice, Kalkulačková klávesnice a QWERTY klávesnice) Obr. 5: M5Stack faces s enkodérem
Mimo jiné všechny moduly přišly krásně zabalené v plastových krabičkách. Je tedy vidět, že na balení si dali opravdu záležet, ale je pravda, že člověk všechno tohle nemůže ani využít. Já například musel zvlášť objednat modul s enkodérem (obr. 5) a tři klávesnice mi leží nevyužité. Ale i tak to na mě působilo dobrým dojmem, když jsem to rozbaloval.
A co se tedy skrývá uvnitř rozšiřujících modulů? Spodní strana modulu FACES obsahuje baterii 3,7V 600mAh a také svůj vlastní nabíjecí obvod IP5306 (trochu zklamání – má své výhody i nevýhody). Dále už jen rozšíření portů a připojení na klávesnici. Co je ale rozhodně zajímavé a stojí za zmínění, tak je POGO připojení na dokovací nabíjecí stanici a magnety. Také gumové plošky, aby zařízení nelítalo po stole jako smyslů zbavené. V tomto ohledu je zpracování opravdu precizní a mnohokrát mě překvapili různé detaily, které vylepšují pohled na celou platformu.
Každý modul klávesnice (a enkodéru) má vlastní mikrokontrolér ATMEL ATMEGA328, který si sami můžete přeprogramovat podle sebe. V základu ale obsahuje program, se kterým můžete komunikovat po I2C sběrnici.
Trochu zklamání pro mě bylo, když jsem rozebral dokovací nabíjecí stanici a zjistil, že jediné, co obsahuje, tak jsou magnety a propojení napájení z USB-C na POGO piny. Co by tam člověk taky víc čekal.
První spuštění
Celá platforma M5Stack FACES je na stránkách i na prodejní kartě opravdu pěkně prezentována například spolu s hrou Super Mario a tak jsem se těšil, že jakmile mi zařízení přijde, hned to vyzkouším. Bohužel ihned na začátek přišlo drobné zklamání. Poté, co jsem poskládal moduly k sobě a stiskl vypínací tlačítko, nic se nestalo. No jak by taky mohlo, když byla baterie vybitá. Po připojení USB kabelu se displej ihned rozsvítil a objevilo se něco jako terminál (prostě černá obrazovka a text – obr.). Po připojení modulu s QWERTY klávesnicí jsem měl možnost do terminálu psát a po stisknutí na enter odeslat napsaný příkaz. Po použití příkazu “help” se odrolovalo několik řádků, ale nic mi to vlastně neřeklo – no asi by to chtělo přečíst si návod. Tady jsem své snažení a radost vzdal, v tuto chvíli jsem si Super Maria prostě nezahrál. Nevím, jestli zařízení obsahovalo nějaké menu nebo byla možnost, jak si zahrát hned po spuštění, ale mě se to nepodařilo. každopádně tohle nebyl ten důvod, proč jsem si to kupoval.
Vlastní program
Celou sestavu jsem zakoupil hlavně proto, abych to mohl sám programovat a udělat z toho vlastní zařízení, jestli se to skutečně podařilo bych shrnul až v závěru, ale nyní se dostáváme k vlastnímu nahrání programu.
Pro ty, co již trochu znají procesor ESP32 nebo moduly s tímto procesorem, nebude tato část vlastně nic nového. Abych byl přesný, nahrávání programu probíhá stejně, jak jste byli doposud zvyklí a to si myslím, že je velice dobře.
Rád bych upozornil, že aby se mi podařilo správně nahrát program do modulu, tak jsem musel nainstalovat aktuální ovladač pro převodník USB – UART.
Programování M5Stack tedy může probíhat úplně stejně, jako jiných modulů s ESP32, já například používám ESP-IDF a programuji normálně v jazyce C, ale veškeré příklady pro M5Stack jsou dostupné právě pro Arduino IDE, což je stejně asi pro většinu lidí příjemnější varianta.
Mě se tedy podařilo nahrát program pomocí příkazové řádky s python skriptem, ale zkoušel jsem i program ESP Flash Download Tool a nebyl žádný problém.
Ukázku vlastního programu můžete vidět na obrázku XX. Jedná se o bezdrátový ovladač k digitální centrále TCS.
Jednotlivé moduly a jejich propojení
Jak jsem již zmínil, tak je možné zakoupit spoustu různých modulů připojitelných většinou po I2C sběrnici. Existují moduly senzorové, kamery, LEDky, relé, spínání motorů, RFID, tlačítka a spousta dalších. Všechny moduly najdete na stránkách výrobce: https://m5stack.com/product i s jejich popisem. Já bohužel žádný z těchto modulů nemám, tak je ani nebudu nijak zvlášť popisovat, protože jsem je nevyzkoušel. Dále popíši detailněji už jen moduly, které byly součástí a jsou zmíněny už výše.
Základní propojení
Většinu těchto informací můžete najít v dokumentaci od výrobce, ale i přesto bych zde rád popsal vše česky a také poukázal na některé detaily, které mě při vývoji zaskočily a je dobré si na to dát pozor. Například pochopení kontroléru baterie bylo opravdu na několik dní. Začal bych tedy tím, že k základnímu modulu s displejem existuje schéma od výrobce, které najdete v dokumentaci – https://docs.m5stack.com/#/en/core/gray , ale mám pocit, že z něj není vše hned na první pohled jasné. Například to, že IP5306 je propojen s procesorem pomocí I2C sběrnice nebo jak přesně funguje vypínací tlačítko. Asi nemá cenu zde vypisovat, co najdete na kterém pinu, když je to popsáno už v dokumentaci a tak přejdu rovnou k baterii.
Baterie a obvod IP5306
Z konstrukce modulů vyplývá, že baterie může být připojena buď přímo do základního modulu a nebo právě, jako v mém případě, pomocí FACES modulu. Na baterii dohlíží obvod IP5306, který má za úkol baterii správně nabíjet z USB-C a taky monitorovat její stav nabití. Tento obvod také obsluhuje vypínací tlačítko, což pro mne bylo trochu překvapení. Fungování můžeme nastavit pomocí I2C sběrnice a poté také vyčítat hodnoty. V tuto chvíli narazíme především na nedostatečnou dokumentaci ze strany výrobce (https://github.com/m5stack/M5-Schematic/blob/master/Core/IIC_IP5306_REG_V1.4.pdf ), která je převážně v čínštině a po přeložení pomocí Google překladače nedává dost věcí smysl a také spousta věcí chybí. Doporučuji raději překládat čínštinu do angličtiny, pak je to trochu více srozumitelnější. Já se zde pokusím vysvětlit alespoň několik registrů.
Adresa obvodu IP5306 na sběrnici I2C je 0x75 a maximální komunikační rychlost je 400kb/s. Zápis a čtení probíhá standardně ve formátu Adresa, Registr a data. Pomocí registrů můžeme zakazovat/povolovat nabíjení, nastavovat maximální proud a napětí při nabíjení, upravovat možnosti vypínacího tlačítka, ale také můžeme monitorovat stav nabíjení a úroveň vybití. Například zrovna úroveň vybití baterie není vůbec nikde popsána a našel jsem tuto informaci až na diskuzních fórech.
Přikládám ke stažení přeloženou dokumentaci k obvodu IP5306 do angličtiny, ale jen pomocí Google překladače!
Stále ale chybí některé důležité informace. Jak tedy číst stav vybití baterie? Tuto informaci najdeme v registru 0x78. Po vyčtení jednoho bajtu nás zajímají vrchní čtyři bity (vymaskujeme tedy jen ty – 0xF0) a dostaneme tím 5 různých úrovní nabití:
- 0xF0 – 0%
- 0xE0 – 25%
- 0xC0 – 50%
- 0x80 – 75%
- 0x00 – 100%
Bohužel jiné hodnoty se mi získat nepodařilo, ať jsem to zkoušel jakkoliv jinak, tak mezihodnoty obvod IP5306 nedává. Ještě tedy zmíním, jak zjistit, jestli se baterie nabíjí a jestli je plně nabitá. Slouží k tomu dva registry. V registru číslo 0x70 na bitu číslo 3 (maskováno 0x08) je informace o tom, zdali se baterie nabíjí (1) či vybíjí (0). A v registru číslo 0x71 také na pozici bitu číslo 3 (maskováno 0x08) je informace o stavu nabití – plně nabito (1) nebo ne (0).
Jako poslední bych rád zmínil, jak je to s vypínacím tlačítkem. Z výroby je vypínací tlačítko zároveň připojeno na reset pin procesoru, což nám nedává moc možností, jak ho využít. I když obvod IP5306 umí detekovat tři různé stavy tlačítka (krátký stisk, dlouhý stisk a dvojstisk), tak využití je docela malé. Základní nastavení je takové, že krátkým stiskem zařízení zapneme a když je zapnuté, tak ho krátkým stiskem restartujeme. Poté dvojím stisknutím za sebou zařízení vypneme. Tohle se mě osobně příliš nelíbí a tak se mi podařilo udělat alespoň to, že zapnutí i vypnutí probíhá krátkým stiskem a to pomocí bitu číslo 5 v registru číslo 0x01. Zapsáním jedničky na pozici bitu číslo 5 (maskováno 0x20) se nastaví vypínání krátkým stiskem. Zkoušel jsem více různých variant, ale žádná z nich se dostatečně neosvědčila.
Nakonec bych rád zmínil, že jsem byl velice překvapen, když jsem připojil zařízení přes dokovací stanici a nechal jej nabíjet, že jsem nedostal informaci o tom, že se zařízení nabíjí a ani, že je nabito. A proč tomu tak je? Zjistil jsem, že napájení dokovací stanice jde pouze do speciálního (druhého) obvodu IP5306, který jen nabíjí baterii aniž by byla monitorována a není připojen na sběrnici I2C. Tohle je opravdu škoda, ale čtení stavu baterie z prvního obvodu v tuto chvíli funguje. Akorát není dostatečně informující. Tohle považuji opravdu za mínus, ale výhodou je, že nabíjení baterie probíhá i při vypnutém zařízení.
narazil jsem ještě na jeden problém s baterií a tím je, že se baterie vybíjí i ve vypnutém stavu a to se mi rozhodně nelíbí.
Modul enkodéru
Jako modul navíc jsem zakoupil enkodér, který může být umístěn na místo klávesnice. Kromě enkodéru modul obsahuje také 12 RGB LED okolo enkodéru a mikrokontrolér ATMEL, se kterým je možné komunikovat přes sběrnici I2C na adrese 0x5E.
Po I2C sběrnici z mikrokontroléru je možné vyčíst dva bajty, kde první obsahuje číslo o kolik se otočil enkodér a jakým směrem a druhý bajt říká jestli došlo ke stisku tlačítka. Na detekci směru otočení je jednoduchý algoritmus: Pokud je číslo větší jak 127, tak se jedná o otočení proti hodinovým ručičkám a počet otočení získáme tak, že odečteme získané číslo od 256. V opačném případě se jedná o otočení po směru hodinových ručiček a číslo odpovídá přímo počtu otočení.
A jak je to tedy s tou hrou Super Mario?
Na začátku článku jsem zmínil, že jsem se těšil, jak si na M5Stack modulu pustím hru Super Mario (obr. 7) a taky na to nakonec přišlo. V dokumentaci k FACES modulům (https://docs.m5stack.com/#/en/core/face_kit) je přímo odkaz na stažení hry i s návodem, jak ji nahrát do ovladače – https://docs.m5stack.com/#/en/quick_start/faces/gameboy_burn_a_nes_game
Musím podotknout, že to je opravdu jen na vyzkoušení a hlavně tomu nejde vypnout zvuk, který je přímo nesnesitelný, což je nejspíš způsobeno kvalitou repráčku. Také obraz je menší než velikost displeje, ale to je nejspíš způsobeno rozlišením.
Závěr a cena
Na závěr bych rád shrnul, co se mi na celém vývojovém kitu M5Stack líbí a co mě naopak vadí. Také bych se rád dotknul ceny, za kterou jsem to koupil. Já jsem pořídil celý kit M5Stack FACES za $52 plus modul s enkodérem za $7.62 na AliExpressu, což mi přijde, že je hlavní prodejní platforma výrobce. Objednávku jsem učinil v nejméně vhodnou dobu a to přes čínský nový rok, kdy většina prodejců neposílá a ani nereaguje na zprávy. Takže jsem si dost dlouho počkal, než vůbec někdo celou zásilku pošle. I po odeslání jsem čekal opravdu dlouhou dobu, snad více než měsíc, než mi zásilka dorazí. K mému k překvapení jsem neplatil ani DPH ani CLO, což mě opravdu potěšilo, vzhledem k tomu, že mi to doručovala Česká pošta. Cena, za kterou jsem to pořídil se zdá být docela vysoká, ale když si vezmu, co vše jsem za to dostal a kolik by to stálo, kdybych to vyvíjel sám, tak to není tolik přehnané (vím o čem mluvím, protože o vývoj podobného produktu se zrovna snažím). Bohužel, pokud bych chtěl celý kit využít pro své zařízení, tak bych narazil právě na DPH a CLO a také na komunikaci s prodejcem, která mi nepřišla příliš dobrá. nejlépe reaguje na GitHubu, když člověk zadá nějaký požadavek nebo nahlásí chybu. Také já sám bych se bál toho, že nemám celý HW pod kontrolou a že jsou použity čínské součástky bez dostatečné dokumentace.
Celý vývojový kit mě opravdu velice mile překvapil, hlavně, co se týká detailů a konstrukce. Také oceňuji využití USB-C a příslušenství, které dávají v balení. Tohle celé na mě působí opravdu skvěle. Také s prvním spuštěním jsem neměl moc práce a můj software fungoval téměř hned, což bylo rozhodně pozitivní. Jako hlavní negativum vidím použitý obvod IP5306 a spojení s vypínací tlačítkem, tady bych ocenil něco mnohem sofistikovanějšího. Jinak tedy nemám, příliš co vytknout, snad už jen dostupnost v Evropě.
Kam dál?
Pan Zahradník natočil pěkné video, které představuje základní modul. Najdete jej zde: https://youtu.be/zAVgPrY1fJg
Stránka výrobce: https://www.m5stack.com/
Koupit můžete zde: https://www.aliexpress.com/store/3226069
Líbil se Vám článek? Chcete více takových?
Chcete ocenit autora článku? Máte hned několik možností. Napište pěkný komentář, sdílejte článek na sociálních sítích a nebo přispějte alespoň malou částkou na PayPal 🙂 Děkuji