Technologia ARM i Raspberry Pi

rasberry_arm

Technologia ARM jest wszechobecna w naszym codziennym życiu. Procesory ARM napędzają nasze smartfony, tablety, urządzenia satelitarnej nawigacji czy elektroniczne czytniki książek.

Uważam, że warto mieć tę technologię na oku. Chciałbym pokrótce wyjaśnić, dlaczego, prezentując jej szczególnie ciekawego przedstawiciela, jakim jest SBC (Single-board Computer) Raspberry Pi.

Architektura ARM

ARM Ltd to firma powstała w 1990 roku, która tworzy małe, tanie i energooszczędne procesory klasy ARM (Advanced RISC Machine). Dane z roku 2011 pokazują, że wyprodukowano aż 7.9 miliarda procesorów ARM, tym samym pokrywając 95% rynku smartfonów, 90% twardych dysków, 40% cyfrowych telewizorów i dekoderów STB (set-top box), 15% mikrokontrolerów i 20% komputerów przenośnych. Co ciekawe, ARM Ltd sama nie wyprodukowała ani jednego z tych procesorów. Ich model biznesowy…

Nie, spokojnie. Stop.

Naprawdę miałem szczery zamiar przedstawić tu opis architektury ARM.

Naprawdę wierzę, że warto się jej przyglądać. Oprócz dominacji na rynku urządzeń konsumenckich, ARM agresywnie atakuje rynek serwerowy: firmy produkujące serwery ARM mocno pracują nad swoimi produktami i dostają dofinansowanie sięgające dziesiątków milionów dolarów (np. Calxeda , Tilera); producenci serwerów stawiający dotychczas głównie na architekturę intelowską coraz częściej zwracają się ku ARM (np. Dell czy HP); giganci internetu, jak Facebook, przymierzają się do przejścia na wykorzystanie data center opartych o ARM. Nawet Microsoft tworzy wersję Windows na tę platformę.

Naprawdę chciałem przekonywać, że dla nas, software’owców jest to istotne zagadnienie, bo nowe platformy nie są zgodne z ich intelowymi odpowiednikami (np. wspomniany wyżej Windows RT nie jest kompatybilny z Windows 8) i może zaistnieć konieczność „tłumaczenia” czy pisania od nowa wielu aplikacji.

Ale w końcu pomyślałem, że bez względu na to, jak długo i namiętnie bym o tym pisał, moja żona i tak nie uwierzy, że dokonany przeze mnie zakup Raspberry Pi – komputera opartego o ARM – to część dobrze przemyślanego i konsekwentnie realizowanego eksperymentu mającego na celu poszerzenie i ugruntowanie poważnej wiedzy. Ona nadal będzie twierdzić, że to tylko zachcianka, kolejna zabawka, gadżet….

Nie poczyta też za wielkie osiągnięcie, kiedy uda się, poprzez napisanie krótkiego programu, zamrugać ledowymi diodkami, pokręcić jakimś silniczkiem czy wyświetlić na ekranie stan czujnika temperatury.

Uwierzycie!?

W każdym razie:

  1. zdając sobie sprawę z bezowocności mych tłumaczeń,
  2. mając świadomość, że w sieci istnieją już niezłe artykuły opisujące technologię ARM,
  3. mając mocne przekonanie, że dla większości z nas dużo ciekawszy (niż wykład teoretyczny) będzie opis działającego, małego, łatwo dostępnego urządzenia o bogatych możliwościach,

proponuję, żebyśmy przeszli do sedna, czyli prezentacji Raspberry Pi.

Raspberry Pi

Raspberry Pi to mały (mieszczący się na dłoni) komputer zaprojektowany tak, aby dawać jak najwięcej możliwości przy bardzo dostępnej cenie. Wymyślony przez Fundację Raspberry Pi – brytyjską organizację charytatywną – miał służyć uczniom do nauki programowania (Python, Scratch), a jego układy wejściowe/wyjściowe wykorzystane miały być do sterowania urządzeniami zewnętrznymi.

Mój Rasberry Pi – świeżo po rozpakowaniu
Rasberry Pi – w ubranku 🙂

 

Dodatkowo, niski pobór mocy otwiera możliwości zastosowania Pi w robotyce. Z kolei sprzętowa akceleracja przetwarzania wideo (kodeki h.264, MPEG-4 AVC, MPEG-2, VC-1) i obsługa Full HD sprawiają, że Pi to atrakcyjny kąsek w rozwiązaniach typu domowe kino czy Media Center.

Ale uporządkujmy.

Napiszę najpierw kilka słów o tym, czym fizycznie jest Raspberry Pi (procesor, wyjścia, itp.). Następnie pokażę jego możliwości na przykładzie kilku typowych – mniej lub bardziej 😉 – zastosowań. Żeby nie nikogo nie zanudzić, celowo przedstawię informacje o charakterze „zajawki” – zachęcając do dalszego samodzielnego zgłębiania zagadnienia. Na koniec zaproponuję kilka tematów związanych z Pi, które moim zdaniem są na tyle ciekawe, by w przyszłości omówić je dokładniej na łamach naszego bloga.

Sprzęt

Raspberry Pi (dalej zamiennie będę określał go również jako Raspi, Pi, Rasberry), jak już pisałem, to niewielki jednopłytkowy komputer. Jego wymiary to 85.60 mm × 53.98 mm, przy wadze 45 gramów.

Pi występuje w dwóch odmianach: Model A i Model B. Ich pełna specyfikacja i opis dostępne są na stronach fundacji i wikipedii. Ja skupiam się na modelu B, ponieważ ma większe i ciekawsze możliwości.

Raspberry Pi zasilany jest napięciem 5V poprzez gniazdo micro USB, czyli takie, przez które zazwyczaj ładujemy nasze smartfony.

Sercem systemu jest układ Broadcom BCM2835, który zawiera 512MB RAMu, procesor graficzny (GPU) oraz procesor  ARM1176JZF-S
taktowany zegarem 700MHz. Co ciekawe, bardzo łatwo – przy pomocy prostej konfiguracji – da się „podkręcić” procesor aż do 1GHz.

Pi nie posiada wbudowanego dysku twardego. W zamian używa karty pamięci SD, którą wykorzystuje do załadowania systemu operacyjnego i do przechowywania danych. Oczywiście, dane można składować również na podłączonych zewnętrznych dyskach HDD, jednak oficjalnie, proces bootowania odbywać musi się z karty SD.

Z urządzeniami zewnętrznymi możemy połączyć się przy pomocy gniazd:

  • HDMI lub RCA – do monitora lub telewizora,
  • słuchawkowego – do… no, do słuchawek :-),
  • ethernet – podłączenie do sieci LAN,
  • USB – klawiatura, mysz, twardy dysk lub inne urządzenia.

Specjalnie zaprojektowany zestaw połączeń GPIO (General Purpose Input/Output) pozwala na wysyłanie i odbieranie sygnałów cyfrowych, komunikację przez terminal szeregowy UART, szeregowy interfejs SPI, czy magistralę I2C. To z kolei pozwala na sterowanie zewnętrznymi urządzeniami (np. silnikami, wyświetlaczami), odczytywanie stanu czujników (np. światła, temperatury) i budowanie automatyki.

Porzućmy na razie trudne skróty. Sprawdźmy, co potrzebne jest, by zacząć działać z Raspi.

Uruchomienie

Raspberry Pi nie jest może typowym urządzeniem Plug-n-Play, ale w moim przypadku doświadczenie było podobne: włożyłem kartę SD, podłączyłem Pi przez kabel HDMI do monitora, podpiąłem się kablem ethernetowym do sieci, podłączyłem klawiaturę i mysz do łącz USB, włączyłem zasilacz… i po chwili widziałem już ekran uruchamiania systemu.

Raspbian w akcji

Ja akurat kupiłem wszystkie te elementy w zestawie, łącznie z kartą SD odpowiednio sformatowaną i przygotowaną (z wgranym systemem operacyjnym). Zdecydowałem, że tak będzie wygodniej i szybciej. Ale nawet jeśli ktoś miałby zaczynać wszystko od zera – kompletować kable, samodzielnie spreparować kartę z systemem – nie stanowiłoby to większego problemu. Naprawdę jest to proste. Poza tym internet jest bogaty we wszelkiego rodzaju poradniki.

Działanie

Na Raspberry Pi uruchamiać można różne systemy operacyjne, głównie „linuksopochodne”, np. Arch Linux, RISC OS, Debian. Moim zdaniem najłatwiej jest zacząć zabawę wykorzystując dedykowaną wersję Debiana o nazwie Raspbian. Jest to dystrybucja zoptymalizowana pod kątem Raspi i zawiera komplet narzędzi niezbędnych do pracy z PI, w tym sterowniki i interfejs graficzny.

Raspbian zawiera przeglądarkę internetową, kilka gier (wraz z kodem źródłowym, by stanowiły od razu przykład, jak takie gry pisać), edytor tekstu, środowiska do programowania (Python, Scratch).

Dodatkowo, Raspberry Pi Foundation utrzymuje repozytorium, przy pomocy którego łatwo można wyszukiwać i instalować nowe oprogramowanie oraz aktualizować istniejące.

Trzeba uczciwie powiedzieć, że sam interfejs graficzny Raspberry Pi nie jest demonem szybkości. Pozwala on jednak na uruchamianie gier, programów, odtwarzaczy mediów, które działają całkiem przyzwoicie.

Jak może wyglądać Raspberry Pi w działaniu? Za chwilę kilka przykładów.

Zastosowania

Edukacja

Raspberry Pi stanowić miał platformę edukacyjną – urządzenie i oprogramowanie pozwalające na naukę programowania. W dużej mierze to założenie zostało spełnione. Do oficjalnej dystrybucji systemu operacyjnego dołączono kompilator i środowisko wytwórcze języka Python.

Python to dynamiczny język programowania, który ma zwięzłą i czytelną składnię. Łatwo można się go nauczyć, a jego biblioteka standardowa daje programiście”z pudełka” dużo przydatnych narzędzi. Dlatego używany jest w wielu dziedzinach, takich jak tworzenie aplikacji webowych, aplikacji serwerowych, „naukowych”, desktopowych czy gier. Jest na przykład jednym z najczęściej wykorzystywanych przez inżynierów firmy Google języków do budowania ich produktów (YouTube, Google App Engine).

scratchKolejnym ważnym elementem jest tutaj plarforma Scratch.

To proste w obsłudze graficzne środowisko pozwala na łatwe tworzenie interakcji. Programowanie odbywa się poprzez układanie sekwencji graficznych bloków kontrolnych (akcje, operacje, powtórzenia, warunki). Dzieciaki, bo głównie do nich adresowany jest Scratch, mogą tworzyć animacje i gry.

Jako ciekawostkę przytoczę dokonanie 7-letniego Philipa, który stworzył swoją pierwszą grę na Rasbery Pi właśnie przy użyciu Scratch:

Domowe centrum rozrywki

Raspberry Pi nie ma żadnego problemu z odtwarzaniem plików w Full HD, czyli w rozdzielczości 1080p. Raspi obsługuje sprzętowe dekodowanie popularnych rodzajów plików wideo, w tym standard H.264 będący najpopularniejszym sposobem kodowania większości materiałów HD i Full HD (np. pliki z rozszerzeniem .MKV). Darmowe oprogramowanie XMBC może zmienić Pi w domowe centrum rozrywki.

XBMC odtwarza niemal każdy typ popularnych formatów audio i video. Świetnie wyglądający interfejs programu (patrz wyżej) przystosowany jest do wyświetlania na dużym ekranie telewizora, a do obsługi programu wystarczy pilot. Aplikacja została również zaprojektowana jako odtwarzacz sieciowy. Pozwala zatem na odtwarzanie materiałów z każdego miejsca w domu lub bezpośrednio z internetu.

Dokładniejszy opis oraz więcej przykładowych obrazków znaleźć można na tych stronach.

Air Play

Ta funkcja znana jest dobrze miłośnikom gadżetów spod znaku nadgryzionego jabłuszka.

AirPlay umożliwia bezprzewodowe, strumieniowe przesyłanie materiałów z urządzenia z systemem iOS do telewizora HD i głośników — za pośrednictwem urządzenia Apple TV. Jak chwali się na swoich stronach producent, Apple TV „kosztuje tylko 479 zł.”.

Zanim jednak popędzimy do najbliższego salonu, by skorzystać z tej hojnej oferty, warto rozważyć wykorzystanie Raspberry Pi. Wspomniany wcześniej XMBC jest klientem AirPlay, co oznacza, że może w dużym stopniu (XBMC wspiera w tej chwili wersję 1.0 standardu AirPlay) zastąpić Apple TV. Zarówno dźwięk, filmy, jak i zdjęcia odtwarzane są płynnie, a urządzenia Apple rozpoznają XBMC tak, jak każde inne urządzenie z AirPlay.

Retro gaming

river raidOsoby, które z nostalgią wspominają czasy starych dobrych 8-bitowych maszyn (Atari, Commodore, Spectrum) lub konsol do gier (Atari 2600, Nintendo, Gameboy), znajdą też coś dla siebie.Na Raspberry dostępne są emulatory tych komputerków, które pozwolą nam zagrać w takie szlagiery jak Bruce Lee, River Raid, Tetris, Jet Set Willy, BombJack, Spy vs Spy i wiele, wiele innych…
Kolejnym źródłem takich gier jest MAME, emulator automatów do gier. Nie wiem, czy ktoś jeszcze pamięta te ogromne pudła, z ekranem, joystickiem, „guzikami” i takimi przebojami, jak Pac-Man, Donkey Kong, Street Fighter… Dzięki MAME można odświeżyć sobie te wspomnienia. Dla mnie szczególnie imponującym przykładem jest „automat” zbudowany przez jednego z entuzjastów Raspberry Pi. Myślę, że obrazek po prawej mówi sam za siebie :-).

Minecraft

Ta gra jest dla mnie fenomenem. Nie ma porażającej grafiki – powiedziałbym nawet, że wprost przeciwnie… W zasadzie nie ma ściśle zdefiniowanego celu. Mimo to zyskała sobie wielu zwolenników na całym świecie i osiągnęła ogromny sukces komercyjny.

Znam zarówno dzieci, jak i dorosłych, którzy nie tylko chętnie długimi godzinami grają w Minecraft, ale także pieczołowicie śledzą w sieci newsy, porady i różne filmiki o grze.

W największym skrócie: gracz porusza się tu w trójwymiarowym świecie zbudowanych z różnego rodzaju jednakowej wielkości sześcianów (ziemia, kamień, piasek, woda, drewno i wiele, wiele innych). Może on budować konstrukcje z takich „klocków”, ale również niszczyć czy „kopać”, np. w poszukiwaniu diamentów czy tworzenia podziemnych tuneli. Do dyspozycji gracza jest wiele przedmiotów (łopata, topór, miecz, itp.), a świat zamieszkują różne mniej lub bardziej przyjazne istoty.

I to w zasadzie tyle.

Myślę, że to właśnie brak narzuconego celu powoduje, że Minecraft jest tak lubiany. Graczy ogranicza tylko ich wyobraźnia. Jest jeszcze aspekt społeczny. Minecraft pozwala wielu użytkownikom grać razem na na wspólnym serwerze. Dzięki temu gracze mogą współpracować, wymieniać się dobrami, czy razem rozbudowywać swój świat.

Tym, którzy Minecraft znają, nie muszę tłumaczyć, o co chodzi. Tym, którzy go nie znają, może być trudno to zrozumieć J. Chyba trzeba spróbować samemu.

Producenci Minecraft najwyraźniej także poczuli „ducha Raspberry Pi” i stworzyli wersję swojej gry na to urządzenie – oczywiście „skrojoną” pod jego możliwości. Z samą grą dostarczyli API w Pythonie i Javie z licznymi przykładami. API pozwala na budowanie własnych funkcjonalności i rozbudowę świata Minecraft. Można na przykład pisać skrypty, które w jednej chwili tworzą ogromne budowle, przemieszczają gracza w dowolną lokalizację, tworzą labirynt czy nawet działający zegar wielkości porządnego domu.

Dzięki temu mamy kolejną zachętę dla młodych ludzi do nauki programowania.

Urządzenie sieciowe

Dzięki niewielkim wymiarom i dostępności interfejsu ethernet jest niezłym kandydatem do budowania różnego sortu rozwiązań sieciowych. Może być to własny hot spot Wi-Fi, prosty domowy serwer FTP, serwer multimediów czy dedykowana maszyna do obsługi pobierania danych z Torrentów. Ciekawym rozwiązaniem z tej rodziny może być prywatna „chmura” – „ciut” uboższa odmiana popularnej usługi DropBox. ownCloud, bo o niej tu mowa,  jest aplikacją webową, pozwalającą na uniwersalny dostęp do plików (dokumenty tekstowe, wideo, muzyka i zdjęcia). Jest też platformą, która pozwala na przeglądania i synchronizację kontaktów, kalendarzy i zakładek (aka „ulubione”) na różnych urządzeniach (komputer, smartfon, tablet). Podstawowe funkcjonalności wzbogacono o wbudowaną galerię zdjęć i możliwość przeglądania dokumentów (PDF, ODF) oraz odtwarzania mediów bezpośrednio w przeglądarce.

Automatyka/robotyka/sterowanie

Jest coś magicznego w przekroczeniu granicy między światem wirtualnym (oprogramowania) a światem rzeczywistym. Zestaw wejść i wyjść ogólnego przeznaczenia, w który zaopatrzono Raspberry Pi, daje taką możliwość poprzez sterowanie urządzeniami zewnętrznymi, na przykład silnikami, czujnikami, kamerami, fotodiodami, wyświetlaczami. Nagle okazuje się, że przy pomocy kilku komend można sprawić, żeby coś się naprawdę DZIAŁO.


Moje szczytowe osiągnięcie – mrugająca dioda! Ta-dam!

Z Raspberry Pi mamy tutaj wiele możliwości: od prostych układów, poprzez zdalnie sterowane pojazdy jeżdżące (np. Raspberry Tank – obrazek poniżej) i latające, roboty, do zaawansowanej automatyki domowej.

Na koniec jeszcze jeden projekt z obszaru sterowania urządzeniami zewnętrznymi, który wyróżnia się swoją niekonwencjonalnością:

Podsumowanie

Starałem się pokazać różne pomysły na wykorzystanie Raspberry Pi. Myślę, że już na podstawie tej zgrubnej listy widać, iż to urządzenie ma wiele możliwości. Pomijając nawet jego oczywiste zalety, jak parametry techniczne, mały rozmiar, łatwość współpracy z urządzeniami peryferyjnymi i możliwość „umobilnienia” (podłączenia pod przenośne źródło zasilania i do bezprzewodowej sieci) – Raspberry Pi pobudza wyobraźnię i zachęca do eksperymentowania.

Jestem posiadaczem Raspberry od kilku tygodni. Ten czas był ciekawy, bo musiałem przypomnieć sobie trochę „starych” informacji i zdobyć nową wiedzę. Ale w moim przypadku jest też niesłychanie ważny aspekt, o którym chciałbym tu powiedzieć. Jestem ojcem ciekawego świata 10-latka. Widzę, jak Raspberry Pi stymuluje jego pomysłowość. Poczynając od budowania nowych obudów z klocków Lego, poprzez tworzenie skryptów w Scratch, do snucia planów i projektów wykorzystania różnego rodzaju urządzeń peryferyjnych. Pomysły te są często z kategorii „kosmicznych”. Wtedy mam okazję wytłumaczyć, dlaczego coś jest niemożliwe pod względem technicznym albo nieopłacalne czy trudne organizacyjnie. Są też takie, które na pewno zrealizujemy: karmnik dla ptaków, który robi zdjęcie, kiedy pojawi się w nim gość czy samochód zdalnie sterowany poprzez stronę WWW (a najlepiej przekazujący jeszcze transmisję wideo z przejazdu na żywo!). W każdym razie mamy wyjątkową okazję do wspólnego rozwoju, dzielenia hobby, snucia planów i spędzania wolnego czasu.

Po tej małej pigułce informacyjnej i zachwalaniu „na sucho”, będę chciał dalej przekonywać, że Raspberry Pi to ciekawe urządzenie. Z tym, że teraz chciałbym robić to w praktyce. Jak wspomniałem na wstępie, chciałbym zaproponować do wspólnego „przerobienia” na łamach tego bloga kilka zastosowań. Myślę, że mogłyby to być zagadnienia „całkiem serio”:

  • Instalacja środowiska uruchomieniowego Java – czy Raspi „udźwignie” programy pisane w Javie?
  • Wykorzystanie Raspberry Pi jako serwera usług sieciowych, np. z wykorzystaniem WSO2 Application Server (gdzie będziemy mogli zobaczyć czym jest wspomniany produkt WSO2, jak i możliwości Pi).
  • Uruchomienie „poważnego” serwera aplikacyjnego – może IBM WebSphere?
  • Machine to Machine, czy Smart Cities to tematy od których my, informatycy, w niedalekiej przyszłości nie uciekniemy. Włączenie Raspbery Pi do Internetu Rzeczy (Internet of Things) przy pomocy jakiegoś lekkiego protokołu komunikacyjnego mogłoby stanowić dobry pretekst do „zahaczenia” o te obszary.
  • Sprawdzenie możliwości uruchamiania aplikacji w modelu containerless, np. przy pomocy frameworka Vert.x.

Warto byłoby też chyba poruszyć tematy może mniej poważne, ale za to chyba bardziej „namacalne”. Mam na myśli interakcję ze światem zewnętrznym. Prostym przykładem byłoby wyświetlanie komunikatów (np. powiadomienia o nowych e-mailach) na wyświetlaczu LCD. Bardziej ambitnym zadaniem będzie na pewno kontrolowanie za pomocą Raspberry zdalnie sterowanego samochodu. Streaming wideo z podłączonej do Pi kamery internetowej – zagadnienie, jak się wydaje, samo w sobie proste – mógłby znaleźć sporo zastosowań. Synteza mowy to kolejna ciekawa zabawka. Może udałoby się zrobić takie małe urządzonko odczytujące na bieżąco wiadomości przychodzące z Twittera czy ogłaszające wystąpienie krytycznego wyjątku w logach serwera. Pomysły można by mnożyć…

W każdym razie mam nadzieję, że udało mi się czytelników bloga choć trochę tematem zainteresować.

Jeśli tak, to do zobaczenia!


O Karol Brejna

Pracuję w branży IT od roku 2000. W tym czasie brałem udział w wielu złożonych i wymagających projektach, w których pełniłem szereg ról (m. in. programista, główny projektant, architekt). Jako architekt, szczególnie lubię wzbogacanie naszego "zestawu narzędzi" o nowe technologie i produkty - poczynając od baz danych NoSQL (np. MongoDB, Redis, Neo4j), na kompletnych pakietach SOA kończąc (np. WSO2).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *