Raspberry Pi jako odbiornik internetowych stacji radiowych
|
|||||||||||||||
Raspberry Pi (http://www.raspberrypi.org/) to miniaturowy komputer jednopłytkowy o bardzo dużych możliwościach. Komputer znajduje się na płycie głównej o wymiarach 8,5x5,5 cm i oprócz podstawowych złączy potrzebnych do pracy posiada również bardziej zaawansowane złącze wejść/wyjść (2x13 styków) umożliwiające bezpośrednie sterowanie dowolnymi urządzeniami zewnętrznymi. Zastosowania Raspberry Pi są praktycznie nieograniczone. Jednym z nich jest przystosowanie komputera do obioru internetowych stacji radiowych. Gotowe zestawy audio z możliwością odbioru stacji internetowych nadal nie są powszechne, a ich ceny są wysokie. Zamiast wydawać kilkaset złotych na fabryczny odbiornik radia internetowego, lepiej będzie wydać znacznie niższą kwotę na Raspberry Pi, który oprócz odbioru stacji internetowych będzie mógł robić znacznie więcej! Opisane rozwiązanie działa, ale należy zdawać sobie sprawę z jego prostoty. Sterowanie odbiorem zostało ograniczone tylko do jednego przycisku, a sam program sterujący jest napisany tylko w skrypcie powłoki. Tą konfigurację można jednak w dowolny sposób rozwijać, a szczególnie dodawać kolejne przyciski i rozwijać program sterujący. Przedstawiona konstrukcja to tylko pierwsze podejście! Podstawowe założenia konfiguracji Raspberry Pi jako radia internetowego - na karcie SD zainstalowany jest system Raspbian Wheezy - praca wyłącznie w linii poleceń, bez uruchamiania środowiska graficznego - wykorzystanie złącza I/O 2x13 do podłączenia przycisków sterujących i diod wskazujących stan urządzenia - praca na sieci przewodowej, później również na bezprzewodowej - automatyczne uruchmienie programu sterującego, obsługa radia ogranicza się do włączania kolejnych stacji Praktyczna realizacja odbiornika 1. Automatyczne logowanie użytkownika root Praca na koncie root nie jest zalecana, świadomi zagrożeń decydujemy się jednak na nią, ponieważ ułatwia m.in. dostęp do portów I/O z poziomu skryptów powłoki. Aby automatycznie zalogować użytkownika root należy edytować plik /etc/inittab. Do edycji możemy posłużyć się programem nano, który jest już zainstalowany w systemie Raspbian. Wydajemy polecenie: sudo nano /etc/inittab W pliku odnajdujemy linię: 1:2345:respawn:/sbin/getty --noclear 38400 tty1 "Komentujemy" tą linie dodając przed nią #, a poniżej dodajemy nową linię, która automatyczne zaloguje użytkownika root: 1:2345:respawn:/bin/login -f root tty1 </dev/tty1 >/dev/tty1 2>&1 Przy następnym uruchomieniu użytkownik root zostanie automatycznie zalogowany. 2. Instalacja odtwarzacza vlc i modyfikacja do pracy z konta root vlc to odtwarzacz o dużych możliwościach z opcją pracy z linii poleceń. Zakładając, że Raspberry jest podłączony do internetu, instalujemy vlc poleceniem: apt-get install vlc Zainstalowany vlc ma jednak pewną wadę - zablokowaną pracę z konta root. Usuwamy to utrudnienie przez modyfikację binarnego pliku vlc (opis tu). Zakładając, że plik znajduje się w katalogu /usr/bin (sprawdzić!) wydajemy polecenia:
cd /usr/bin Należy zwrócić uwagę, że which vlc zamkniety jest wewnątrz tzw. backticks. Po wykonaniu tego polecenia vlc nie zgłasza błędu przy uruchamianiu z konta root. 3. Konfiguracja wejść/wyjść (złącze 2x13) Do sterowania radiem wykorzystamy złącze 2x13, na które wyprowadzone są porty wejść/wyjść procesora. Dostęp do tych portów możliwy jest z poziomu skryptu powłoki (pliki i katalogi w /sys/class/gpio). Szczegółowy opis pracy z portami wejść/wyjść Raspberry Pi znajdują się tu. Szczegółowe umiejscowienie sygnałów w złączu 2x13 wygląda następująco: Rys. 2. Rozmieszczenie sygnałów w złączu 2x13. Widok z góry. Przy projektowaniu połączeń należy zwrócić uwagę, że dla płytek drukowanych w wersji 2.0 (z otworami do mocowania) rozmieszczenie sygnałów jest odmienne. Szczegóły można znaleźć w linku powyżej. Założenia do sterowania są następujące: - jeden przycisk sterujący odtwarzaniem. Naciśnięcie przycisku P1 (schemat poniżej) włącza stację. Ponowne naciśnięcie zatrzymuje odtwarzanie i jednocześnie przygotowuje do odtwarzania kolejnej stacji. Kolejna stacja zostaje włączona po ponownym naciśnięciu przycisku. Itd., itd. - drugi przycisk (P2), kontrolny, umożliwia przerwanie pracy skryptów sterujących odtwarzaniem i powrót do linii poleceń Raspberry Pi - dioda zielona D2 sygnalizuje uruchomienie skryptów sterujących radiem i gotowość do rozpoczęcia odtwarzania - dioda czerwona D1 sygnalizuje odtwarzanie stacji radiowej Rys. 3. Schemat podłączenia przycisków sterujących i diod wskazujących stan urządzenia. Sygnały GPIO2 i GPIO3 przy ustawieniu jako wejścia podłączone są przez rezystory i normalnie odczytywane są jako 1. Po naciśnięciu przycisku odczytywane są jako 0. Sygnały GPIO4 i GPIO17 są ustawione jako wyjścia. Konfiguracja wejść/wyjść odbywa się poprzez skrypt uruchamiający radio (opis w dalszej części). Do uzyskania potrzebnej konfiguracji niezbędne są następujące ustawienia:
# ustawienie GPIO2 jako wejscia Zapis i odczyt odbywa się odpowiednio przy pomocy poleceń:
# zapis do portu 4. Skrypty sterujące oraz dodatkowe pliki potrzebne do pracy jako radio internetowe Wszystkie pliki sterujące umieszczone zostały w katalogu /usr/bin (oprócz pliku uradio, który znajduję sie w katalogu /etc/init.d). Do pracy jako radio internetowe używane są następujące pliki:
Skrypt uradio Skrypt uruchamiający radio internetowe. Skrypt należy umieścić w katalogu /etc/init.d, dzięki czemu będzie automatycznie uruchamiany przy starcie systemu.
#!/bin/bash Dodanie znaku & po nazwie skryptu powoduje uruchomienie tego skryptu w tle. Taki proces nie jest widoczny w linii poleceń. Po stworzeniu pliku uradio w katalogu /etc/init.d należy pamiętać o nadaniu mu uprawnień poleceniem:
chmod 755 uradio Teraz trzeba jeszcze uaktualnić systemową listę programów, które mają być uruchamiane przy starcie systemu. W tym celu wydajemy polecenie: update-rc.d uradio defaults 99 Liczba 99 powoduje uruchomienie skryptu w ostatniej kolejności, dzięki czemu unikniemy problemu z uruchomieniem radia przed np. procesem sshd, co uniemożliwi zdalny dostęp do komputera. Gdybyśmy z jakichś powodów chcieli usunąć skrypt z listy automatycznego uruchamiania wydajemy polecenie:
update-rc.d -f uradio remove Skrypt killrad Skrypt pracuje w tle, sprawdzając regularnie czy został naciśnięty przycisk P2. Jeśli tak, to przerywa aktywne procesy odtwarzania stacji internetowych, wyłącza diody kontrolne i wraca do linii poleceń. Skrypt ten to rodzaj "hamulca bazpieczeństwa", który umożliwia powrót do linii poleceń w razie problemów:
#!/bin/bash Skrypt startrad Skrypt uruchamiający odtwarzanie stacji internetowych. Po wywołaniu skrypt uruchamia proces killvlc, który działa w tle i sprawdza stan naciśnięcia przycisku P1 w celu wyłączenia odtwarzania. Następnie skrypt włącza diodę sygnalizującą odtwarzanie, odczytuje numer stacji z pliku stacja, numer pobrany z tego pliku służy do odczytania zawartości pliku z adresami stacji i ten adres jest przekazywany do programu vlc. Odtwarzanie programem vlc następuje wyłącznie w linii poleceń:
#!/bin/bash Skrypt killvlc Skrypt umożliwia zatrzymanie odtwarzania i przejście do następnej stacji. Skrypt uruchamiany jest przez startrad i działa w tle. Po wykryciu naciśnięcia przycisku P1 zatrzymuje odtwarzanie i zwiększa liczbę w pliku stacja o 1 (aż do maksymalnej wartości, wtedy wraca do 1).
#!/bin/bash Plik stacja Plik zawiera liczbę odpowiadającą numerowi stacji do odtwarzania. Liczba ta jest modyfikowana przez skrypty sterujące. Liczba jest nastęnie używana do odczytu adresu stacji internetowej (patrz poniżej). Pliki 1, 2, 3 ... (adresy stacji radiowych) Każdy plik ma w nazwie tylko unikalną liczbę. Ilość plikow odpowiada ilości stacji do odtwarzania. Pliki muszą być nazywane (numerowane) po kolei. Przy zwiekszaniu ilości plików należy odpowiednio zwiększyć maksymalną ilość stacji w pliku killvlc (do usprawnienia). W treści pliku znajduje się TYLKO adres strumienia audio, który ma być odtwarzany. |
|||||||||||||||
Obsługa sieci bezprzewodowych w Raspberry Pi
|
|||||||||||||||
Komputer Raspberry Pi nie posiada wbudowanej obsługi sieci bezprzewodowych. Chcąc podłączyć Raspberry do sieci bezprzewodowej należy zaopatrzyć się w bezprzewodową kartę sieciową USB. Należy jednak pamiętać, że nie może to być dowolna karta. Gniazdo USB Raspberry posiada ograniczoną wydajność prądową i bezpośrednio do gniazda w komputerze można podłączać TYLKO karty o niewielkim poborze prądu (inne przez hub USB). Jedną z takich kart jest karta D-Link DWA-131. Działanie tej karty zostało potwierdzone przez użytkowników Raspberry. Podłączanie do sieci bezprzewodowej Przy wyłączonym Raspberry podłączamy kartę DWA-131 do gniazda USB. Po uruchomieniu karta zostanie automatycznie wykryta, nie jest potrzebne żadne instalowanie sterowników (przynajmniej dla Raspbien Wheezy). Karta powinna zainstalować się jako interfejs wlan0. Następnie musimy dodać kartę do listy /etc/network/interfaces. Wydajemy polecenie:
nano /etc/network/interfaces
W edytorze dodajemy polecenia:
auto wlan0 Plik wpa.conf odpowiada za konfigurację sieci. Plik ten musimy stworzyć poleceniem:
nano /etc/wpa.conf
Natępnie dodajemy do niego treść:
network={ Restartujemy Raspberry. Komputer powinien automatycznie podłączyć się do wskazanej sieci. Do zrobienia! 1. Uproszczenie skryptów - zdaję sobie sprawę z toporności skryptów sterujących. Na pewno będą poprawiane i upraszczane 2. Dodanie zdalnego sterowania, najlepiej typowym pilotem RTV. Oczywiście wszelkie prace czytelnik wykonuje na własną odpowiedzialność! Życzę miłego eksperymentowania z Raspberry Pi! Dodatkowe informacje (wszystkie w jęz. angielskim): Skarbnica wiedzy na temat Raspberry Pi Tu kupisz Raspberry Pi 10 sposobów wykorzystania Raspberry Pi Opracował: Marek Sawistowski; wersja 1.0; 29.09.2012 |
|||||||||||||||