
Główne założenia:
- Mamy starą, nieużywaną płytę Raspberry Pi pierwszej generacji;
- Płyta leży na szafie jako martwy ciężar i nie jest używana — płyta „Cegła”;
Czego byśmy chcieli:
- W pewnym momencie (na przykład w zależności od nastroju)
płyta przestaje być „Cegłą” i wkładamy w nią magiczną kartę pamięci; - Do płyty podłączony jest kabel Ethernet i wtyczka od zwykłego głośnika domowego lub słuchawek;
- Po podłączeniu zasilania były „Cegła” — śpiewa
Główna idea:
- Minimalna liczba ruchów do jakiejkolwiek konfiguracji, w idealnym przypadku podłączamy tylko kabel „Ethernet”, zasilanie i głośniki, i więcej nic nie robimy, w ogóle „zupełnie”;
- Były „Cegła” z pudełka obsługuje na przykład 20 stacji radiowych internetowych, przełączanie których w kółko można zrealizować za pomocą kliknięcia kółkiem myszy lub na określonym pinie GPIO (podłączyć dwa przewody i je połączyć (moje marzenie z dzieciństwa));
- Sterowanie odbywa się przez kanał radiowy, a tym kanałem radiowym może być zwykła myszka radiowa;
- Wziąć już gotowy system, zbudować dystrybucję w „Yocto Project”
tj. jak zwykle nic nie będziemy robić, bo wszystko już zostało zrobione.
(wystarczy tylko umieścić zewnętrznego obserwatora po drugiej stronie „Telewizora”);
Opis
Najprostszy Internetowy Głośnik Radiowy „KODI”
Zestaw przeznaczony dla starych płyt Raspberry Pi 1
(kurzących się gdzieś na szafie, ale które są jeszcze gotowe do pracy)
Domyślnie używany jest z listy m3u8 12 internetowych stacji radiowych.
Zakłada się, że płyta działa bez wyjścia HDMI, a do jej wyłączenia wystarczy wyjąć zasilacz z gniazdka. A jako ultra nowoczesny bezprzewodowy pilot, możesz użyć swojej super myszki radiowej (lub podłączyć zwykłą szaro-czarną mysz z kablem).
Po włączeniu interfejs sieciowy domyślnie konfigurowany jest przez protokół DHCP i odtwarzana jest ostatnia zapamiętana stacja radiowa z listy, a regulacja głośności odbywa się za pomocą zwykłej myszy:
(nadaj swojej myszy w końcu status „szefowej sterowania” i gratuluj jej, zasłużyła na to)
kółko do przodu - zwiększ głośność
kółko do tyłu - zmniejsz głośność
długie naciśnięcie (3 sekundy i więcej) prawego przycisku myszy - wybór następnej stacji radiowej
długie naciśnięcie (3 sekundy i więcej) lewego przycisku myszy - wybór poprzedniej stacji radiowej
Aby dodać swoje własne listy internetowych stacji radiowych
zawsze możesz podłączyć kabel HDMI do telewizora
i skorzystać z domowego interfejsu graficznego Kodi 17.6
(wyłącz płytę, podłącz HDMI i włącz zasilacz)Główne menu Kodi => „Dodatki” => „Moje dodatki”
=> „Klienci PVR” => „PVR IPTV Simple Client”
Początkowa implementacja
(możliwa)
Początkowo, gdy postanowiłem stworzyć „Internetową Kolumnę Radiową”, planowałem następujące:
- Minimalistyczny rozkład konsolowy w Yocto Project;
- Strumień audio odtwarzany przez GStreamer;
- Interfejs sieciowy konfigurowany przez DHCP;
A takie rozwiązanie ma szereg zalet:
- Wystarczająco szybkie (czas do osiągnięcia stanu roboczego od momentu zasilania 30-40 sek);
- Wystarczająco niezawodne (mniej programów, mniej punktów awarii);
- Rozkład konsolowy jest znacznie łatwiejszy do przekształcenia w tryb tylko do odczytu
tzn. programy nic nie zapisują na głównym systemie plików
(a system plików na nośniku SDHC jest moim zdaniem pierwszym kandydatem do awarii);
Uwaga:
W Yocto można stosunkowo prosto przeprowadzić konwersję systemu plików rootfs w tryb tylko do odczytu, zmieniając jeden parametr podczas budowy.
Z pudełka Yocto oferuje dwa warianty:
1) Praca systemu plików w standardowym trybie odczyt/zapisywanie
(tak działają wszystkie dystrybucje ogólnego przeznaczenia, na przykład Ubuntu)
2) Praca systemu plików w trybie tylko do odczytu
(tak działają specjalistyczne dystrybucje, na przykład w routerach)
W trybie tylko do odczytu wszystkie katalogi, do których zwykle
zapisuje się dane aplikacji i usług podczas pracy, są montowane
w pamięci operacyjnej (na przykład katalog \/var\/log itp.)
Dane te są aktualne tylko w trakcie bieżącej sesji pracy i po
wyłączeniu zasilania dane są tracone.
Jeśli w projekcie Yocto podczas budowy wskażesz użycie "read only",
po budowie Twoja dystrybucja będzie skonfigurowana w trybie tylko do odczytu,
możesz jednak zawsze dodać możliwość dynamicznej konwersji
z "read only" na "read/write", ale to już zupełnie inna historia ...
I jedna główna wada:
„Muszę to zrobić” to znaczy, że muszę poświęcić N ilość wieczorów
(zwykle po pracy, a to jest najbardziej nieefektywny czas, wtedy mózg już nie myśli, zwykle śpi)
A poza tym, mój poprzedni artykuł na Habra był o centrum multimedialnym projekt
i możliwość kontynuacji w tym samym duchu przezwyciężyła mój badawczy zapał. O tym w następnej rozdziale.
Przemiana Kodi w internetowy głośnik radiowy
Aby dodać pożądaną mi funkcjonalność, dodam jeszcze jedną metodę do przepisu budowy dystrybucji opisanego w poprzedniej zobacz plik berserk-image.bb
GUI_SETTINGS = "home/root/.kodi/userdata/guisettings.xml"
# konfiguracja uruchamiania ostatnio wybranego kanału TV (1-tło 2-przedni plan)
F1_LINE = "0"
R1_LINE = "1"
# konfiguracja wyjścia dźwięku, zawsze podłączony tylko analogowy wyjście audio
F2_LINE = "PI:HDMI"
R2_LINE = "PI:Analogue"
# ponieważ HDMI domyślnie nie jest używane, dezaktywuję automatyczne aktualizacje
# bo może się zdarzyć, że zasilanie było wyłączone, a dane nie zostały zapisane
F3_LINE = "0"
R3_LINE = "2"
# metoda odpowiada za dodawanie konfiguracji:
# która przekształca "Inteligentny telewizor" w "zwykłą kolumnę radiową Internetu"
add_radio_guisettings() {
sed -i "s|${F1_LINE}|${R1_LINE}|" ${IMAGE_ROOTFS}/${GUI_SETTINGS}
sed -i "s|${F2_LINE}|${R2_LINE}|" ${IMAGE_ROOTFS}/${GUI_SETTINGS}
sed -i "s|${F3_LINE}|${R3_LINE}|" ${IMAGE_ROOTFS}/${GUI_SETTINGS}
}
FIND_STR = "touch ./tmp/.FIRST_RUN."
SCRIPT_FIRST_RUN = "etc/init.d/first-run.sh"
# ponieważ wyjście HDMI może nie być używane,
# konieczne jest wyłączenie "powitania startowego"
off_kodi_welcome() {
sed -i "s|${FIND_STR}|#&|" ${IMAGE_ROOTFS}/${SCRIPT_FIRST_RUN}
}
Metody są przeznaczone do modyfikacji systemu plików root przed utworzeniem obrazu dystrybucji w postaci jednego pliku raw, który jest zapisywany na karcie pamięci za pomocą polecenia dd
Robi się to w ten sposób:
ROOTFS_POSTPROCESS_COMMAND += „add_radio_guisettings; off_kodi_welcome;”
W skrócie, w głównym pliku konfiguracyjnym Kodi 17.6 zmienia się „trzy elementy”
- Konfiguracja uruchamiania ostatnio wybranego kanału TV;
- Konfiguracja wyjścia dźwięku, zawsze podłączony tylko analogowy wyjście audio;
- Wyłączenie automatycznych aktualizacji;
- Uwaga:
Jedyna rzecz, z którą miałem trudności, to to, że musiałem także wciągnąć plik bazy danych w formacie sqlite => TV29.db, w którym wskazuje się aktualny odtwarzany kanał TV (ponieważ domyślnie żaden z kanałów nie był wybrany), a przez konfigurację xml w Kodi tego nie da się zrobić.
W bardziej szczegółowy sposób sekwencja działań dla każdego punktu:
1) Naciśnij ikonę „zębatki” w lewym górnym rogu ekranu
i wybierz punkt „Ustawienia PVR i TV” (obraz telewizora z dwoma antenkami)
następnie w lewej części menu wybierz punkt „Odtwarzanie”, a w centralnej sekcji „Ogólne”
wskaź w rozwijanej liście „Kontynuuj od ostatniego kanału przy uruchomieniu”
wybierz ustawienie „Przedni plan”
lub bardziej zrozumiale:
"Ustawienia PVR i TV"
=> "Odtwarzanie"
=> "Kontynuuj z ostatniego kanału przy uruchomieniu" => "Na pierwszym planie"
2) Kliknij ikonę „zębatki” w lewym górnym rogu ekranu i wybierz opcję:
"Ustawienia systemowe"
=> "Rozszerzenia" => "Aktualizacje" => "Nigdy nie sprawdzaj aktualizacji"
3) Kliknij ikonę „zębatki” w lewym górnym rogu ekranu i wybierz opcję:
"Ustawienia systemowe"
=> "Audio" => "Urządzenie wyjściowe dźwięku" => "PI: Analogue"
Jak przez dwa lata źle oglądałem telewizję.
Muszę przyznać, że przez dwa lata nie nauczyłem się właściwie oglądać telewizji.
Zwykle oglądam telewizję w kuchni. Do telewizora podłączona jest płytka Raspberry Pi 2B, a do płytki złącza Ethernet i HDMI. Zasilanie płytki jest dostarczane przez zwykły kabel USB, który jest podłączony do portu USB telewizora, więc w zasadzie włączenie telewizora przy pomocy pilota zdalnego sterowania, zasila również płytkę Raspberry Pi, a wyłączenie telewizora z pilota, również natychmiast wyłącza zasilanie z płytki Raspberry Pi.
Tak, doskonale zdaję sobie sprawę, że tak nie powinno się robić, ponieważ główny system plików centrum multimedialnego Kodi (ext3) działa u mnie w zwykłym trybie odczytu/zapisu. Ale jestem leniwym człowiekiem, więc na początku postanowiłem sprawdzić, jak długo można wyłączać system, zanim całkowicie przestanie się ładować, ale niestety przez dwa lata nie udało mi się tego zrobić (może po prostu miałem szczęście, nie wiem).
Moim zdaniem, jeśli ten tryb działał z moim telewizorem, to również będzie odpowiedni dla 'zwykłej kolumny internetowej', a ponieważ wymusiłem wyłączenie automatycznych aktualizacji wtyczek Kodi, prawdopodobieństwo awarii systemu plików znacznie się zmniejszy. Na razie nie widzę z tym problemów.
Uwaga:
Jednak zawsze, jeśli masz ochotę, możesz za pomocą jednej komendy yocto
IMAGE_FEATURES += "read-only-rootfs"
i pewnej magii przełączyć swój dystrybucyjny system w tryb "tylko do odczytu".
Dystrybucja 'kolumny internetowej' opisana w artykule jest użytkowa, a co najważniejsze dla dystrybucji użytkowej — to piękny interfejs graficzny. Uważam, że bardzo trudno lub prawie niemożliwe jest nauczenie zwykłego użytkownika wpisywania jakichkolwiek niezrozumiałych magicznych komend w konsoli, nawet nie zna on tego słowa. A oto interfejs graficzny, proszę bardzo.
I to jest chyba mój główny argument na rzecz niekonsolowej dystrybucji. Ciepły, przytulny interfejs graficzny użytkownika Kodi, który może nie jest szczególnie potrzebny, ale jednak istnieje.
(Jeszcze zapomniałem wspomnieć, że Kodi można zdalnie sterować, na przykład za pomocą smartfona, instalując aplikację „Yatse”, co dla niektórych może być plusem)
Konfiguracja Kodi do sterowania myszą
a teraz Rakieta
VolumeUp
VolumeDown
ChannelDown
ChannelDown
ChannelUp
Konfiguracja nadpisuje ogólne (globalne) zdarzenia dla następujących elementów:
- przewijanie koła myszki do przodu
- przewijanie koła myszki do tyłu
- naciśnięcie przycisku środkowego myszki
- przetwarzanie długiego naciśnięcia myszki (3 sekundy i dłużej),
0 identyfikator prawego przycisku, 1 identyfikator lewego przycisku
bardziej szczegółowe informacje na temat konfiguracji zdarzeń myszki:
Co zrobić, jeśli system kablowy nie dotarł do Ciebie
„Ale nie mam wolnych portów Ethernet (albo nigdy ich nie miałem)” — mogą zawołać niektórzy szczęśliwi posiadacze starych płyt Raspberry Pi 1 (możliwe, że płyta została kupiona do badań i tak sobie leżała na półce)
A ponieważ na płycie nie ma wbudowanego Wifi, to bez podłączenia Ethernet nie jest ona zbyt funkcjonalna.
Oczywiście istnieje możliwość użycia płyty Raspberry Pi 1 bez Ethernet, ale wymaga to od Ciebie pewnych wysiłków. Zwykle tego rodzaju rzeczy ciekawią tylko w kontekście nauki czegoś nowego, tzn. to nie jest zajęcie dla użytkownika.
Zatem rozważmy hipotetyczny przypadek użycia płyty bez Ethernet:
Można podłączyć zewnętrzny adapter USB — Wifi, kierując się tym założeniem,
że adapter musi dobrze działać pod Linuksem
Uwaga:
Niestety, niektóre z adapterów WiFi mogą nie działać,
to nie jest problem konkretnej dystrybucji opisywanej w tym artykule,
ale raczej kwestia specyficznych sterowników adapterów WiFi w jądrze Linux.
Można stwierdzić, że obecnie nie możesz po prostu
pójść do sklepu i kupić dowolnego adaptera WiFi. Lepiej, jeśli wybierzesz adapter WiFi
z listy mniej problematycznych i dobrze działających pod Linux.
Sprawdzałem tylko następujące modele:
- Adapter WiFi z chipem Atheros D-Link DWA-126 802.11n (AR9271)
- Adapter WiFi NetGear WNDA3200
- Adapter WiFi NetGear WNA1100
- Adapter WiFi TP-Link TL-WN722N (AR9271)
- Adapter WiFi TL-WN322G v3
- Adapter WiFi TL-WN422G
- Adapter Wifi Asus USB-N53 chipset Ralink RT3572
Jeśli masz już adapter USB WiFi, możesz sprawdzić, jak dobrze działa pod Linux, w następujący sposób:
- Zainstaluj jakąś powszechnie używaną dystrybucję Linuxa
ogólnego przeznaczenia, na przykład „Ubuntu Desktop” - Uruchom system
- Podłącz swój adapter USB WiFi
- Uruchom menedżera sieci i spróbuj połączyć się z punktem dostępowym WiFi
- Jeśli wszystko działa dobrze i Twoje połączenie internetowe jest stabilne, oznacza to, że Twój adapter jest dobrze wspierany i możesz kontynuować pracę nad podłączeniem tego adaptera w specjalistycznej dystrybucji, być może z innymi wersjami jądra.
(jeśli nie, to niestety — lepiej nawet nie próbować)
Wsparcie dla zewnętrznego adaptera WiFi w „Raspberry PI”
Aby poprawnie działał adapter WiFi w Linuxie, potrzebujemy dwóch rzeczy:
1) Wsparcie jądra Linux dla konkretnego adaptera WiFi
2) Obecność w systemie modułu jądra dla konkretnego adaptera WiFi
Weźmy na przykład adapter TP-Link TL-WN722N. Ma po prostu wspaniałą antenkę.
Znajdziemy chipset, na którym działa płyta — u mnie jest to „AR9271”, uwaga:
Co ciekawe, dla jednego i tego samego modelu
tego samego producenta, chipset WiFi może się różnić.
Na przykład spotkałem się z tym, że dla TL-WN722N wersja 2,
używany jest już inny chipset Realtek RTL8188, a ten już
słabo działał pod Linux (w tamtym czasie), niestety, taka jest rzeczywistość,
tzn. czasami trzeba również zwrócić uwagę na małe numery
wersji po stronie odwrotnej (ciemnej) adaptera.
Teraz znajdziemy nazwę parametru w konfiguracji jądra odpowiedzialnego za sterownik chipsetu AR9271, najlepiej poszukać kombinacji słów „AR9271 cateee.net”
gdzie «cateee.net» — świetna strona z opisem konfiguracji modułów jądra Linux
Bezpośrednio znajdujemy nazwę konfiguracji jądra — CONFIG_ATH9K_HTC
i nazwę potrzebnego nam modułu jądra ath9k_htc
a następnie wystarczy wskazać nazwę potrzebnego modułu w pliku fragmentu konfiguracji
jądra Linux => recipes-kernel/linux/files/rbpi.cfg, dodaj linię:
CONFIG_ATH9K_HTC=m
W ten sposób możesz podłączyć dowolne dodatkowe urządzenie do swojego systemu (o ile oczywiście jest już wspierane w jądra Linux)
Co robić, jeśli jesteś hobbystą — konstruktorem
I tworzysz świetne rzeczy, na przykład takie jak lub jesteś studentem i marzysz o zrobieniu czegoś podobnego.
Możesz na przykład kupić jakiś ekran dotykowy dla RPI na aliexpress, zamówić odpowiednią baterię, podłączyć to wszystko do płytki Raspberry Pi 1, 2 lub 3 (lepiej 3, ponieważ ma wbudowane WiFi), wybrać motyw interfejsu graficznego w Kodi, który jest przystosowany do ekranu dotykowego i voila => możesz stworzyć prosty odtwarzacz audio. Oczywiście będzie dość duży, ale będzie twój.
Uwaga:
Aby zbudować centrum multimedialne Kodi dla najtańszej płytki
Raspberry Pi Zero Wifi w yocto, wystarczy zmienić dwie linie:
plik konfiguracyjny => build/conf/local.conf
MACHINE = 'raspberrypi0-wifi'
przepis na zbudowanie Kodi => recipes-mediacentre/kodi/kodi_17.bbappend
EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE',
'raspberrypi0-wifi', '${BS_RPI}', '', d)}"
Jeśli responsywność GUI Kodi 17.6 z powodu jednego rdzenia procesora w Zero wydaje ci się tajemnicza, możesz zastosować sprytne rozwiązanie i zbudować starszą, ale bardzo szybką wersję, na przykład Kodi 15.2, która w tym przypadku jest bardziej "przyjazna" (czasami stare rozwiązania rozwiązują wszystko)
Niestety nie mam płytki, więc nie mogę tego sprawdzić, ale z moich odczuć powinno to działać.
Krótka instrukcja dotycząca budowy
1) Zainstaluj zależności Yocto Project (np. w Ubuntu):
sudo apt-get install -y --no-install-suggests --no-install-recommends
gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential
chrpath socat cpio python python3 python3-pip python3-pexpect
xz-utils debianutils iputils-ping python3-git python3-jinja2
libegl1-mesa libsdl1.2-dev xterm
2) Pobierz i zainstaluj Repo:
mkdir ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
3) Pobierz projekt z github:
PATH=${PATH}:~/bin
mkdir radio
cd radio
repo init -u https://github.com/berserktv/bs-manifest
-m raspberry/rocko/radio-rpi-0.2.8.xml
repo sync
4) Zbuduj projekt:
./shell.sh
bitbake berserk-image
można również zbudować to samo dla płyt Raspberry Pi 3B Plus, 3B i 2B:
repo init -u https://github.com/berserktv/bs-manifest
-m raspberry/rocko/radio-0.2.8.xml
szczegółową instrukcję budowy
i nagrywania na kartę microSDHC proszę zobaczyć
Postscriptum
Oczywiście pomysł internetowej kolumny radiowej jest znany, znajdziesz wiele artykułów na ten temat na hucie, na przykład
I jeszcze możesz pomyśleć, że po prostu dostosowałem wymagania do gotowego rozwiązania. Na to mogę odpowiedzieć, że nie, naprawdę.
Historia pana Erwi
Chcąc wierzyć lub nie, sprawa wyglądała tak:
Nasze biuro graniczy z firmą produkującą różne urządzenia dźwiękowe, a pewnego dnia dyrektor tej firmy, nazwijmy go panem "Ervi", podszedł do naszego zastępcy dyrektora oddziału pana "Arseniusza" i zapytał go, jak trudne jest podłączenie odtwarzania strumienia dźwięku do płytki Raspberry Pi, tzn. płytka jest podłączona do sieci i głośników, i "słychać charakterystyczny dźwięk".
Po tym pan Arseniusz podszedł do zastępcy mojego szefa - pana "Borysa" i przekazał mu pytanie, a ja, jako przypadkowy obserwator, zapamiętałem ten pomysł i nazwałem go "Zadaniem trzech szefów".
W skrócie, chcieli dobrze, a wyszło, cytat - "Ale pan Ervi, jak zawsze, pomógł."
Po pewnym czasie zapytałem pana "Borysa" o jego opinię na temat napisania krótkiego artykułu na ten temat na "Habra", na co "Borys" odpowiedział, że zmiana "trzech pozycji w menu" w Kodi szczególnie nie wnosi żadnych nowych informacji i nie zasługuje na osobne wspomnienie. Oczywiście całkowicie się z nim zgadzam i dlatego nie powiem mu, że coś w tej sprawie napisałem.
Artykuł jest napisany wyłącznie dla płytki "Raspberry Pi 1" pożyczonej od pana "Borysa" na czas eksperymentu, a podobieństwa z innymi płytkami "Raspberry Pi 1" są przypadkowe.
Życzymy Wam wielu udanych i różnorodnych projektów, a niech nawet zeszłoroczny cegła - dla Was w tym roku śpiewa.
Źródło: habr.com
