23.5.2018
Každé druhé úterý v měsíci se ve Valašském Meziříčí koná akce Tkalci na Webu. Občas si na akci připravím nějakou přednášku – ta poslední se týkala jednodeskového počítače BeagleBone.
BeagleBone Black neoplývá vysokým výkonem, porovnáme-li tento počítač s jinými podobnými počítači této třídy. Jeho předností je však snadná rozšiřitelnost a mimořádné bohatsví dostupných periférií. Díky dvěma koprocesorům PRU lze BeagleBone Black použít i pro realtime aplikace. BeagleBone obsahuje 4 GB eMMC paměti pro uložení systému a dat (flash disk).
K BeagleBone jsem se dostal začátkem roku 2011, kdy jsem sháněl jednoduchý počítač pro sběr dat na fotovoltaických elektrárnách. Nutností bylo několik sériových portů. Silnou stránku počítače BeagleBone je především množství periférií – BeagleBone nabízí sériové porty hned čtyři. Spolu s faktem, že v době, kdy jsem desku pro sběr dat navrhoval, bylo Raspberry Pi známé zatím pouze z oslavných článků, byl BeagleBone jasná volba.
V následujících odstavcích se pokusím zmínit některé kousky z blízkého příbuzenstva i ze vzdálenější rodiny a uvést dnešní BeagleBone do historických souvislostí.
Předchůdcem BeagleBone je BeagleBoard. Počítač, se kterým jsem se nikdy osobně nepotkal a vzhledem k existenci BeagleBone Black už se nikdy nepotkám.
BeagleBoard se v prodeji objevil 28. 6. 2008. Počítač je vytvořený pod Creative Commons licencí, jde tedy o otevřený hardware. Svými parametry je srovnatelný s podobnými počítači své kategorie, výkon samozřejmě odpovídá ceně před deseti lety (720 MHz ARM Cortex A8, 256 MB RAM, 256 MB NAND FLASH, SD karta, audio, HDMI, DSP). Cena se pohybuje od $95 do $149. Všechny informace čerpám z Wikipedie.
BeagleBone byl uvedný na trh na konci listopadu roku 2011. Mladší bratr desky BeagleBoard disponuje 256 MB RAM, procesor 720 MHz ARM Cortex A8 (podle všeho už obsahuje i 2 koprocesory PRU). Narozdíl od BeagleBoard nemá videovýstup. Na konektoru jsou však výstupy pro řízení LCD. Deska byla k dostání za $89, za tuto cenu je v prodeji ještě dnes. Se zahájením prodeje nejsou spojené žádné mimořádné události. Deska má bílou barvu a dnes se označuje jako BeagleBone White.
Pokud budeme hovořit o jednodeskových ARM počítačích, nelze opomenout Raspberry Pi. To bylo uvedeno na trh 29. února 2012. Wikipedie uvádí i přesný čas – 6:00 UTC. Wikipedie uvádí i další zajímavosti spojené se zahájením prodeje. Zájem byl tak obrovský, že weby RS Componets a Farnell, kde se Raspberry Pi prodávalo, byly k nepoužitelnosti zahlcené.
Nástupce původního BeagleBone se začal prodávat 23. dubna 2013. Deska se prodává dodnes a jde asi o nejpoužívanější variantu počítačů založených na BeagleBone. Ve srovnání s původním BeagleBone jde o velký skok dopředu – byla osazená větší paměť, procesor pracuje na vyšších kmitočtech, doplněný byl HDMI výstup a akcelerovaná grafika (mírný pokrok v mezích zákona), ale hlavně byl na desku osazen 2 GB disk eMMC. Tím se odstranila největší bolest embedded zařízení postavených na BeagleBone – SD karta. I přes svou vyšší cenu $45 a nižší výkon ve srovnání s Raspberry Pi je BeagleBone díky existenci eMMC disku úplně jiná liga.
O rok později se objevila deska BeagleBone Black Rev C, rozšířená na 4 GB eMMC. V počítači se místo distribuce Ångstrom objevila distribuce Debian.
Protože jde o otevřený hardware, postupem doby se objevily různé varianty odvozené od BeagleBone Black. Většinou jsou varianty pinově kompatibilní s BeagleBone White a Black:
Za největší konkurenci BeagleBone bych označil hned dva produkty. Konkurencí patrnou na první pohled je jednoznačně Raspberry Pi. Jeho konkurenční faktory jsou zřejmé:
Konkurence na druhý pohled tak patrná není a na přednášce vzbudila mírné překvapení. Za velkou konkurenci považuji jednoduché jednočipové procesory (například ARM-M0 až ARM-M4). Konkurenční faktory:
Vysvětlení potřebují především první dva faktory: Myšlení HW vývojáře je odlišné od myšlení SW vývojáře. HW vývojář nechápe, proč na řízení jednoho bitu použít celý operační systém, když tutéž práci odvede PIC za dvacetikorunu. Operačnímu systému navíc nerozumí a všechny ty abstraktní vrstvy, které odstiňují programátora od samotného hardware, jej odstiňují od hardware. Hardware je přitom to, čemu HW vývojář rozumí a chápe. Při vývoji produktu je proto vhodné, aby spolupracovali jak SW, tak HW vývojář.
Spotřeba je další faktor, který stojí za povšimnutí. Například jednoduchý teploměr (oblíbený námět) s komunikací protokolem LoRa a postavený na procesoru ARM-M0+ je možné živit ze dvou tužkových článků rok. Podobné zařízení postavené na BeagleBone Black by napájecí baterii podobných kvalit vycucnulo během hodiny.
Byl bych velmi nerad, kdyby uvedení parametrů BeagleBone Black vedlo k nežádoucímu porovnávání s Raspbery Pi. Při přednášce jsem na prezentaci nechal tuto stránku prázdnou.
Než povím něco bližšího, nabídnu k posouzení pár typických problémů, které řeší uživatelé obou platforem. Je mi jasné, že jsem obětí výběrového efektu, protože informace o Raspberry Pi nevyhledávám a přednostně se ke mě dostanou pouze dotazy, které ze specializovaných fór o Raspberry Pi prosákly na běžná IT fóra. Přesto však může skladba zde uvedených otázek napovědět něco o cílové skupině zákazníků Raspberry Pi a BeagleBone Black.
Najít dotazy uživatelů Raspberry Pi nedá žádnou velikou práci. Stačí prohledat libovolné obecné IT fórum a typicky narazíte na tyto starosti:
BeagleBone není zdaleka tak rozšířená platforma, dotazy je potřeba hledat na specializovanějších serverech:
Nyní už ke skutečným parametrům:
Periférie jsou využitelné přes rozšiřovací desky (Capes). Každá deska by měla obsahovat EEPROM s popisem. Podle obsahu EEPROM dokáže systém v BeagleBone načíst správný firmware. Desky mohou být připojené až čtyři.
Množství periférií obsahuje drivery přímo v kernelu. Jako příklad lze uvést třeba připojení tlakového čidla. Čidlo stačilo pouze připojit, systém je automaticky našel a údaje zviditelnil v podobě textového souboru v linuxové adresářové struktuře.
Koprocesor PRU je pomocný procesor, který dělá z BBB raketově rychlý počítač. BeagleBone obsahuje takové procesory hned dva. PRU je zkratka pro "Programmable Realtime Unit". PRU běhá na 200 MHz, obsahuje 32 registrů o šířce 32 bitů. Některé registry mohou být mapované přímo na piny procesoru. Jednoduchým zápisem do registru se tak mohou ovládat přímo vývody procesoru. PRU lze programovat v assembleru, časování lze zajistit stylem "instrukce po instrukci", nebo v jazyce C.
PRU může být použito v situacích, které vyžadují velmi přesné časování. S procesorem PRU je velmi jednoduché dosáhnout přesně načasované odezvy v řádu zlomku mikrosekund. PRU proto může sloužit například pro přesné měření vzdáleností ultrazvukovým čidlem, měření otáček, zakaznické PWM a podobně. V PRU jsou implementované realtime protokoly EtherCAT, Profine, Ethernet/IP, Profibus, HSR/PRP (ani jeden z protokolů mi nic neříká).
Každý PRU pracuje nezávisle na hlavním procesoru a na druhém PRU. Nehrozí proto například situace, že výtah řízený počítačem BeagleBone vyjede do třináctého patra dvanáctipatrové budovy, protože BeagleBone byl zrovna zaměstnaný zápisem dat do databáze s knihou jízd. S procesorem PRU zastaví výtah vždy včas.
BeagleBone obsahuje hned tři procesory v jednom.
BeagleBone Black plně nahradí desktopový počítač...
Původně se prodával BeagleBone s SD kartou, na které byla distribuce Ångstrom. S touto distribucí jsem se nezkamarádil – systém, který přišel s počítačem BeagleBone, byl přeložený bez podpory IPv6, což pro mě byla nepřekonatelná potíž. Vyzkoušel jsem proto distribuci Gentoo. Ta chodila na BeagleBone dobře, ale její instalace a udržování je úkol pro otrlé. V praxi se pak její udržování ukázalo jako takřka nemožné.
Spolu s BeagleBone Black Rev C se objevila i distribuce Debian pro BeagleBone. Distribuce je přizpůsobená počítači BeagleBone, ale ve většině aspektů se příliš neliší od distribuce pro běžný x86 server nebo desktop. Drtivou většinu instalací dnes provozují právě na distribuci Debian.
Na BeagleBone lze provozovat i distribuci Buildroot. V mnoha ohledech je instalace Buildroot stejný, ne-li horší opruz, než instalace a provozování Gentoo. Přesto má tato distribuce svůj význam, protože umožňuje vytvořit minimální obraz, který je možné provozovat i bez potřeby zápisu na disk.
BeagleBone se prodává s nainstalovanou distribucí Debian. Distribuce vlastního software proto může probíhat přes tradiční balíčky .deb a vlastní repozitáře. Údržba software po zprovoznění spočívá v prostém apt-get update; apt-get upgrade.
V systému je však od výroby množství zbytečných balíků (desktopové prostředí), které je vhodné odinstalovat. Spolu s instalací vlastních balíků tak může být příprava každého BeagleBone docela zdlouhavá. Obsah disku eMMC se dá naštěstí velmi snadno duplikovat prostřednictvím SD karty. Obraz systému se na SD kartu dostane jednoduchým dd. Karta se pak změnou jediného řádku v konfiguraci změní na instalační médium, ze kterého stačí nabootovat nový BeagleBone a obsah se automaticky nainstaluje do eMMC paměti.
BeagleBone se programuje v nejdůležitější platformě dnešní doby: LAMP (Linux – Apache – MySql – PHP).
Nyní vážně: provozovat LAMP na BeagleBone samozřejmě možné je a držím palce všem, kteří by se o to pokusili. Ale volil bych raději nějaké lehčí prostředí, přizpůsobené použitému hardware. Především bych se vyhnul databázi MySql a použil raději Sqlite. Ačkoliv je Sqlite těžko porovnatelná svými možnostmi s MySql, pro použití v embedded zařízeních je vhodnější.
Přístup "k drátům" je zajištěný přes obyčejné textové soubory v adresáři /sys. Práce aplikačního programátora proto nemusí být příliš obtížná.
Sám vytvářím embedded aplikace především v C++ a Qt. Pokud se vám podaří rozchodit akcelerovanou grafiku (přes EGLFS, X11 akcelerovaně nefunguje), je možné použít i jazyk QML a QtQuick. Tato součást Qt dovoluje napsat dobře přenositelné aplikace rychleji, než samotné C++ a Qt widgets.
Samostatnou částí je procesor PRU. Ten je programovatelný pouze v assembleru a v jazyce C. Použití PRU vyžaduje alespoň základní ponětí o programovacích technikách používaných na tak nízké úrovni (programování jedočipů). Díky spolupráci s ARM procesorem je však instrukční sada procesoru PRU jednoduchá a pochopit fungování procesoru PRU je snazší.
Pokud připojujete k BeagleBone vlastní hardware a s jeho podporou to myslíte vážně, nevyhnete se potřebě vytvořit vlastní firmware. To byl alespoň pro mě ze začátku veliký problém. Firmware je možná nevhodný název vyplývající z toho, že soubory jsou uložené v adresáři /lib/firmware. Ve skutečnosti jde o konfigurační soubor, který popisuje použité vývody, jejich nastavení a spojení s moduly v kernelu, které se starají o obsluhu hardware.
Soubor s firmware používají vlastní syntax, zcela nepodobnou čemukoliv jinému. Navíc je nutné detailně porozumět vlastnímu hadrware i způsobu, jakým použitý ARM procesor využívá a nastavuje vývody. Bariéra pro "správné" nastavení BeagleBone může být dost vysoká, při prototypové výrobě lze ale využít univrzální nastavení a soubory s firmware se nezabývat.
Výroba rozšiřovacích desek pro BeagleBone může být v některých ohledech jednodušší, než výroba desek s jednočipovými procesory. V nejjednodušším případě stačí na desku umístit dva konektory, potřebnou periferii a případně EEPROM paměť s popisem desky. Navíc byla zatím vždy většina periferií, které jsem kdy k BeagleBone připojoval, podporovaná přímo operačním sytémem.
Sám desky obvykle nenavrhuji, jsem orientovaný především na software. Pokud už jsem někdy nějakou desku navrhnul, jednalo se vždy o velmi jednoduchou záležitost. Pro návrh používám KiCad. Hotová šablona pro BeagleBone je zde k dispozici přímo v instalačním balíku aplikace.
Z jiného pohledu je však návrh desek pro BeagleBone složitější, než návrh desek s jednočipy. Výroba desek pro BeagleBone s sebou nese některé zvyklosti, které je vhodné respektovat. Deska by měla obsahovat EEPROM s popisem použitých vývodů, je třeba pamatovat na konflikty vývodů s jinými deskami a v neposlední řadě je nutné vytvořit pro desku firmware.
Pro své první pokusy s připojením vlastního hardware k BeagleBone jsem použil velmi primitivní prostředky. Ze spárů staré základní desky pro PC jsem vysvobodil spínací tranzistor a použil jej pro řízení LED.
Dostat něco ze základní desky je obtížné, desku je nutné velmi důkladně prohřát. Ze začátku jsem zvolil příliš malý nástroj a po pár nezdařených pokusech jsem musel sáhnout po něčem větším. Přitom jsem litoval, že nemám velikou klempířskou páječku nebo aspoň plamenomet.
Výsledek zcela odpovídá použitým prostředkům. Ačkoliv jde o poctivou kovářskou práci, funguje to.
Výsledkem prvních pokusů s řízením LED je deska pro řízení osmi výkonných LED (lze spínat až 4 A při napětí do 24 V). Deska obsahuje i 14 vstupů pro tlačítka či podobná zařízení (PIR čidla), sběrnici pro teploměr a hodiny reálného času. Software je dostupný pod licencí GPL.
Desku si můžete vyzkoušet i v praxi: http://weblight-demo.hobrasoft.cz
První deska, kterou jsme pro BeagleBone navrhli. Slouží pro sběr dat na fotovoltaických elektrárnách. Obsahuje čtyři sériové porty a hodiny reálného času.
Požadavky na fotovoltaických elektrárnách se časem změnily - potřeba čtyř sériových portů je minimální, zato je občas vhodné sbírat data z různých analogových čidel (osvit, teplota), z digitálních čidel (požární hlásiče, elektroměry, zabezpečení), nebo ovládat nějaké zařízení (poslat reset neposlušnému PC). Desku 4×232 jsme upravili a dva sériové porty jsme vyměnili za množství jiných periférií:
Deska s modemem LoRa pro bezdrátový přenos informací z různých sensorů.
V době přednášky byla tato deska ve výrobě a k dispozici byl pouze vygenerovaný náhled na konečnou podobu desky. Mezitím dorazily tištěné spoje a bylo možné osadit prototyp. Oproti návrhu je skutečná deska osazená jinými konektory, takže při použití této desky nelze k BeagleBone připojit další desky.
Pokud toužíte po výkonném jednodeskovém počítači za nízkou cenu, sáhněte po něčem jiném. Jde-li vám však o stabilní linuxovou platformu vhodnou i do různých embedded zařízení, BeagleBone je v současné době jedno z nejvhodnějších řešení. Díky podpoře realtime aplikací v podobě PRU procesoru se dá nasadit BeagleBone snadno i tam, kde jinak vládnou jednočipové počítače, nebo systémy typu Arduino.