Raspberry Pi – pierwsze starcie

Raspberry Pi

Raspberry Pi to pełnowartościowa, małowymiarowa platforma komputerowa oparta na procesorze ARM. Została stworzona przez Raspberry Pi Foundation. RPi jest „komputerem” wielkości karty kredytowej, posiada złącza USB, HDMI, RJ45, czytnik kart SD. Założeniem fundacji była budowa całkiem wydajnego zestawu przy maksymalnie niskich kosztach, docelowo RPi w wersji B miało kosztować $35.

Stworzono dwie wersje: A i B. Różnica między nimi to tylko: ilość portów USB (A – 1xUSB, B – 2xUSB), oraz brak RJ45 w przypadku modelu A. W chwili obecnej można zamówić tylko model B. Z racji swojej oryginalnej nazwy urządzenie funkcjonuje często pod potoczną nazwą „Malina”

Specyfikacja

Urządzenie oparte jest na układzie Broadcom BCM2835 SoC, w skład którego wchodzi procesor, procesor graficzny oraz pamięć RAM:

  • ARM1176JZF-S 700 MHz
  • VideoCore IV GPU (1080p, h.264/MPEG-4)
  • 256MB RAM

Poza tym mamy do dyspozycji szereg portów i złącz:

  • 2 x USB 2.0
  • HDMI, RJ45
  • czytnik SD / MMC / SDIO
  • Composite RCA
  • wyjście audio – 3,5mm jack

Złącza:

  • GPIO
  • UART
  • szyna I²C
  • szyna SPI

Do zasilania tego urządzenia należy zaopatrzyć się w zasilacz 5V (końcówka MicroUSB), minimum 700mA. Pobór prądu jak można się łatwo domyśleć jest bardzo niski – około 2W.

Koszt i zamówienie

Fundacja Raspberry Pi rekomenduje dwa sklepy, które prowadzą sprzedaż międzynarodową, są to: Premier Farnell/Element 14 oraz RS Components.

W moim przypadku, koszt zamówienia wraz z przesyłką wyniósł około 160zł brutto za sztukę (przy zamówieniu czterech sztuk).

Niektórych to zmartwi, ale w przesyłce będzie tylko samo Raspberry Pi, nie ma karty SD, a nawet zasilacza. Każde rozszerzenie należy kupić we własnym zakresie, a może być tego sporo: karta pamięci, zasilacz, myszka, klawiatura, kabel HDMI, kabel sieciowy, hub USB z zewnętrznym zasilaniem, karta WiFi na USB, dysk USB lub pendrive itd.

Szybki start

Malina jest dość popularnym rozwiązaniem w swoim segmencie, nie jest oczywiście jedynym. W związku z dużą popularnością w sieci znajdziemy multum informacji, porad, przykładów zastosowań, programów. Punktem startowym jest pobranie systemu operacyjnego, są specjalnie przygotowane przez samą fundację dostępne na stronie http://www.raspberrypi.org/downloads. Jako, że moim głównym systemem jest Fedora, postanowiłem pobawić się Debianem, w związku z tym pobrałem obraz Raspbian “wheezy”. Prędkość pobierania torrenta oraz ilość udostępniających osób tylko potwierdza dużą popularność.

Przygotowanie karty

Po pobraniu obrazu należy go przenieść na kartę pamięci. W pierwszej kolejności, przed podłączeniem karty sprawdzamy listę urządzeń, np za pomocą df -h.

vokiel@def ~$ df -h
System plików          rozm. użyte dost. %uż. zamont. na
rootfs                  108G   15G   93G  14% /
devtmpfs                3,9G     0  3,9G   0% /dev
tmpfs                   3,9G  1,4M  3,9G   1% /dev/shm
tmpfs                   3,9G  820K  3,9G   1% /run
/dev/sda2               108G   15G   93G  14% /
tmpfs                   3,9G     0  3,9G   0% /sys/fs/cgroup
tmpfs                   3,9G     0  3,9G   0% /media
/dev/sda3               206G   69G  128G  35% /home
/dev/mapper/truecrypt1  374G  251G  104G  71% /media/truecrypt1

Następnie podłączamy kartę i ponownie wywołujemy polecenie df, nowy wpis na liście wskazuje na naszą kartę pamięci, w moim przypadku było to /dev/sdc1, które pojawiło się na końcu poprzedniej listy.

Karta pamięci może posiadać kilka partycji, wtedy każda z nich pokaże się osobno. Gdy już znamy lokalizację karty odmontowujemy ją korzystając z polecnia umount.

vokiel@def ~$ umount /dev/sdc1

W tym momencie przystępujemy do faktycznego przeniesienia obrazu systemu na kartę SD, użyjemy programu dd – służącym do niskopoziomowego kopiowania i konwersji surowych danych. Należy zwrócić szczególną uwagę na właściwe podanie parametrów, w przypadku pomyłki możemy nadpisać, a przez to stracić ważne dane. Składnia w moim przypadku wyglądała następująco:

vokiel@def ~$ sudo dd bs=1M if=/home/vokiel/Downloads/rpi/2012-07-15-wheezy-raspbian.img of=/dev/sdc1

Parametr bs to rozmiar bloku w pojedynczej operacji odczytu, parametr if to źródło (input file), natomiast of to cel (output file). Wykonanie tego polecenia zajmie chwilę – 1,8GB danych do przeniesienia na kartę, dużo zależy od jej prędkości zapisu.

Niestety program dd domyślnie nie wyświetla żadnego postępu, przez co oczekiwanie bez widocznych postępów jest irytujące. Aby podejrzeć jak sobie radzi skorzystamy z drugiej konsoli, w której wyszukamy proces dd, a następnie za pomocą polecenia kill spowodujemy, że dd zacznie odpowiadać:

vokiel@def ~$ pgrep -l '^dd$' #sprawdzamy id procesu
vokiel@def ~$ sudo watch -n 5 kill -USR1 20326

W konsoli, w której uruchomiliśmy program dd powinniśmy zacząć otrzymywać informacje o postępach.

Po zakończeniu kopiowania dobrze jest zrobić synchronizację dysku z pamięcią, dzięki temu będziemy mieli pewność, że dane zostały fizycznie zapisane na karcie. Do tego celu służy program sync:

vokiel@def ~$ sync

Dostępne są też instrukcje dla systemu Windows jak i Mac OS X: RPi Easy SD Card Setup

Pierwsze uruchomienie

Przygotowaną kartę pamięci wkładamy do czytnika RPi, myszka, klawiatura, monitor, na koniec podłączamy zasilanie (u mnie świetnie się sprawdza ładowarka od Nokii – 5V, 1200mA). Malina nie ma włącznika, zatem włączenie/wyłączenie odbywa się odpowiednio poprzez podłączenie/odłączenie zasilania. Po podłączeniu na ekranie pojawia się coś zbliżonego do tego:

Następnie pojawia się możliwość zalogowania do systemu. Domyślny login i hasło dostępne są na stronie pobierania, dla Debiana „Wheezy” to pi z hasłem: raspberry. Konto root nie ma hasła, zatem po zalogowaniu do systemu należy zmienić te dla pi (lub dodać nowe konto) oraz ustawić hasło superużytkownika.

Przy pierwszym uruchomieniu pojawia się możliwość dokonania wstępnej konfiguracji systemu:

Standardowo mamy zainstalowane i skonfigurowane środowisko graficzne, uruchamiamy je poleceniem startx

W taki oto sposób mamy działający komputer ze środowiskiem graficznym. Niestety szybkość działania i responsywność nie jest na najwyższym poziomie. Jednak jak na taką cenę oraz koszty użytkowania (bardzo niski pobór prądu) i przy takiej miniaturyzacji otrzymujemy na prawdę wiele. Z pewnością nie zastąpi nam desktopa/notebooka, ale jako dodatkowe narzędzie może zdziałać wiele.

Początkowa konfiguracja

Jako, że jest to blog webdeveloperski, to RPi w pierwszej konfiguracji zostało przetestowane pod kątem serwera www. Aby ułatwić sobie pracę skonfigurujmy system.

pi@raspberrypi ~$ uname -a
Linux raspberrypi 3.1.9+ #168 PREEMPT Sat Jul 14 18:56:31 BST 2012 armv6l GNU/Linux

W pierwszej kolejności ustawiamy hasło konta root, a następnie dodajemy swojego użytkownika i usuwamy domyślnego pi (lub przynajmniej zmieniamy mu hasło).

pi@raspberrypi ~$ sudo passwd root
pi@raspberrypi ~$ sudo adduser vokiel
Dodawanie użytkownika "vokiel"...
Dodawanie nowej grupy "vokiel" (1002)...
Dodawanie nowego użytkownika "vokiel" (1001) w grupie "vokiel"...
Tworzenie katalogu domowego "/home/vokiel"...
Kopiowanie plików z "/etc/skel" ...
Proszę podać nowe hasło UNIX: 
Proszę ponownie podać hasło UNIX: 
passwd: hasło zostało zmienione
Zmieniam informację o użytkowniku test
Wpisz nową wartość lub wciśnij ENTER by przyjąć wartość domyślną
        Imię i nazwisko []: Vokiel
        Numer pokoju []: 
        Telefon do pracy []: 
        Telefon domowy []: 
        Inne []: 
Czy informacja jest poprawna? [T/n] T

Możemy też użyć komendy useradd

Dodajemy użytkownika do sudoersów:

pi@raspberrypi ~$ su
Hasło:
root@raspberrypi: /home/pi# echo "vokiel ALL=(ALL:ALL) ALL" >> etc/sudoers

Przelogowujemy się na nowe konto, następnie usuwamy użytkownika pi

vokiel@raspberrypi ~$ sudo userdel pi

Następnie konfigurujemy adres IP. Najwygodniejszy jest stały, który możemy ustawić np poprzez router – rezerwacja IP lub ustawiając w systemie RPi. Wybrałem drugą opcję, dzięki czemu połączenie sieciowe startuje szybciej – nie musi czekać na przydzielenie adresu z DHCP. Przy okazji zmieniłem też nazwę hosta na rpi. Po ustawieniu statycznego adresu mój pli konfiguracyjny wygląda następująco:

vokiel@rpi ~ $ cat /etc/network/interfaces
auto lo
iface lo inet loopback
 
#iface eth0 inet dhcp #zakomentowana domyślna konfiguracja
iface eth0 inet static
        address 192.168.1.254
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.100

Dzięki temu, możemy wyłączyć RPi, odpiąć monitor, klawiaturę, myszkę i podpiąć gdzieś koło routera, a resztę prac wykonywać zdalnie przy pomocy ssh (demon domyślnie uruchomiony).

Aby logowanie na zdalną maszynę z naszego komputera przebiegało sprawniej dodajemy IP Maliny do listy /etc/hosts. Dzięki temu będziemy mogli logować się za pomocą komendy ssh vokiel@rpi

root@def /# echo "192.168.1.254 rpi" >> /etc/hosts

Aby nie było trzeba wpisywać hasła przy każdym logowaniu, możemy posłużyć się kluczami. Kopiujemy swój za pomocą ssh-copy-id:

vokiel@def ~ $ ssh-copy-id vokiel@rpi

Pierwsze logowanie przy użyciu kluczy – nie trzeba podawać hasła:

vokiel@def ~$ ssh vokiel@rpi
The authenticity of host 'rpi (192.168.1.254)' can't be established.
RSA key fingerprint is aa:1a:25:1e:d7:fd:d9:03:73:65:5c:74:ef:9f:1d:62.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'rpi,192.168.1.254' (RSA) to the list of known hosts.
Linux rpi 3.1.9+ #168 PREEMPT Sat Jul 14 18:56:31 BST 2012 armv6l
 
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
 
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
 
Type 'startx' to launch a graphical session
 
Last login: Sat Aug 11 19:20:20 2012 from def
vokiel@rpi ~ $

Jeśli lokalnie jesteśmy zalogowani na koncie o tej samej nazwie co konto zdalne, to wystarczy przy logowaniu podać nazwę hosta:

vokiel@def ~$ ssh rpi

Przydział pamięci

Jako, że nie planuję korzystać z graficznego interfejsu, zmniejszyłem przydział pamięci dla grafiki:

vokiel@rpi ~ $ sudo cp /boot/arm224_start.elf /boot/start.elf

Po restarcie widzimy, że dostępnej pamięci jest trochę więcej (a i użytej nie tak dużo):

Serwer www

Debian na pokładzie, zatem instalację serwera www możemy przeprowadzić korzystając ze standardowego apt-get install. Oczywiście, możemy też pokusić się o kompilację, co w przypadku ograniczonych możliwości RPi ma duży sens. Niestety kompilacja nodejs w moim przypadku trwała ponad 2 godziny, aby na koniec rzucić błędem. Ponieważ chciałem jak najszybciej uruchomić pierwszy skrypt, skorzystałem z pakietów.

Sprawdzamy źródła w /etc/apt/sources.list, następnie aktualizujemy bazy.

vokiel@rpi ~ $ cat /etc/apt/sources.list
deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi
vokiel@rpi ~ $ sudo apt-get update
vokiel@rpi ~ $ sudo apt-get install nodejs npm
vokiel@rpi ~ $ sudo npm install nodeinfo

Tworzymy prosty skrypt pokazujący info o serwerze:

#!/usr/bin/node 
 
var http = require('http');
var os = require('os');
var url = require('url');
var serverIp = '192.168.1.254';
var serverPort = '8080';
 
function addStyle(res){
  var style = "";
  style += '<style type="text/css">';
  style += "\n body { font-size: 10px; font-family: Verdana, Arial, Tahoma; background: #fff;}";
  style += "\n table {collapse: collapse;} ";
  style += "\n table thead tr th { font-weight: bold;} ";
  style += "\n table tr td { border-bottom: 1px solid silver; vertical-align: top; padding: 5px 20px;}";
  style += "\n</style>";
 
  res.write(style);
}
function getRemoteAddr(req){
  return req.headers['x-forwarded-for'] || req.connection.remoteAddress;
}
function log(msg){
  var now = new Date();  
  var log = now.toUTCString();
  log += "\t" + msg;
  console.log(log);
}
 
http.createServer(function (req, res) {
  log(getRemoteAddr(req) + "\t" + req.headers['user-agent']);
 
  res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
 
  res.write('<html><title>Raspberrypi nodejs server</title><meta charset=utf-8">');
  addStyle(res);
  res.write('<body>');
 
  res.write('<h2>Client</h2>');
  res.write('<table><thead><tr><th>var</th><th>value</th></tr></thead><tbody>');
  res.write('<tr><td>User-agent: </td><td>' + req.headers['user-agent'] + '</td></tr>');
  res.write('<tr><td>IP: </td><td>' +  getRemoteAddr(req) + '</td></tr>');
  res.write('</tbody></table>');
 
  res.write('<h2>Server</h2><table><thead><tr><th>var</th><th>value</th></tr></thead><tbody>');
 
  Object.keys(os).map(function(method) { 
        if ( method != 'getNetworkInterfaces' ){
                 res.write('<tr><td>' + method + "</td><td><pre>"+JSON.stringify(os[method]())+'< /pre></td></tr>'); 
        }
  })
  res.write('</tbody></table>');
  res.write('</body></html>');
  res.end();
 
}).listen(serverPort, serverIp);
 
log('Server running: ' + serverIp +':'+serverPort);

Uruchamiamy i sprawdzamy wynik w przeglądarce

vokiel@rpi ~ $ node server.js
Sat, 11 Aug 2012 18:30:10 GMT   Server running: 192.168.1.254:8080
Sat, 11 Aug 2012 18:30:14 GMT   192.168.1.103   Opera/9.80 (X11; Linux x86_64; U; pl) Presto/2.10.289 Version/12.00

Voila! Działający serwer www, pobierający mniej niż 2W prądu. Wystarczy przekierować port na r0outerze i mamy własnego, taniego vps’a 😉 jeśli mamy stały IP, to już całkiem bajka.

Przy ciągłej pracy, pod dużym obciążeniem RPi zaczyna się wyczuwalnie grzać, ale wystarczy mały radiator, aby temperatura spadła do akceptowalnego poziomu.

Podsumowanie

RPi to bardzo ciekawe rozwiązanie, z dnia na dzień powstają nowe pomysły na jego wykorzystanie. Skupia przy osbie dużą społeczność, która jest bardzo aktywna. Do dyspozycji mamy blogi, fora, a nawet dedykowany miesięcznik „The MagPi issue”. Na głównej stronie raspberrypi.org pojawia się szereg infromacji o projekcie, nowości, przykłady zastosowań etc. Na dzień dzisiejszy RPi jest wykorzystywany na wiele sposobów, ciągle pojawiają się nowe. Jedne idą bardziej w kierunku automatyki, inne oprogramowania, multimediów. Popularność projektu powoduje, że powstają dedykowane RPi porty różnych aplikacji, dzięki temu można wycisnąć z Maliny jeszcze więcej.

 

Przeczytaj także

Komentarze: 3

Dodaj komentarz »

 
 
 

[…] przez nodejsDodano w: Raspberry Pi | przez Vokiel | 0 Komentarzy »http://raspberrypi.orgW poprzednim wpisie dotyczącym Raspberry Pi pokazałem co należy zrobić aby uruchomić na nim system oraz […]

 

Odpowiedz

instalacja raspberry pi oraz pierwsza konfiguracja (ssh, vnc, sieć, hostname) | przezmodem.pl
 

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

 

Odpowiedz

 

This is very interesting, You’re a very skilled blogger. I have joined your feed and look forward to seeking more of your great post. Also, I’ve shared your website in my social
networks!

 

Odpowiedz

 

Dodaj komentarz

 
(nie będzie publikowany)
 
 
Komentarz
 
 

Dozwolone tagi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
© 2009 - 2016 Vokiel.com
WordPress Theme by Arcsin modified by Vokiel