Media Player aus dem Schrank


Autor: Nikolai Khabarov

Eines schönen Freitagabends beschloss ich, zu Hause einen Film anzusehen: Ich schaltete den Laptop ein, schloss das HDMI-Kabel über den DisplayPort-Adapter an, nahm die Fernbedienung, schaltete den Fernseher ein und begann auf dem Laptop zu spielen. Und mir wurde klar, dass die Lautstärke am Fernseher nicht ausreichte - ich musste erneut nach der Fernbedienung suchen, um sie zu erhöhen ... Dann dachte ich: "Kann dieser Vorgang irgendwie vereinfacht werden?"

Der Samstagmorgen war äußerst fruchtbar. Ich habe beschlossen, meinen eigenen Netzwerk-Multimedia-Player so zu gestalten, wie ich es mir vorstelle. Fast alle Details wurden aus der Speisekammer entnommen, das Herz des Spielers ist der Raspberry Pi. Weitere Informationen dazu, was sich darin befindet und wie ein ähnliches Gerät zusammengebaut wird, finden Sie unter dem Schnitt.



Wie Sie der Beschreibung entnehmen können, sind meine Anforderungen an den Player äußerst einfach: die Fähigkeit, Inhalte aus dem Netzwerk abzuspielen, Speicherplatz für mehrere hundert Gigabyte, die Fähigkeit, dieselbe Fernbedienung wie das Fernsehgerät zu steuern; Ein USB-Anschluss ist wünschenswert, aber nicht erforderlich. Gekaufte Android-Player verschwanden sofort, da solche Geräte im schlimmsten Sinne des Wortes größtenteils reines China sind und ich keine Lust hatte, mit Fehlern in ihnen zu kämpfen. Darüber hinaus ist nicht klar, wie die Steuerung eines solchen Geräts über eine Fernsehfernbedienung implementiert werden soll. Darüber hinaus ist die grafische Oberfläche von Android im Prinzip eindeutig nicht für die Fernbedienung vorgesehen. Daher begann die Suche nach Müll, aus dem man etwas machen kann.

Wir wählen die Details aus


Zunächst möchte ich nur versuchen, die Machbarkeit der Herstellung des Endgeräts zu verstehen. Daher werden wir zunächst ein Minimum an Details berücksichtigen und einen potenziellen Media Player ausprobieren, der in Betrieb ist. Wir gehen in die Speisekammer und graben buchstäblich die Details aus, die wir brauchen:
1. Ein Computer mit einem HDMI-Ausgang. Der alte Raspberry Pi 1 ist für unsere Zwecke gut geeignet, Sie können auch den Raspberry Pi 2 verwenden.
2. Stromversorgung für das Board - Micro-USB-Aufladung von einem alten Telefon ist geeignet. Sie können jedes "versuchen", aber es ist ratsam, eine Quelle mit einem Ausgangsstrom von 1A zu nehmen (ein Ampere für die Augen reicht für Pi 2, siehe Anforderungen );
3. microSD-Karte mit 4 GB oder mehr.
4. USB-Maus und / oder -Tastatur (drahtlos kann verwendet werden) und optional TSOP4836-Infrarotsignalempfänger oder ähnliches.
5. USB-WLAN-Adapter oder die Möglichkeit, ein Ethernet-Kabel mit Internet an die Karte anzuschließen.

Wir setzen OpenElec ein, wir versuchen es


An diesem Punkt werden wir OpenElec auf die kleinstmögliche Weise ausführen. Sobald ich über die Software für meinen Multimedia-Player nachdachte, erinnerte ich mich an die XBMC, die später in Kodi umbenannt wurde . Es bestand jedoch keine Lust, ein Betriebssystem zu installieren und dann Kodi zu konfigurieren. Also habe ich mich für Google entschieden und diese Assembly des GNU / Linux-Betriebssystems gefunden, auf der Kodi bereits installiert ist. Diese Assembly heißt OpenElec und ist ein Open Source-Projekt. Die offizielle Website ist openelec.tv.
Daher laden wir das Installationsimage von der offiziellen Website herunter . Wir wählen die gewünschte Version und die Plattform aus, auf der wir sie ausführen werden (in meinem Fall die stabile Version für Rasberry Pi), und laden das 'Diskimage' (Datei mit der Erweiterung .img.gz) herunter.
Packen Sie das Bild aus: Und schreiben Sie auf die Speicherkarte:
$ gunzip -d < >.img.gz


$ sudo dd if= < >.img of=/dev/mmblck0 bs=4M

Korrigieren Sie / dev / mmblck0 - wenn sich mehr als eine Speicherkarte in Ihrem System befindet.

Achtung! Der Inhalt der Speicherkarte wird vollständig gelöscht.

Windows-Benutzer können das kostenlose Win32 Disk Imager- Dienstprogramm verwenden . Das Dienstprogramm verfügt über eine grafische Oberfläche. Wählen Sie die Datei und die Speicherkarte aus und klicken Sie auf "Schreiben".
Stellen Sie nun sicher, dass mit dem Befehl alles auf die Karte geschrieben ist
$ sync

Oder entfernen Sie die Karte einfach durch sicheres Entfernen des Geräts in der grafischen Oberfläche des Betriebssystems. Wir bekommen es physisch und legen es in den Raspberry Pi. Verbinden Sie anschließend das Ethernet-Kabel mit dem Internet oder stecken Sie den USB-WLAN-Adapter ein. Schließen Sie die Maus und das HDMI-Kabel an das Fernsehgerät an. Wenn Sie eine Infrarot-Fernbedienung verwenden möchten, müssen Sie den IR-Empfänger an GPIO18 und die Prozessorleistung (3,3 V) anschließen. Das endgültige Anschlussdiagramm lautet wie folgt:

Wenn Sie sich für einen Infrarotempfänger entscheiden, gehen Sie vorsichtig damit um
- stellen Sie sicher, dass die Pinbelegung Ihres Empfängers korrekt ist.
Alles, jetzt können Sie die Umgebung selbst betrachten. Wir versorgen das Board mit Strom aus der Stromquelle. Nach dem Laden wird der Assistent für die Ersteinrichtung auf dem Bildschirm angezeigt:


Während des Setups empfehle ich, den SSH-Zugriff sofort zu aktivieren. Alle anderen Fragen sind trivial.

Jetzt können Sie mit der Maus und / oder der Tastatur mit der Umgebung des zukünftigen Spielers spielen. Sie können versuchen, das Video in verschiedenen Formaten abzuspielen (Sie können ein USB-Flash-Laufwerk an freie Anschlüsse anschließen) und im Allgemeinen verstehen, was was ist. Es gibt verschiedene Fälle für das Raspberry Pi-Board selbst. Vielleicht ist jemand auf minimalistische Weise mit allem zufrieden. Sie können beispielsweise eine drahtlose USB-Maus anschließen und das Gerät verwenden. Wir werden es weiter verbessern.

Schließen Sie die IR-Fernbedienung an


Wenn Sie keinen IR-Empfänger anschließen möchten, können Sie diesen Abschnitt einfach überspringen.

Um die Fernbedienung verwenden zu können, müssen wir LIRC konfigurieren . Schalten wir zunächst das Modul ein, das über den GPIO-Port direkt mit dem Empfänger zusammenarbeitet. Fügen Sie dazu der DeviceTree-Konfigurationsdatei eine Zeile hinzu. Wir melden uns über SSH bei Ihrem Gerät an (haben Sie SSH während der Ersteinrichtung aktiviert? Wenn nicht, können Sie dies in der grafischen Oberfläche des Systems selbst tun). Das Standardkennwort lautet openelec. Fügen Sie der Datei die benötigte Zeile hinzu: Ganz am Ende fügen wir die Zeile hinzu und laden sie erneut: Jetzt müssen wir sicherstellen, dass alles funktioniert und der LIRC Befehle von der Fernbedienung empfangen kann. Dazu stoppen wir LIRC und versuchen, Daten von der Fernbedienung abzurufen:
$ ssh root@ip_address


# mount -o remount,rw /flash
# nano /flash/config.txt


dtoverlay=lirc-rpi


# killall lircd
# mode2 -d /dev/lirc0

Wir klicken auf eine beliebige Taste auf der Fernbedienung und leuchten auf dem Empfänger - ein Text, der die eingehenden Impulse beschreibt, sollte in der Konsole laufen. Jetzt sind wir überzeugt, dass alles funktioniert, und wir können LIRC für die Verwendung Ihrer Fernbedienung schulen. Bitte beachten Sie, dass lircd während des Konfigurationsprozesses gestoppt werden muss. Wir haben dies zuvor mit dem Befehl kill getan. Es gibt ein spezielles Dienstprogramm für die Schulung. Wir führen die folgenden Befehle aus, um es zu starten: Befolgen Sie als Nächstes die Anweisungen auf dem Bildschirm. Zu Beginn werden Sie vom Dienstprogramm aufgefordert, die verschiedenen Tasten auf der Fernbedienung zu drücken, bis die Punkte auf dem Bildschirm ausgefüllt sind, um das Muster Ihrer Fernbedienung zu erfahren. Dann müssen Sie mit Text angeben, welche Schaltfläche Sie LIRC beibringen möchten, und auf den Empfänger leuchten. Ich empfehle, dass Sie mindestens die folgenden Schaltflächen unterrichten: KEY_UP KEY_DOWN
# cd /storage/.config
# irrecord -d /dev/lirc0 lircd.conf





KEY_LEFT
KEY_RIGHT
KEY_OK
KEY_PLAY
KEY_EXIT
KEY_STOP
KEY_INFO
KEY_EPG

Die gesamte Liste der im System verfügbaren Tasten kann über den folgenden Befehl abgerufen werden: Auf der Fernbedienung können Sie eine beliebige für Sie geeignete Taste auswählen. Bei den meisten Fernsehgeräten im HDMI-Modus tun die meisten Tasten nichts, was natürlich zur Hand ist. Aus diesem Grund sollten wir die Datei lircd.conf mit den Parametern Ihrer Fernbedienung abrufen. Wir starten die Karte neu und versuchen, die Fernbedienung zu verwenden. Sie können den Player auch ein- und ausschalten. Schließen Sie dazu den Empfänger an den zweiten Pin des Raspberry PI GPIO1 für Raspberry PI 1 oder GPIO3 für Raspberry PI 2 an. Auf beiden Platinen befinden sich diese Pins an derselben Stelle am Platinenanschluss:
# irrecord -list namespace






Wenn Sie diesen Pin mit Masse verbinden, können Sie die Platine im ausgeschalteten Zustand aktivieren. Mit dieser Verbindung können Sie die Taste KEY_POWER programmieren. Der Player wird ausgeschaltet, wenn Sie darauf klicken, und er wird durch jedes Signal einer beliebigen Fernbedienung eingeschaltet.

Wir sammeln das Gerät ernsthafter
Ich wollte ein gründlicheres Gerät mit dem Erscheinungsbild des Werksgeräts erstellen und eine Festplatte hinzufügen. Ich schaute in die Speisekammer und fand einen alten Satellitenempfänger. Im Inneren gibt es bereits eine ausreichende Stromversorgung für alle Stromkomponenten, einen IR-Signalempfänger und einen Ausschalter an der Rückwand. Aufgrund der bereits installierten Sieben-Segment-Anzeige besteht auch die Möglichkeit, eine Uhr auf der Frontplatte anzubringen. Und natürlich ist der Fall selbst für unsere Zwecke großartig. Der Satellitenempfänger kann durch einen alten DVD- oder VHS-Player ersetzt werden, auch wenn er nicht funktioniert.
, — , . / — , 220 .

Wir öffnen den Fall des Empfängers / Videorecorders. Zunächst müssen wir sicherstellen, dass das Netzteil einen 5-V-Ausgang hat, der die erforderliche Leistung abgeben kann. Dazu überprüfen wir mit einem Multimeter das Vorhandensein von 5 V und verfolgen dann, durch welche Komponenten diese 5 V erhalten werden. Wenn die Elementbasis des Gleichrichters und der Durchmesser der Transformatorwicklung des Netzteils 2-3 Ampere aushalten können, haben wir Glück - es gibt eine Quelle, andernfalls müssen Sie die Quelle im Gehäuse gegen eine leistungsstärkere austauschen. Dann nehmen wir die Hauptplatine / das Bandlaufwerk / das optische Laufwerk heraus und senden es zurück an die Speisekammer - es wird sich als nützlich erweisen. Im Inneren lassen wir nur die Netzteilplatine und die Platine mit einer Frontplatte, auf der sich ein IR-Empfänger befindet.

Wählen Sie nun, wo Sie den Raspberry Pi selbst installieren möchten. Die Auswahl hier ist recht einfach: Die Seite der Platine mit HDMI sollte außerhalb des Gehäuses liegen, die Seite mit den USB-Anschlüssen muss innen angebracht werden, um interne Komponenten anzuschließen. Außerdem benötigen wir zumindest einen gewissen Zugriff auf die microSD-Karte, falls die Firmware geändert wird. Am Gehäuse des Empfängers befinden sich Öffnungen für Cinch-Anschlüsse. Wir werden die Platine so platzieren, dass der HDMI-Anschluss von außen so gut wie möglich zugänglich ist. Auf der gleichen Seite befinden sich die Ausgänge der Soundkarte und des Micro-USB, die im Peripheriemodus arbeiten. Wir sind nicht an diesen Anschlüssen interessiert, wir werden Strom von außen über den GPIO-Hauptanschluss der Platine liefern.

Wir markieren, wo Sie etwas zuschneiden müssen, damit der HDMI-Anschluss von der Außenseite des Gehäuses frei in die Platine eingeführt wird, und skizzieren vier Löcher für die Installation der Platine. Ich habe folgende Racks verwendet:


Die Racks des Motherboards störten, und ich entfernte sie mit Hilfe einer Zange. Manipulationen müssen sorgfältig durchgeführt werden. Mit einer unangenehmen Bewegung können Sie das Gehäuse selbst leicht biegen. Wir bohren, sägen, befestigen das Gestell mit geeigneten Schrauben und das Brett selbst daran.


Jetzt müssen Sie einen Platz für die Festplatte finden. Hier ist die Anforderung recht einfach: Sie müssen einige freie Zentimeter von der Seite des SATA-Anschlusses im Gehäuse lassen, da dort ein Adapter eingesetzt wird. Die Festplatte hat Gewinde an der Unterseite und an den Seiten der Festplatte. Winchester muss leicht angehoben werden, damit es nicht auf dem Metall liegt. Ich habe das Problem sehr einfach gelöst - ich habe Schrauben genommen, die für das untere Gewinde geeignet sind, aber etwas länger als nötig, und den Abstand zwischen dem Gehäuse und der Festplatte mit größeren Muttern gelegt.

Jetzt müssen wir einen SATA-USB-Konverter oder einen alten Behälter für die Festplatte finden, aus dem ein solcher Konverter herausgezogen werden kann. Ich hatte einen Container, aber leider stellte sich heraus, dass er nicht funktioniert. Ich musste zum Laden für den SATA USB Konverter laufen. Wir werden den USB-Anschluss in den Raspberry PI einstecken, aber um die Platine nicht mit sehr starken Strömen zu beladen, die die Festplatte benötigt, insbesondere wenn Sie die Spindel drehen, müssen Sie zusätzliche Energie direkt vom Netzteil leiten. In meinem Fall hatte der Adapter ein Kabel mit zwei USB-Anschlüssen. Ich habe einen davon direkt an das Netzteil angeschlossen, indem ich den USB-Antwortanschluss in der Nähe des Netzteils verlötet habe.


Zwei weitere Dinge, über die Sie sofort nachdenken sollten. Der erste ist, wo und wie sich der externe USB-Anschluss befindet. Die zweite Möglichkeit besteht darin, den Wi-Fi-Adapter zu platzieren oder, wenn Sie nur eine Ethernet-Verbindung implementieren möchten, den Ethernet-Anschluss an der Wand des Gehäuses anzubringen (wenn Sie die Karte mit der Kante dieses Anschlusses am Gehäuse platzieren, können Sie keine USB-Geräte von innen anschließen). Das Ethernet kann verlängert werden, indem eine herkömmliche Steckdose in das Gehäuse eingesetzt und ein kurzes Kabel mit einem Stecker gecrimpt wird.

Es werden jetzt sehr kleine USB-WLAN-Dongles verkauft, aber Sie müssen diese nicht in ein Metallgehäuse stecken - das Signal kann schlecht übertragen werden. Sie können ein kurzes USB-Verlängerungskabel nehmen, den USB-Anschluss an der Rückseite des Gehäuses anbringen und dort einstecken. Es gibt auch USB-Adapter mit abnehmbaren Antennen. Sie können den RMA-Anschluss an der Rückseite des Gehäuses verlängern und die Antenne dort anschrauben. Ich hatte einen ziemlich alten und daher einen ziemlich großen USB-WLAN-Adapter mit einer Rundumantenne und einem Mini-USB-Eingang. Ich konnte es wegen seiner Größe nirgendwo hinstellen und entschied mich, es im Geschäftsleben einzusetzen. Er entfernte das Gehäuse - seine Form erlaubte es nicht, die Antenne von außen anzubringen. Die Gebühr war ziemlich hoch und ich musste sorgfältig über die Platzierung nachdenken. Glücklicherweise stellte sich heraus, dass es sehr dünn war, und ich entschied mich, es über die USB-Anschlüsse des Raspberry Pi zu stecken. Der RMA-Anschluss ist ausgefallenauf eine Mutter gedreht und in das Gehäuse ein hohes Rack für die Platine legen. Der Zugang zu USB blieb bestehen, und die Antenne wurde über das Gehäuse angehoben. Großartig!


Jetzt müssen Sie das USB-Verlängerungskabel irgendwie an der Vorderseite befestigen und sicherstellen, dass es nichts im Gehäuse stört. In meinem Fall hatte der Empfänger eine Tür für Zugangskarten, und ich beschloss, einen Stecker dahinter zu stecken - um keinen Staub zu sammeln! Deshalb habe ich es nicht zu sorgfältig geschnitten und es hinten mit Heißkleber gefüllt.


Interessanter ist die Situation mit der Frontplatte - es gibt viele Möglichkeiten, woraus sie besteht. Ich musste die dynamische Anzeige von Sieben-Segment-Indikatoren mithilfe von DMA implementieren (direkter Speicherzugriff, die direkte Implementierung der dynamischen Anzeige über GPIO-Ports würde zu viele CPU-Ressourcen verbrauchen und die Helligkeit der Segmente wäre aufgrund der Aktivität des Betriebssystems ungleichmäßig). Dies ist jedoch bereits ein Thema für einen separaten Artikel, und außerdem können sich solche Boards radikal unterscheiden. Daher bieten wir hier das Recht, dem Leser unser kreatives Potenzial zu zeigen. Sie können den Quellcode der Implementierung für mein Board studieren. Im einfachsten Fall können Sie einfach die zum IR-Empfänger führenden Spuren abschneiden und mit drei Drähten direkt darauf löten. Ich stelle nur fest, dass ich ein IDE-Kabel verwendet habe, um es mit dem GPIO-Anschluss der Platine zu verbinden. Es passt perfekt auf den Raspberry Pi-Anschluss und die Drähte können problemlos mit anderen Komponenten verlötet werden.

Am Ende habe ich so ein Gerät bekommen:


Anpassen


Wenn Sie beim Einschalten ein farbiges Quadrat in der oberen rechten Ecke des Bildschirms sehen, reicht der Strom für den Raspberry Pi nicht aus - entweder ein schwaches Netzteil, zu dünne Kabel oder USB-Peripheriegeräte benötigen zu viel Strom. Im ersten Fall hilft es, nur das Netzteil durch ein leistungsfähigeres zu ersetzen. Im zweiten Fall kann das Problem leicht gelöst werden, indem die Drähte durch dickere ersetzt werden oder indem mehrere Kerne parallel verwendet werden. Im dritten Fall wird das Problem gelöst, indem USB-Geräte direkt von der Stromversorgung gespeist werden oder beispielsweise ein USB-Hub installiert wird, der eine externe Stromquelle anschließen kann.

Sie werden wahrscheinlich auch sehen, dass Ihre Festplatte als externes Flash-Laufwerk an das System angeschlossen ist. Machen wir es zum Hauptspeicher im Betriebssystem. Beim ersten Start nutzt OpenElec automatisch den gesamten freien Speicherplatz auf der microSD-Karte für den Datenabschnitt, der dann als / storage bereitgestellt wird. Die erfolgreichste Entscheidung scheint mir, die gesamte Festplatte als / Speicher zu verwenden. Formatieren Sie dazu die Festplatte und erstellen Sie mit dem ext3 / 4-Dateisystem eine Partition darauf. Dies kann direkt auf dem Player mit den Dienstprogrammen parted und mkfs erfolgen. Mit den folgenden Befehlen wird der gesamte Inhalt der Festplatte gelöscht und eine ext4-Partition erstellt: Dazu müssen Sie sich über SSH beim Player anmelden. Hängen Sie dann die neue Partition irgendwo ein:

# umount /dev/sda1
# parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel GPT
mklabel GPT
Warning: The existing disk label on /dev/sda will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes
yes
(parted) mkpart primary 2048s 100%
mkpart primary 2048s 100%
(parted) q
q
Information: You may need to update /etc/fstab.
# mkfs.ext4 /dev/sda1



# mkdir /tmp/hdd
# mount /dev/sda1 /tmp/hdd


Kopieren Sie den gesamten Inhalt von / storage auf eine neue Partition, um den aktuellen Status beizubehalten : Hängen Sie die Partition aus und löschen Sie gegebenenfalls den Ordner: Jetzt müssen Sie angeben, welches Laufwerk beim Booten bereitgestellt werden soll. Sie können dies tun, indem Sie die Befehlszeile der Kernel-Parameter anpassen. Zuerst ermitteln wir jedoch die UUID der Partition unserer Festplatte: Kopieren Sie die UUID der Partition in die Zwischenablage. Stellen Sie nun das Dateisystem erneut mit der Kernelkonfiguration zum Schreiben bereit und beheben Sie es: Ersetzen Sie in der Datei den Datenträgerparameter durch die UUID unserer Datenträger. Der Inhalt der Datei sollte ungefähr so ​​aussehen: Nach dem Neustart verwendet der Player die Festplatte als / Speicher, und der Abschnitt auf der Speicherkarte kann gelöscht werden, damit er beim Booten nicht automatisch bereitgestellt wird:
# cp -rf /storage/. /tmp/hdd



# umount /dev/sda1
# rmdir /tmp/hdd



# blkid /dev/sda1



# mount -o rw,remount /flash
# nano /flash/cmdline.txt



boot=/dev/mmcblk0p1 disk=UUID=95013338-89b1-43af-8471-9b30efc85d98 quiet



# parted -s /dev/mmcblk0 rm 2


Hier ist so ein lustiges Wochenende, das ich hatte. Vergessen Sie nicht, dass sich das GNU / Linux-Betriebssystem an Bord dieses Media Players befindet und Sie es nach Belieben selbst ändern / ergänzen können. Sie können auch einige Aufgaben der Hausautomation mit demselben Gerät lösen.

Und schließlich ein Video der Rede des Autors eines Artikels über das Gerät.

Habt eine schöne Aussicht!

Source: https://habr.com/ru/post/de396967/


All Articles