
Hauptvoraussetzungen:
- Es gibt eine alte, ungenutzte Platine des Raspberry Pi der ersten Generation;
- Die Platine liegt auf dem Schrank als toter Ballast herum — die Platine ist ein „Ziegel“;
Was ich mir wünschen würde:
- Zu einem bestimmten Zeitpunkt (zum Beispiel je nach Stimmung)
hört die Platine auf, ein „Ziegel“ zu sein, und eine magische Speicherkarte wird eingesetzt; - Ein Ethernet-Kabel und ein Stecker von einem gewöhnlichen Lautsprecher oder Kopfhörern werden angeschlossen;
- Nach dem Einschalten wird der frühere „Ziegel“ — singen
Die Hauptidee:
- Minimale körperliche Bewegungen für irgendwelche Einstellungen, im besten Fall schließen wir nur das „Ethernet“-Kabel, die Stromversorgung und die Lautsprecher an und machen sonst nichts, im wahrsten Sinne des Wortes „überhaupt“;
- Der frühere „Ziegel“ unterstützt out-of-the-box beispielsweise 20 Internetradiosender, deren Umschaltung im Kreis auf einen Druck auf das Mausrad oder einen bestimmten GPIO-Pin gelegt werden kann (zwei Drähte anschließen und kurzschließen (mein Traum seit der Kindheit));
- Die Steuerung erfolgt über einen Funkkanal, und dieser Funkkanal kann eine gewöhnliche Funkmaus sein;
- Nehmen Sie ein bereits fertiges System, das Package im „Yocto Project“ zusammenstellen
d.h. wie gewohnt werden wir nichts tun, da bereits alles erledigt ist.
(es reicht, nur einen externen Beobachter auf die andere Seite zu stellen „des Fernsehers“);
Beschreibung
Einfacher Internet-Radiolautsprecher „KODI“
Der Aufbau ist für alte Raspberry Pi 1 Platinen vorgesehen,
(die irgendwo auf dem Schrank verstauben, aber bereit sind, noch zu arbeiten)
Standardmäßig wird eine Liste von 12 Internetradiosendern im m3u8-Format verwendet.
Es wird davon ausgegangen, dass die Platine ohne HDMI-Ausgang arbeitet, und zum Abschalten reicht es, den Netzadapter aus der Steckdose zu ziehen. Und als ultra-moderne, drahtlose Fernbedienung können Sie Ihre super Funkmaus verwenden (oder eine gewöhnliche kabelgebundene Maus anschließen).
Beim Einschalten wird die Netzwerkschnittstelle standardmäßig über das DHCP-Protokoll konfiguriert und der letzte gespeicherte Radiosender aus der Liste abgespielt, die Lautstärke wird mit der normalen Maus gesteuert:
(machen Sie endlich Ihre Maus zur „Chefin der Steuerung“ und gratulieren Sie ihr, sie hat es verdient)
Rädchen nach vorne - Lautstärke erhöhen
Rädchen nach hinten - Lautstärke verringern
Längeres Drücken (3 Sekunden oder mehr) der rechten Maustaste
- Nächsten Radiosender auswählen
Längeres Drücken (3 Sekunden oder mehr) der linken Maustaste
- Vorherigen Radiosender auswählen
Um eine eigene Liste von Internetradiosendern hinzuzufügen
können Sie jederzeit ein HDMI-Kabel vom Fernseher anschließen
und die eingebaute grafische Benutzeroberfläche Kodi 17.6 nutzen
(Schalten Sie die Platine aus, schließen Sie HDMI an und schalten Sie das Netzteil ein)Hauptmenü Kodi => „Erweiterungen“ => „Meine Erweiterungen"
=> „PVR-Clients“ => „PVR IPTV Simple Client"
Ursprüngliche Umsetzung
(möglich)
Ursprünglich, als ich mich entschied, eine „Internetradio-Säule“ zu erstellen, plante ich Folgendes:
- Minimalistisches Konsolendistributiv im Yocto Project;
- Audio-Streams werden über GStreamer abgespielt;
- Netzwerkschnittstelle wird über DHCP konfiguriert;
Und eine solche Lösung hat mehrere Vorteile:
- Relativ schnell (Einschalten bis zum Betriebszustand 30-40 Sekunden);
- Relativ zuverlässig (weniger Programme, weniger Fehlerquellen);
- Konsolendistributiv lässt sich viel einfacher in den Nur-Lese-Modus versetzen
d.h. Programme schreiben nichts ins Root-Dateisystem
(und das Dateisystem auf dem SDHC-Speichermedium ist meiner Meinung nach der erste Kandidat für Fehler);
Hinweis:
In Yocto kann das Root-Dateisystem (rootfs) ganz einfach in den Nur-Lese-Modus versetzt werden, indem ein Parameter während des Builds geändert wird.
Standardmäßig bietet Yocto zwei Optionen:
1) Betrieb des Dateisystems im normalen Lese-/Schreibmodus
(so arbeiten alle allgemeinen Distributionen, z.B. Ubuntu)
2) Betrieb des Dateisystems im Nur-Lese-Modus
(so arbeiten spezialisierte Distributionen, z.B. in Routern)
Im Nur-Lese-Modus werden alle Verzeichnisse, in die normalerweise
Anwendungs- und Dienstdaten während des Betriebs geschrieben werden,
im Arbeitsspeicher eingebunden (z.B. das Verzeichnis /var/log usw.)
Die Daten sind nur für die aktuelle Sitzung gültig und gehen nach einem Stromausfall verloren.
Wenn Sie im Yocto Project beim Build "read only" angeben,
wird Ihre Distribution nach dem Build nur auf Lesezugriff eingestellt,
aber Sie können jederzeit die Möglichkeit hinzufügen, dynamisch
von "read only" auf "read/write" zu wechseln, aber das ist eine ganz andere Geschichte ...
Und ein größter Nachteil:
„Es muss gemacht werden“, d.h. ich muss eine bestimmte Anzahl von Abenden aufwenden.
(normalerweise nach der Arbeit, und das ist die ineffektivste Zeit, in der der Verstand normalerweise nicht denkt, er schläft in der Regel)
Außerdem habe ich meinen vorherigen Artikel auf Habré über das Multimedia-Zentrum projekt
geschrieben, und die Möglichkeit, im selben Stil fortzufahren, überwand meinen Forschungsdrang. Darüber in dem nächsten Kapitel.
Kodi in einen Internet-Radiospeaker verwandeln
Um die gewünschte Funktionalität hinzuzufügen, werde ich eine weitere Methode in das Rezept zum Erstellen der Distribution einfügen, das zuvor beschrieben wurde. Siehe Datei berserk-image.bb
GUI_SETTINGS = "home/root/.kodi/userdata/guisettings.xml"
# Konfiguration des Starts des zuletzt gewählten TV-Kanals (1-Hintergrund 2-Vordergrund)
F1_LINE = "0"
R1_LINE = "1"
# Konfiguration der Audioausgabe, es ist immer nur der analoge Audioausgang angeschlossen
F2_LINE = "PI:HDMI"
R2_LINE = "PI:Analogue"
# Da HDMI standardmäßig nicht verwendet wird, deaktiviere ich das automatische Update
# sonst könnte es sein, dass die Stromversorgung weg ist, die Daten aber nicht gespeichert wurden
F3_LINE = "0"
R3_LINE = "2"
# Die Methode dient dazu, die Konfiguration hinzuzufügen:
# die "Smart-TV" in "ein einfaches Internet-Radio" verwandelt
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"
# Da der HDMI-Ausgang möglicherweise nicht verwendet wird,
# muss man das "Startbegrüßung" deaktivieren
off_kodi_welcome() {
sed -i "s|${FIND_STR}|#&|" ${IMAGE_ROOTFS}/${SCRIPT_FIRST_RUN}
}
Die Methoden sind zur Modifikation des Wurzel-Dateisystems vor der Erstellung des Abbilds des Distributions-Images in Form einer einzelnen Raw-Datei vorgesehen, die mit dem Befehl auf die Speicherkarte geschrieben wird. dd
Das geschieht auf folgende Weise:
ROOTFS_POSTPROCESS_COMMAND += «add_radio_guisettings; off_kodi_welcome;»
Kurz gesagt, in der Hauptkonfigurationsdatei von Kodi 17.6 werden "drei Punkte" geändert,
- Konfiguration des Starts des zuletzt gewählten TV-Kanals;
- Konfiguration der Audioausgabe, es ist immer nur der analoge Audioausgang angeschlossen;
- Deaktivierung des automatischen Updates;
- Hinweis:
Das Einzige, womit ich Schwierigkeiten hatte, war, dass ich die Datenbankdatei im sqlite-Format => TV29.db heranziehen musste, in der der aktuelle TV-Kanal, der wiedergegeben wird, angegeben wird (da standardmäßig kein Kanal ausgewählt ist), und das lässt sich über die XML-Konfiguration in Kodi nicht umsetzen.
Eine detailliertere Abfolge der Schritte für jeden Punkt:
1) Klicken Sie auf das ‚Zahnrad‘-Symbol in der oberen linken Ecke des Bildschirms
und wählen Sie den Punkt ‚Einstellungen PVR und TV‘ (Fernsehbild mit zwei Antennen)
Wählen Sie dann im linken Menü den Punkt ‚Wiedergabe‘ und im zentralen Abschnitt ‚Allgemein‘
Geben Sie in der Dropdown-Liste ‚Mit dem letzten Kanal beim Start fortfahren‘ an
indem Sie die Einstellung ‚Vordergrund‘ auswählen.
oder anschaulicher:
"PVR- und TV-Einstellungen"
=> "Wiedergabe"
=> "Beim Start den letzten Kanal fortsetzen" => "Vordergrund"
2) Klicken Sie auf das "Zahnradsymbol" in der oberen linken Ecke des Bildschirms und wählen Sie:
"Systemeinstellungen"
=> "Erweiterungen" => "Updates" => "Nie nach Updates suchen"
3) Klicken Sie auf das "Zahnradsymbol" in der oberen linken Ecke des Bildschirms und wählen Sie:
"Systemeinstellungen"
=> "Audio" => "Audioausgabegerät" => "PI: Analoge"
Wie ich zwei Jahre lang falsch fernsehschauen habe.
Ich muss Ihnen gestehen, dass ich in zwei Jahren nicht gelernt habe, richtig fernzusehen.
Normalerweise schaue ich im Küchenfernseher. An den Fernseher ist ein Raspberry Pi 2B angeschlossen, und die Platine hat Ethernet- und HDMI-Anschlüsse. Die Stromversorgung der Platine erfolgt über ein normales USB-Kabel, das in den USB-Port des Fernsehers gesteckt ist, d.h. im Grunde schaltet das Einschalten des Fernsehers mit der Fernbedienung auch die Stromversorgung für den Raspberry Pi ein, und das Ausschalten des Fernsehers mit der Fernbedienung schaltet ebenfalls sofort die Stromversorgung des Raspberry Pi aus.
Ja, ich bin mir bewusst, dass das nicht richtig ist, denn das Wurzel-Dateisystem des Kodi-Mediacenters (ext3) funktioniert bei mir im normalen Lese-/Schreibmodus. Aber ich bin ein fauler Mensch, und zuerst wollte ich ausprobieren, wie lange ich das System ausschalten kann, bevor es komplett nicht mehr bootet, aber leider ist mir das in zwei Jahren nicht gelungen (vielleicht hatte ich einfach Glück, ich weiß es nicht).
Und meiner Meinung nach, wenn dieser Modus für meinen Fernseher funktioniert hat, sollte er auch für eine "einfache Internet-Radiosäule" funktionieren, und da ich die automatische Aktualisierung der Kodi-Plugins gezwungenermaßen deaktiviert habe, wird die Wahrscheinlichkeit eines Dateisystemausfalls noch geringer. Bislang sehe ich damit keine Probleme.
Hinweis:
Aber Sie können jederzeit mit einem Yocto-Befehl
IMAGE_FEATURES += "read-only-rootfs"
und ein wenig Magie Ihr Distribution in den "read-only"-Modus versetzen.
Die in dem Artikel beschriebene "Internet-Radiosäule"-Distribution ist eine Consumer-Lösung, und das Wichtigste für eine Verbraucher-Distribution ist eine ansprechende GUI. Meiner Meinung nach ist es sehr schwierig oder nahezu unmöglich, einen normalen Benutzer dazu zu bringen, irgendwelche unverständlichen und magischen Kommandos in die Konsole einzugeben, er kennt ja nicht einmal ein solches Wort. Aber die GUI, das bitte.
Und das ist wohl mein Hauptargument für einen nicht-konsolenbasierten Distribution. Die warmen, nostalgischen grafischen Benutzeroberflächen von Kodi sind zwar nicht unbedingt notwendig, aber sie sind vorhanden.
(Außerdem habe ich völlig vergessen zu erwähnen, dass man Kodi auch fernsteuern kann, zum Beispiel mit einem Smartphone, wenn man die Anwendung „Yatse“ installiert. Für manche könnte das ein Vorteil sein.)
Konfiguration von Kodi zur Steuerung mit der Maus
und jetzt die Rakete
VolumeUp
VolumeDown
ChannelDown
ChannelDown
ChannelUp
Die Konfiguration überschreibt allgemeine (global) Ereignisse für folgende Elemente:
- Scrollen des Mausrads nach oben
- Scrollen des Mausrads nach unten
- Klicken der mittleren Maustaste
- Verarbeiten eines langen Mausklicks (3 Sekunden oder mehr),
0 ID der rechten Taste, 1 ID der linken Taste
Weitere Informationen zur Konfiguration von Mausereignissen:
Was tun, wenn das Kabelnetzwerk bei Ihnen nicht verfügbar ist
„Aber ich habe zu Hause keine freien Ethernet-Ports (oder hatte sie nie)“ – könnte ein Teil der glücklichen Besitzer alter Raspberry Pi 1-Platinen ausrufen (möglicherweise wurde die Platine für Forschungszwecke erworben und lag einfach im Regal).
Da es auf der Platine kein integriertes Wifi gibt, ist sie ohne Ethernet-Anschluss nicht sehr funktional.
Natürlich gibt es die Möglichkeit, die Raspberry Pi 1-Platine ohne Ethernet zu nutzen, aber das erfordert gewisse Anstrengungen Ihrerseits. Normalerweise interessiert man sich für solche Dinge nur im Rahmen des Lernens von etwas Neuem, d. h. es ist keine benutzerfreundliche Aufgabe.
Betrachten wir also ein hypothetisches Szenario für die Nutzung der Platine ohne Ethernet:
Man kann einen externen USB-Wifi-Adapter anschließen und dabei berücksichtigen,
dass der Adapter gut unter Linux funktionieren sollte.
Hinweis:
Leider wird ein Teil der WiFi-Adapter nicht funktionieren. Dies ist keine Besonderheit der in diesem Artikel vorgestellten Distribution, sondern eher ein Problem spezifischer WiFi-Adaptertreiber im Linux-Kernel. Man kann feststellen, dass Sie im Moment nicht einfach in den Laden gehen und jeden WiFi-Adapter kaufen können. Vielmehr müssen Sie einen WiFi-Adapter aus einer Liste weniger problematischer und gut funktionierender Adapter unter Linux auswählen.
Ich habe nur die folgenden Modelle getestet:
- WiFi-Adapter mit Atheros D-Link DWA-126 802.11n Chipsatz (AR9271)
- WiFi-Adapter NetGear WNDA3200
- WiFi-Adapter NetGear WNA1100
- WiFi-Adapter TP-Link TL-WN722N (AR9271)
- WiFi-Adapter TL-WN322G v3
- WiFi-Adapter TL-WN422G
- WiFi-Adapter Asus USB-N53 mit Ralink RT3572 Chipsatz.
Wenn Sie bereits einen USB-WiFi-Adapter haben, können Sie überprüfen, wie gut er unter Linux funktioniert, indem Sie Folgendes tun:
- Installieren Sie eine weit verbreitete Linux-Distribution
für allgemeine Zwecke, z. B. "Ubuntu Desktop" - Starten Sie das System
- Schließen Sie Ihren USB-WiFi-Adapter an
- Starten Sie den Netzwerkmanager und versuchen Sie, sich mit Ihrem WiFi-Zugangspunkt zu verbinden
- Wenn alles gut funktioniert und Ihre Internetverbindung stabil ist, bedeutet das, dass Ihr Adapter gut unterstützt wird und Sie mit der Einrichtung dieses Adapters in einer spezialisierten Distribution sowie möglicherweise mit anderen Kernel-Versionen fortfahren können.
(Wenn nicht, naja, dann besser gar nicht erst versuchen.)
Unterstützung des externen WiFi-Adapters auf dem "Raspberry PI"
Für eine ordnungsgemäße Funktion des WiFi-Adapters unter Linux benötigen wir zwei Dinge:
1) Unterstützung des Linux-Kernels für den jeweiligen WiFi-Adapter
2) Verfügbarkeit eines Kernelmoduls für den jeweiligen WiFi-Adapter im System
Nehmen wir zum Beispiel den Adapter TP-Link TL-WN722N. Er hat einfach eine großartige Antenne.
Wir ermitteln den Chipsatz, mit dem die Karte arbeitet – bei mir ist es "AR9271". Hinweis:
Das Interessante ist, dass für dasselbe Modell
desselben Herstellers der WiFi-Chipsatz variieren kann.
Ich habe zum Beispiel festgestellt, dass für TL-WN722N Version 2
bereits ein anderer Chipsatz, Realtek RTL8188, verwendet wird, der damals
leider schlecht unter Linux funktionierte; solche Dinge passieren.
Manchmal muss man auch auf die kleinen Ziffern
der Version auf der Rückseite (der dunklen) des Adapters achten.
Jetzt suchen wir nach dem Parameter, der in der Kernel-Konfiguration für den Treiber des AR9271-Chipsatzes zuständig ist. Am besten suchen wir nach der Kombination der Wörter "AR9271 cateee.net".
wo «cateee.net» — eine großartige Website mit einer Beschreibung der Modulkonfigurationen des Linux-Kernels
Wir finden sofort den Namen der Kernelkonfiguration — CONFIG_ATH9K_HTC
und den Namen des benötigten Kernelmoduls ath9k_htc
und geben Sie dann einfach den Namen des benötigten Moduls in die Konfigurationsfragmentdatei an
Linux-Kernel => recipes-kernel/linux/files/rbpi.cfg, fügen Sie die Zeile hinzu:
CONFIG_ATH9K_HTC=m
Auf diese Weise können Sie später jede zusätzliche Hardware an Ihr System anschließen (vorausgesetzt, sie wird bereits im Linux-Kernel unterstützt)
Was tun, wenn Sie ein Habragik-Konstrukteur sind
und coole Dinge schaffen, zum Beispiel solche wie oder Sie sind Student und träumen davon, etwas Ähnliches zu erstellen.
Dann können Sie spontan einen Touchscreen für RPI auf aliexpress auswählen, dort auch einen passenden Akku bestellen, alles an das Raspberry Pi 1,2 oder 3 anschließen (am besten an 3, da es mit eingebautem WLAN kommt), ein Thema für die Benutzeroberfläche in Kodi auswählen, das für Touchscreens optimiert ist, und voilà => Sie können einen einfachen Audio-Player haben. Natürlich wird er relativ sperrig sein, aber er wird Ihrer sein.
Hinweis:
A um ein Kodi-Multimedia-Zentrum für das kostengünstigste Board
Raspberry Pi Zero Wifi in Yocto zu erstellen, genügt es, zwei Zeilen zu ändern:
Konfigurationsdatei => build/conf/local.conf
MACHINE = 'raspberrypi0-wifi'
Rezept zum Erstellen von Kodi => recipes-mediacentre/kodi/kodi_17.bbappend
EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE',
'raspberrypi0-wifi', '${BS_RPI}', '', d)}"
Wenn die Reaktionsfähigkeit der GUI von Kodi 17.6 wegen eines Prozessorkerns im Zero für Sie rätselhaft erscheint, können Sie einen Trick anwenden und eine ältere, aber sehr schnelle Version kompilieren, wie zum Beispiel Kodi 15.2, sie ist in dieser Hinsicht "benutzerfreundlicher" (manchmal löst Legacy alles)
Leider habe ich die Platine nicht, daher kann ich es nicht überprüfen, aber nach meinem Gefühl sollte es funktionieren.
Kurzanleitung zum Zusammenbauen
1) Installieren Sie die Abhängigkeiten des Yocto Project (zum Beispiel auf 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) Laden Sie Repo herunter und installieren Sie es:
mkdir ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
3) Klonen Sie das Projekt von 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) Kompilieren Sie das Projekt:
./shell.sh
bitbake berserk-image
Das Gleiche kann auch für die Raspberry Pi 3B Plus, 3B und 2B Boards kompiliert werden:
repo init -u https://github.com/berserktv/bs-manifest
-m raspberry/rocko/radio-0.2.8.xml
eine detailliertere Anleitung zum Zusammenstellen
und zum Schreiben auf die microSDHC-Karte siehe
Nachwort
Natürlich ist die Idee einer Internet-Radiobox standardmäßig, sie ist allgemein bekannt und auf Habr finden Sie viele Artikel dazu, zum Beispiel
Und Sie könnten denken, dass ich die Anforderungen auf eine fertige Lösung angepasst habe. Darauf kann ich erwidern und sagen, dass das nicht der Fall ist, ganz ehrlich.
Die Geschichte von Mister Erwi
Ob glauben Sie es oder nicht, aber so war es:
Unser Büro grenzt an eine Firma, die verschiedene Audio
Geräte herstellt, und eines Tages kam der Direktor dieser Firma, nennen wir ihn Mr. "Ervi", zu unserem stellvertretenden Direktor Mr. "Arsenij" und fragte ihn, wie schwierig es sei, das Abspielen eines Audiostreams auf die Raspberry Pi-Platine zu bringen, d.h. die Platine wird an das Netzwerk und an Lautsprecher angeschlossen, und "man hört den charakteristischen Klang".
Danach ging Mr. Arsenij zu meinem Vorgesetzten, Mr. "Boris", und leitete die Frage an ihn weiter, und ich, als unbeteiligter Beobachter, habe diese Idee zufällig gespeichert und nannte sie "Die Aufgabe der drei Chefs".
Im Grunde genommen wollten sie es gut machen, aber es kam, Zitat - "Aber Mr. Ervi hat, wie immer, geholfen."
Nach einiger Zeit erkundigte ich mich bei Mr. "Boris" nach seiner Meinung zu dem Thema, einen kurzen Artikel darüber auf "Habr" zu schreiben, worauf "Boris" antwortete, dass die Änderung von "drei Menüpunkten" in Kodi nicht wirklich neue Informationen bringt und keine gesonderte Erwähnung verdient. Natürlich stimme ich ihm vollkommen zu und deshalb werde ich ihm nicht erzählen, dass ich etwas darüber geschrieben habe.
Der Artikel ist ausschließlich für die Platine "Raspberry Pi 1" geschrieben, die ich von Mr. "Boris" für die Dauer des Experiments entliehen habe, und die Ähnlichkeiten mit allen anderen "Raspberry Pi 1" Platinen sind zufällig.
Ich wünsche Ihnen viele gute und unterschiedliche Builds, und möge sogar der frühere Ziegelstein in diesem Jahr für Sie singen.
Quelle: habr.com
