Raspberry Pi 2 Model B – pierwsze wrażenia i uruchomienie

Udało się – paczka z nowiutkimi Raspberry Pi 2 model B dotarła szybko i mogłem od razu przejść do testowania. Zamówienie złożyłem 2 lutego 2015 roku w polskim oddziale RS Components i już po dwóch dniach paczka przyjechała – wg listu przewozowego z niemieckiego centrum dystrybucji.

Sama paczka – nic specjalnego, bąbelkowa koperta syngowana logiem RS, w środku kartonik z maliną, dokument wydania z magazynu i to wszystko.

Problem na start – zapomniałem czytnika microSD!

Tak, zapomniałem, że nowa malina (2 oraz wcześniejsza B+) mają złącze microSD. Dzięki czemu karta pamięci nie jest już tak wystającym elementem urządzenia, aczkolwiek wyróżnia się 2-3 milimetry poza obrys płytki PCB. Szkoda, że nie ukryli tego całkiem. Z rozwiązaniem mojego problemu przyszedł czytnik kart microSD w przenośnym modemie LTE – wystarczy podłączyć kablem urządzenie do komputera, włączyć i oprócz internetu z karty GSM pojawia się karta pamięci wśród urządzeń dostępnych w Windowsie/Linuksie/OSXie.

Instalacja Rasbiana – standardowa procedura

Tutaj nic nikogo nie zaskakuje. Ja wybrałem opcję instalacji pełnego rasbiana (nie przekonałem się do NOOBS). Ściągnąłem paczkę ZIP o wielkości niespełna 1GB, rozpakowałem (ISO to już 3GB, więc karta 4GB jako minimum jest potrzebna) i z poziomu windowsa 7 i aplikacji Win32DiskImager zainstalowałem dystrybucję na karcie pamięci.

Problem numer dwa – nie mam dostępu do routera ani monitora z HDMI

A więc nie mam jak dowiedzieć się jaki IP ma moja malinka. I tutaj z pomocą przychodzi eLinux.org, gdzie dokładnie opisane jest co należy zrobić, żeby mieć zawsze świeżą informację o IP urządzenia. W Rasbianie zadziałało rozwiązanie alternatywne (opisane pod w/w linkiem), czyli modyfikacja pliku: /etc/rc.local. Instalację Raspberry Pi bez klawiatury opisałem tutaj.

Problem numer trzy – nie mam dostępu do partycji linuksowej na Raspberry

Żeby wykonać działania opisane w powyższym punkcie, trzeba wyedytować plik jeden z plików startowych na partycji linuksowej. I tutaj (w przypadku użytkowników windowsów) pojawia się mały problem, ponieważ na karcie pamięci (po instalacji dystrybucji poprzez Win32DiskImagera) pojawia się partycja BOOT (system plików windowsowy) oraz partycja linuksowa z katalogami systemu plików. Żeby się do niej dostać, to trzeba poszukać narzędzia dla windowsa, które pokaże nam taki system plików (istnieją managery katalogów) lub (wg mnie bardziej eleganckie rozwiązanie) uruchomić z pendrive dowolną dystrybucję linuksa w wersji LIVE.

Problem numer trzy – wykonałem wszystkie powyższe działania i nie dostałem maila z IP Raspberry Pi

zabezpieczenie google

Na potrzeby powyższego ćwiczenia założyłem konto email w gmailu. Swoje prv konta mam zabezpieczone dodatkowym pinem oraz wolałem nie zmniejszać ich poziomu zabezpieczeń wpisując jawnym tekstem hasło w konfigurację maliny. Wykonałem wszystkie powyższe czynności i nic. Cisza. Okazuje się, że gmail ma dodatkowe zabezpieczenie, które nazywa parametrem ‚Dostęp dla mniej bezpiecznych aplikacji’. Na szczęście po chwili przychodzi mail, trzeba wejść w ustawienia konta google i zmienić na ‚Dozwolony’. Po tym ponownie uruchomić RPi i cieszyć się otrzymanym IP na email.

rpi2_4core

RPi2 działa i cieszy mnie informacją o 4 rdzeniach. Na dniach będę testować szerzej wydajność oraz na drugiej sztuce stawiać RaspBMC. 

pocket #3: ESP8266, nettemp i rozszerzenie z Modulowo.pl, extroot dla TL-MR3020, RF69 i inne moduły radiowe oraz oświetlenie choinkowe na Raspberry Pi

Oto kolejna część projektów, które zapisałem w swoim pockecie, jako ciekawe i interesujące. W poprzednim wpisie poruszałem tematykę programowania MSP430 poprzez Launchpad, AVR bez IDE Arduino, zegarka LED oraz elektronicznej wagi WIFI – może ktoś z Was znajdzie dla siebie coś inspirującego.

1) Wykorzystanie modułu ESP8266 jako zdalnego czujnika temperatury (i np.: podłączenie do Raspberry Pi z nettemp) – podobnie jak Techfreak niedawno nabyłem moduł ESP8266, który nie dość, że jest interfejsem WIFI-RS232, to do tego posiada procesor i pamięć EEPROM, które można programować. Wystarczy zasilacz, w/w moduł i czujnik 18b20, żeby stworzyć w pełni autonomiczną czujkę temperatury. Idealne i bardzo tanie rozwiązanie. Mam nadzieję wkrótce pochwalić się wynikami zabawy. Modułowo przysłało rozszerzenie do nettemp dla Raspberry Pi (w wersji bez +), Raspberry Pi czeka w gotowości (drugie pracuje jako XBMC podłączone do telewizora) – jest co robić. Na temat wykorzystania ESP8266 więcej znajdziecie na blogu import <hack>.

2) Odnalazłem swój stary router TP-LINK TL-MR3020, w którym w końcu zdecydowałem się zrobić Extroot’a, czyli rozszerzyć pamięć flash o dodatkowy pendrive. Operacja się udała. Router ma wgrany soft Gargoyle, zrobionego Extroota na pendrive 8GB, zamontowaną zewnętrzną antenę oraz wyprowadzone złącze RS232. Na własne nieszczęście zamontowałem wcześniej antenę, a dopiero niedawno piny RSu. Ponieważ nie chciałem robić kolejnych otworów w obudowie, to zdecydowałem się na piny kontowe. W konsolce sprawdzałem – komunikacja działa. Trzeba tylko pamiętać, że w większości takich routerów RS232 jest w standarcie TTL 3,3V.

2014-12-23 01.48.01

3) Kolejny nabytek, który w końcu do mnie dojechał (oczywiście zamawiany z Hong Kongu czy okolic na ebay.com) jest moduł RFM69 – pewnie w pierwszej kolejności zostanie podłączony do Raspberry Pi. Ogólnie nazbierałem trochę różnych interfejsów komunikacyjnych i chciałbym większość rozkminić oraz porządnie opisać budowanie na nich sieci MESH (wiele urządzeń komunikujących się między sobą). Czekają na to wspomniane już RF69, a oprócz nich RFM73, MAX485 (przewodowy RS485 – pętla prądowa), ESP8266 (RS232-WIFI), tanie układy na 433MHz (czasem oznaczane jako TK0460, fs1000, etc), również oparte o częstotliwość 433MHz moduły 24L01+ oraz moduł GSM SIM900A.

4) Z uwagi na Święta koniecznie zerknijcie na spory i bardzo estetyczny projekt oświetlenia choinkowego oparty o Raspberry Pi. Często przy takich projektach lubię popatrzeć jakich autor użył technik w kodzie źródłowym oraz obserwować dyskusję pod samym artykułem. Społeczność to najlepsze wsparcie rozwojowe dla projektów autora. W powyższym projekcie wydaje mi się, że komentarze to 1/3 całego projektu.

ps: Jak już wiecie konkurs na MSP430 rozwiązany – dzięki wszystkim za udział. Paczki wysłane poleconym priorytetem – jest szansa, że poczta ich nie zgubi oraz że szybko dotrą na miejsce. Przypominam wygranym, że mam jeszcze LCD dla osoby, która zrobi fajny projekt na otrzymanym module i się z nami nim podzieli.

ps2: Z okazji Świąt życzę Wszystkim spokojnego i radosnego czasu z rodzinami, przyjaciółmi i znajomymi. Niech to będzie czas, który poświęcicie najbliższym osobom – elektronika i projekty poczekają. Moje życzenia składam Wam w swoim i mojej rodziny imieniu! No i do poczytania w przyszłym roku 2015!

family

tania płytka stykowa do Raspberry Pi

To, że Raspberry Pi jest bardzo fajnym systemem do łączenia niskopoziomowej elektroniki z oprogramowaniem wysokopoziomowym (linux + np.: Python) wiadomo już od dawna. Ja jednak miałem niewielki problem z korzystaniem ze złącza GPIO, ponieważ jest to zwykły dwurzędowy goldpin. Podłączyłem sobie co prawda uniwersalną płytkę stykową, ale 26 przewodów (część się dubluje, więc faktycznie kilka mniej) często się myli i nie zawsze jest przyjemne w użyciu.

płytka stykowa RPi

Zamówiłem niezbędne podzespoły i bardzo tanim kosztem rozbudowałem RPi o uniwersalne złącze z płytką stykową. Całość zamknęła się w okolicy 10zł, więc naprawdę tanio.

Co jest potrzebne:
– podwójne złącze (gniazdo) do goldpinów (2x13pin) – całe 2x40pin kosztuje w okolicy 4-5zł,
– kawałek płytki uniwersalnej (ja wykorzystałem fragment płytki uniwersalnej nr 14 od komele.eu),
– pojedyncze złącze (gniazdo) do goldpinów (1x26pin lub 2x13pin) – całe 1x40pin kosztuje w okolicy 4-5zł,
– goldpiny proste oraz goldpiny kątowe (po 1x26pin) – koszt ~2zł,
– cienki drucik,
– uniwersalna płytka stykowa (długość 17pin) – na ebay można kupić poniżej 1$.

Ponieważ realizacja takiej płytki jest nad wyraz prosta, to postanowiłem wrzucić tylko zdjęcia bez zbędnego opisu. Mam nadzieję, że zainspiruje i przyda się koncepcja takiego rozwiązania:)

[nggallery id=6]

instalacja raspberry pi oraz pierwsza konfiguracja (ssh, vnc, sieć, hostname)

Żeby Raspberry Pi zaczęło z nami rozmawiać i zachowywać się w sposób kontrolowany najlepiej zadbać na początku tej fascynującej przygody. W niniejszym wpisie powiem jak zainstalować PRi na karcie SD (przy wsparciu Ubuntu 12.10), uruchomić pierwszy raz oraz skonfigurować ssh i vnc, żeby było łatwiej zarządzać zabawką.

Starcie pierwsze – Raspberry Pi nie uruchamia się!

Tak, lekko stresujące było to, że włożyłem niby skonfigurowaną kartę SD i nic. Świeciła się jedna czerwona dioda, a miało mrugać, śpiewać i tańczyć. Z lekką paniką zacząłem dłubać w sieci i znalazłem info, że może mam niekompatybilną kartę, albo upalone RPi. Na szczęście trafiłem też na stronę, na której sugerowano, że może coś nie zadziałało przy tworzeniu obrazu na SD. Był to strzał w 10!

W moim przypadku sposób opisany na stronie: engadget.com nie zadziałał. Znalazłem na jednym z forów opis narzędza ImageWriter (dostępne w repozytoriach standardowo podpiętych w ubuntu). Kilka klików i zacząłem wgrywać ponownie obraz. W moim przypadku narzędzie miało problem z komunikatami na przyciskach oraz nie informowało o postępie zapisywania obrazu. Na początku znalazłem jakieś cudomagiczne rozwiązanie pozwalające obserwować na konsoli co się dzieje, ale w kolejnych podejściach (2-3 razy rozwaliłem system zaraz na początku i łatwiej było postawić obraz na nowo) olałem podglądanie i po zapuszczeniu tworzenia obrazu odczekałem około 2 minut na zapis (aż przestał dysk intensywnie migać diodą sygnalizując odczyt).

Oczywiście ISO najlepiej ściągnąć stąd: http://www.raspberrypi.org/downloads

imagewriter

ImageWriter – wybranie obrazu ISO oraz urządzenia, na którym będzie zainstalowany obraz.

Ostrzeżenie o tym, że karta SD zostanie wymazana. Jeśli używacie dysku USB, to uważajcie, żeby wybrać właściwe urządzenie.
imagewriter3

Obraz się generuje – niestety brak informacji o postępie zapisu. Widać również jakiś błąd, który występował na moim komputerze (tłumaczenia przycisków).

Dodatkowo warto sprawdzić czy operacja przebiegła poprawnie. Jeśli ktoś lubi okienka, to za pomocą dowolnego programu do partycjonowania (u mnie GParted) można sprawdzić jak wygląda zapisana karta – mniej więcej powinna wyglądać tak, jak poniżej:

gparted-sd

 

Raspberry Pi startuje, czyli podstawowa konfiguracja

Może słabo szukałem, ale do pierwszego uruchomienia RPi raczej potrzebna jest przynajmniej klawiatura oraz monitor lub telewizor z HDMI. Ja podłączyłem do TV oraz włączyłem. Przy uruchamianiu listują się kolejne elementy uruchamiane przez system, następnie pojawia się tekstowe okno Raspi-config (możliwe do wywołania też później z poziomu konsoli za pomocą polecenia sudo raspi-config):

raspi-config

W zasadzie przez większość pozycji trzeba się przeklikać:

expand_rootfs – rozszerza partycję podstawową do pełnego rozmiaru karty SD. Domyślnie obraz instaluje się na niecałych 2GB, więc warto tą operację zrobić. Ewentualnie można później tworzyć osobne partycje /home oraz swap, ale uznałem że dla własnych działań nie widzę potrzeby zaawansowanego dłubania w obrazie partycji.

configure_keyboard – najpierw wybieramy rodzaj klawiatury (zwykle std 105 klawiszy), a następnie kodowanie – tak, jest polski, jeśli ktoś potrzebuje.

change_pass – zmienia hasło użytkownika ‚pi’. I tak za kilka chwil skasujemy to konto, ale warto zmienić. Szybciej później się przeklikuje.

change_locale – zmiana domyślnego kodowania oraz języka. U siebie zmieniłem na pl_PL UTF8.

change_timezone – jak kto woli, ale ja wybrałem Europę i Warszawę:)

memory_split – ilość pamięci dostępna dla grafiki (domyślnie 64MB) – nie ruszałem – pozostała pamięć i tak jest na wypasie.

ssh – włączamy demona SSH – zdecydowanie przydatne (po restarcie nie będzie potrzebny monitor).

boot_behaviour – ustawienie czy mają domyślnie ładować się X’y. Oczywiście, że nie – szkoda zasobów. Po starcie można je wywołać poleceniem ‚startx’, zaś podłączenie się do VNC uruchamia je automatycznie.

– update można zrobić później.

Konfiguracja sieci przewodowej w Raspberry Pi

Konfigurację sieci polecam od polecenia:

sudo nano /etc/network/interfaces

i zmianie linijki: iface eth0 inet dhcp na iface eth0 inet static oraz dopisaniu poniżej:

address 192.168.YY.XX (gdzie YY to zwykle 0 lub 1 – zgodnie z naszą siecią oraz XX to nr IP urządzenia – najlepiej poza zakresem DHCP ustawionym na routerze)
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1 (jeśli wyżej YY = 1, to zwykle tutaj XX też będzie 1)

Doprecyzowania wymaga jeszcze edytor NANO, który jest bardzo prosty w obsłudze. W konsoli nie działają skróty CTRL+C lub +V, ale odpowiednikami są SHIFT+CTRL+C oraz +V. Działa również poruszanie kursorem strzałkami, przycisk DELETE oraz BACKSPACE i SPACJA. Po wprowadzeniu zmian wciskami CTRL+X (chcąc wyjść). Program pyta się czy na pewno oraz czy chcemy wprowadzić zmiany (oczywiście, że tak), więc zmieniamy i w kolejnym kroku pyta o nazwę – czasem na końcu dopisuje .jakiesrozszerzenie, więc trzeba je skasować i ENTER. Prościzna.

Kolejnym krokiem jest polecenie: sudo nano /etc/hostname – tutaj nadajemy swoją nazwę hosta (domyślnie jest raspberrypi).

Ja jeszcze wrzuciłem na swoim komputerze: sudo nano /etc/hosts – i dopisałem linijkę: 192.168.1.67 rpi1, gdzie rpi1 jest identyczną nazwą, jak hostname w RPi – łatwiej mi zapamiętać, gdy w komputerze, żeby się połączyć do RPi wpisuję tylko ssh rpi1 (dlaczego tak krótko o tym za chwilę / ważne, żeby wpis host zrobić u siebie na komputerze, a nie na RPi). Na koniec jeszcze na komputerze jedno polecenie: sudo /etc/init.d/networking restart i mamy hosty odświeżone.

Konto użytkownika, czyli jak uprościć sobie życie w Raspberry Pi

Żeby połączyć się poprzez ssh wystarczy wpisać: ssh -l pi rpi1, ale to dla mnie trochę za długo. Ja założyłem sobie na RPi takiego samego użytkownika jak mam na komputerze, dzięki temu nie muszę w poleceniu ssh używać parametru -l oraz nazwy użytkownika (to rozwiązanie działa, ale tylko jeśli na komputerze również jest system z rodziny linux).

Dodanie nowego usera: sudo useradd NAZWA_USERA oraz dodanie użytkownika do grupy sudoers: sudo nano /etc/sudoers, gdzie trzeba dopisać linijkę: NAZWA-USERA   ALL=(ALL:ALL) ALL oraz zmienić: pi ALL=(ALL) NOPASSWD: ALL na NAZWA_USERA ALL=(ALL) NOPASSWD: ALL.

Po wyjściu i zapisaniu restart platformy i wszystko powinno ładnie działać. W międzyczasie można jeszcze skasować konto ‚pi’ poleceniem sudo userdel pi oraz ustawić sobie hasło dla roota: sudo passwd (przydaje się przy używaniu polecenia su).

Pełnia szczęścia z Raspberry Pi, czyli tryb graficzny oraz serwer VNC dla okienkolubnych

W przypadku podłączenia RPi do monitora na stałe warto sobie w konfiguratorze raspi ustawić domyślne odpalanie Xów. Gdyby jednak takie działanie było sporadyczne oraz do systemu chcemy się podłączać przez VNC, to wystarczy pamiętać o poleceniu startx, które z poziomu konsoli (po zalogowaniu użytkownika) uruchomi tryb graficzny.

Ja czasem lubię grafikę, a do TV nie uśmiecha mi się biegać, więc postanowiłem na RPi uruchomić server VNC. Konfiguracja jest prosta jak budowa cepa i została ładnie opisana tutaj: malinowepi.pl, czyli: sudo apt-get install tightvncserver, edycja: sudo nano /etc/init.d/tightvncserver i wpisanie pliku z wymienionej strony (trzeba pamiętać o zmianie użytkownika ‚pi’ na swojego) oraz następnie: sudo chmod 755 /etc/init.d/tightvncserversudo update-rc.d tightvncserver defaults. Domyślny port VNC to 5901.

Ja od razu w wywołaniu (starcie servera) dopisałem parametry: su $USER -c ‚/usr/bin/tightvncserver :1 -geometry 800×600 -depth 16’, gdzie ustawiłem rozdzielczość oraz głębię kolorów (wg mnie więcej nie potrzeba – szkoda transferu).

Dodatkowo spotkałem się z tym, że server czasem nie ma ochoty się podnieść, więc trzeba: sudo pkill Xtightvnc, a następnie: sudo /etc/init.d/tightvncserver start. Po tym drugim poleceniu system może zapytać o hasło do VNC. Należy je podać i od razu powinno połączenie działać. Spotkałem się jeszcze z tym, że czasem w pliku /etc/init.d/tightvncserver widnieje użytkownik ‚pi’, wtedy wystarczy sudo nano /etc/init.d/tightvncserver, edycja, zapisanie i restart servera.

rpi_vnc

Polecam również aplikację ‚htop’ (sudo apt-get install htop), która z poziomu konsoli (a więc i przez ssh) umożliwia podgląd obciążenia i procesów na RPi. Miłej zabawy i napiszcie czy i jakie Wy spotykaliście problemy po drodze.

ps: przy tworzeniu wpisu pomógł też artykuł na blogu: blog.vokiel.com.

sterowanie GPIO Raspberry Pi z poziomu przeglądarki internetowej (strony www)

Raspberry Pi posiada 8 dowolnie programowalnych linii I/O + UART (port szeregowy) + I2C + SPI (do wykorzystania również jako zwykłe piny IO). Wszystko (wraz z liniami zasilającymi oraz masy) wyprowadzone na złącze P1 (jest jeszcze kilka linii I/O na innych portach, ale o nich kiedy indziej + nie do wszystkich jest łatwy dostęp).

Ponieważ dostęp do w/w linii jest bezpośredni, to można (i jest nawet wskazane) podłączać różne urządzenia do tego portu, zaś sterowanie rozwiązać np.: poprzez stronę internetową.

Oczywiście dla wytrawnych programistów dostępnych jest cała gama języków programowania + biblioteki umożliwiające prosty dostęp do I/O. Zaś dla osób mniej obeznanych (oraz takich jak ja, czyli dopiero wchodzących w świat języków wysokiego poziomu) na początek zaleca się skorzystanie z gotowych lub pół-gotowych rozwiązań.

I tutaj przychodzi na ratunek WEBIOPI, czyli framework oraz aplikacja webowa pozwalająca na kontrolowanie liniami GPIO z poziomu przeglądarki internetowej.

Instalacja jest bardzo prosta. Konfiguracja również. Pozostaje tylko ustawienie własnego portu, na którym można apkę wypuścić na świat + przekierowanie na routerze i można się bawić.

Bardziej rozbudowany opis webiapi można znaleźć na stronie: http://pccode.pl/raspberry-pi-i-zestaw-duzego-masterkowicza/, gdzie jest przy okazji opis jak podłączyć diody LED poprzez układ ULN.

Pełen opis portów oraz przykłady kodów sterujących nimi dostępny jest tutaj: http://elinux.org/Rpi_Low-level_peripherals. Co ciekawe, przykładowe kody rozpisane są na języki (i powłokę) sh, C, Perl, C#, Ruby i Basic.

Kolejnym ciekawym rozwiązaniem jest podłączenie RPi i zarządzanie nim poprzez port szeregowy. Opis można znaleźć tutaj: http://elinux.org/Rpi_Low-level_peripherals. W sumie port RS można wykorzystać również w drugą stronę (i o ile nie mamy innego portu RS w domu), to przy pomocy tego z RPi odratować na przykład router, który po „update” przestał odpowiadać po protokole http.

RPi to nie tylko 3 w/w interfejsy. Wystarczy chwilę pokombinować i już mamy 1Wire, a na nim zegary RTC, pamięci eeprom, czujniki temperatury i inne gadżety od Dallas… tfu… Maxim Integrated. W projekcie: http://techfreak.pl/nettemp/ wykorzystanych zostało kilka czujników DS18B20, które nie wymagają kalibrowania i posiadają względnie dobrą dokładność.

Na koniec jeszcze opis kolegi Spychalskiego: http://www.spychalski.info/2013/01/12/obsluga-magistrali-i2c-raspberry-pi z manualem do obsługi magistrali I2C. Co prawda w projekcie wykorzystany jest jakiś przetwornik A/C, ale nic nie stoi na przeszkodzie, żeby podłączyć kilka PCF8574, który da nam n x 8 (każdy układ to expander i2c na 8bit) portów I/O dodatkowo.