Inhaltsverzeichnis:

Retro Idiot Box - Gunook
Retro Idiot Box - Gunook

Video: Retro Idiot Box - Gunook

Video: Retro Idiot Box - Gunook
Video: Un-Armed Pirates, Intruders, & Thieves:Self Defense for Sailboats (Patrick Childress Sailing #43) 2024, Juli
Anonim
Retro-Idiotenbox
Retro-Idiotenbox

Ich fand einen alten tragbaren Magnavox-Fernseher aus dem Jahr 1984 in einem Regal in meinem örtlichen Secondhand-Laden. Ich dachte mir, "oh NEAT!" Bei weiterer Inspektion bemerkte ich ein Preisschild von 15 Dollar, also beschloss ich, es mit nach Hause zu nehmen und etwas Schickes daraus zu machen. Ich erinnere mich, dass ich als Kind Wiederholungen all der großen Klassiker in herrlichem Schwarzweiß gesehen habe und dies wieder in die Realität umsetzen wollte.

Das Problem ist, dass es keine analogen Stationen mehr gibt und diese völlig unfähig sind, eine ATSC-Decodierung oder eine digitale Decodierung durchzuführen. Ich bemerkte das Vorhandensein eines AV-Anschlusses an der Seite und hatte ein paar Himbeer-Pis herumliegen, also beschloss ich, mich auf ein Abenteuer zu begeben, um herauszufinden, wie ich Kanäle dorthin streamen könnte. Ich möchte es auch scharf aussehen lassen. Ich werde es nicht mit den 9 D-Zellen-Batterien betreiben, also kann ich die rpi im Batteriefach mit einer Vielzahl anderer Leckereien verstecken.

Schritt 1: Holen Sie sich eine gute IPTV-Liste

Holen Sie sich eine gute IPTV-Liste
Holen Sie sich eine gute IPTV-Liste

Die tägliche IPTV-Liste bietet eine fantastische Auswahl an kostenlosen IPTV-Sendern, die nach Ländern geordnet sind. Wählen Sie das gewünschte Land aus und laden Sie die m3u-Datei herunter.

Für die darin enthaltene Software ist m3u ein erforderliches Format. Weitere Informationen zu den Besonderheiten des Formats finden Sie hier.

Schritt 2: Vorläufiges Code-Experiment

Der Python-Code, den wir schreiben werden, parst die m3u-Datei in eine Liste von Stationen.

#!/usr/bin/python3

import subprocess from sys import argv class Station: def _init_(self): self.channel = 0 self.name = '' self.address = '' channel_list = with open('./us-m3upplaylist-2020-08- 17-1.m3u', 'r') als m3u: i = 0 für Zeile in m3u: if line.startswith('#EXTINF'): this = Station() this.name = line.split(', ') [1] line = next(m3u) this.address = line.strip() this.channel = i channel_list.append(this) i = i + 1 process = subprocess. Popen(['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list[int(argv[1])].address])

Lassen Sie uns das aufschlüsseln.

#!/usr/bin/python3

Dies teilt der bash mit, dass wir Python3 verwenden werden, um diese Datei zu interpretieren.

import subprocessfrom sys import argv

Wir benötigen das Unterprozessmodul, um unsere vlc-Instanz zu starten, und wir benötigen argv, um auszuwählen, in welchen Kanal wir vlc starten.

Klasse Station: def _init_(self): self.channel = 0 self.name = '' self.address = ''

Dies definiert eine Klasse namens Station. Jeder Kanal hat eine Kanalnummer, den Namen des Kanals aus der m3u-Datei und eine Adresse, von der aus dieser Kanal streamt.

channel_list =

Dies ist eine Liste, die alle Kanäle speichert, die aus der m3u-Datei geparst wurden.

with open('./us-m3upplaylist-2020-08-17-1.m3u', 'r') as m3u: i = 0 für Zeile in m3u: if line.startswith('#EXTINF'): this = Station () this.name = line.split(', ')[1] line = next(m3u) this.address = line.strip() this.channel = i channel_list.append(this) i = i + 1

Diese Schleife öffnet die m3u-Wiedergabeliste und nimmt die Daten auf. Die Zeilen der m3u-Datei, an denen wir interessiert sind, beginnen mit #EXTINF. Dies zeigt einen neuen Eintrag in der Wiedergabelistendatei an. Der nächste interessante Wert ist der Name, der sich in derselben Zeile wie #EXTINF befindet, jedoch mit einem Komma dazwischen. Die folgende Zeile dieses speziellen m3u ist die Adresse des Streams. Es wird ein Iterator "i" verwendet, um zu zählen, welcher Kanal welcher ist. Diese Schleife durchläuft die gesamte m3u-Datei und füllt die channel_list mit Sendern.

process = subprocess. Popen(['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list[int(argv[1])].address])

Die Unterprozessbibliothek ermöglicht Python, Prozesse (Programme) aufzurufen und gibt eine PID (Prozess-ID) zurück. Dadurch kann Python das Starten und Schließen von Programmen "korrekt" verwalten, ohne die Verlaufsdatei zu füllen oder mehr beliebigen Code mit generischen "System"-Aufrufen ausführen zu lassen. Jedes Element des Arrays, das als Argument für Popen verwendet wird, entspricht der Eingabe in der Befehlszeile.

vlc --loop --intf dummy --Vollbildadressen

Der obige Befehl soll ausgeführt werden, wobei die Option --loop einige Probleme mit dem Anhalten des Streams beim Laden der nächsten Chunks behebt (seltsame m3u8-Probleme), --intf dummy startet vlc ohne die Schnittstelle, nur einen Bildschirm, --fullscreen startet das Video im Vollbildmodus (NO WAY!), und die Adresse ist die Adresse des Streams. Wie Sie im Code sehen können, liefern wir die Adresse aus der Kanalnummer der Liste, die zur Laufzeit über die argv-Anweisung bereitgestellt wird. Speichern Sie diese Datei als tv_channels.py, ändern Sie den Speicherort der Wiedergabeliste in der Python-Datei so, dass er auf Ihre Wiedergabeliste verweist, und führen Sie den Code wie folgt aus:

python tv_channels.py

Schritt 3: GPIO hinzufügen

GPIO hinzufügen
GPIO hinzufügen
GPIO hinzufügen
GPIO hinzufügen

Das Schema zeigt die beiden GPIO-Pins, die für die Tasten verwendet werden, und jeder hat einen Pullup-Widerstand, um den GPIO-Pin nach dem Drücken der Taste hochgezogen zu halten. Der zuvor definierte Code kann verfeinert werden, um die Operation durch Hinzufügen von GPIO-Funktionen ein wenig nahtloser zu gestalten. Dies ermöglicht es uns, den Kanal mit Tasten zu ändern, anstatt mit einer Tastatur und argv-Anweisungen, genau wie bei einem Realsies-TV.

Als erstes fällt auf, dass ich den Fernseher als Klasse definiert habe. Um ein Fernseher zu sein, müssen wir auf einem aktuellen Kanal sein, eine Liste möglicher Kanäle haben und die Möglichkeit haben, die Kanäle zu ändern. In diesem Beispiel besteht die einzige Methode zum Wechseln von Kanälen darin, die Kanalliste nach oben und in der Kanalliste nach unten zu verschieben. Sobald der Kanal festgelegt ist, müssen wir VLC auf dem Kanal starten, den wir sehen möchten.

#!/usr/bin/python3

from time import sleep import subprocess from sys import argv from gpiozero import Button class Station: def _init_(self): self.channel = 0 self.name = '' self.address = '' self.process = '' class Television: def _init_(self, filename): self.current_channel = 0 self.channel_list = self.build_channel_list(filename) self.start_channel() def build_channel_list(self, filename): with open(filename, 'r') as m3u: i = 0 für Zeile in m3u: if line.startswith('#EXTINF'): this = Station() this.name = line.split(', ')[1] line = next(m3u) this.address = line. strip() this.channel = i self.channel_list.append(this) i = i + 1 def channel_up(self): self.current_channel = self.current_channel + 1 if self.current_channel > len(self.channel_list): self. current_channel = len(self.channel_list) self.start_channel() def channel_down(self): self.current_channel = self.current_channel - 1 if self.current_channel < 0: self.current_channel = 0 self.start_channel() def start_channel(self): versuchen: self.process. kill() außer: pass print('starting channel %d' % self.current_channel) self.process = subprocess. Popen(['vlc', '-q', '--loop', '--intf', ' dummy', '--fullscreen', self.channel_list[self.current_channel].address]) this = Television('./us-m3upplaylist-2020-08-17-1.m3u') channel_UP = Button(18) channel_DN = Button (23) während True: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

Diese Code-Iteration weist einige Verbesserungen auf. es verwendet jetzt ein Modul namens gpiozero, das vom Raspberry Pi benötigt wird, um einfach auf die Funktionalität der GPIO-Pins zuzugreifen

sudo apt-get install python3-gpiozero

oder

sudo pip install gpiozero

Wie in meinem Code zu sehen, habe ich GPIO 18 und GPIO 23 für Kanal UP bzw. Kanal DOWN gewählt. Die gpiozero-Bibliothek hat eine nette Klasse für Button-Funktionen für when_pressed, is_pressed, when_held, etc. Das macht es ziemlich einfach. Ich habe mich für when_pressed entschieden, was sich auf eine Callback-Funktion bezieht, die ausgeführt wird, wenn dieses Signal erkannt wird.

Die letzte große Änderung ist die Aufnahme der Option ' -q ' in den VLC-Unterprozessaufruf. Dies führt einfach vlc ohne die gesamte Ausgabe an das Terminal aus, um es übersichtlich zu halten, damit wir die informativen print-Anweisungen im Code sehen können.

Schritt 4: Integrieren Sie die Hardware, um scharf auszusehen

Integrieren Sie die Hardware, um scharf auszusehen
Integrieren Sie die Hardware, um scharf auszusehen
Integrieren Sie die Hardware, um scharf auszusehen
Integrieren Sie die Hardware, um scharf auszusehen
Integrieren Sie die Hardware, um scharf auszusehen
Integrieren Sie die Hardware, um scharf auszusehen

Ich habe noch nicht herausgefunden, wie ich dies erreichen möchte, und es wird eine einzigartige Lösung für jedes verwendete Fernsehmodell sein. Ich muss gründlich darüber nachdenken und im Fernseher herumstöbern, um eine gute Stromquelle für den Pi zu finden, sobald ich den Computer in das massive Batteriefach gepackt habe. Ich habe mir auch überlegt, die Uhrentasten für die Kanalauswahl zu verwenden, da diese schon schön am Fernseher platziert sind und die Uhr sowieso nicht funktioniert. Ich werde mehr posten, wenn ich eine gute Lösung gefunden habe, aber hier wird sich mein Projekt stark von allen anderen unterscheiden. Genießen Sie die Real-TV-ähnliche IPTV-Integration!

Schritt 5: Pi-Power

Pi-Leistung
Pi-Leistung

Für das TV-Modell, das ich gefunden habe, benötigt es eine 12-V-Stromversorgung. Ich habe die Platine untersucht, aber keine offensichtlichen Leistungsregler für 5 V gesehen, daher ist der offensichtlichste Ort, um eine stabile Stromversorgung zu erhalten, auf der Platine, wo der Hohlstecker für die 12 V eingeht. Es gibt ein offensichtliches Problem damit. Wir wollen den Pi nicht braten, also brauchen wir einen Leistungsregler. Ich habe mich für den MP2315 Step-Down Power Converter entschieden. Es ist spottbillig und einfach zu bedienen. Wir werden den 12VDC-Eingang vom Hohlstecker auf der Platine an die IN+- und GND-Pins des Konverters und den VO+ an Pin 2 am Raspberry Pi sowie einen GND anlöten.

BEVOR Sie dies tun, stellen Sie sicher, dass der Konverter eingeschaltet ist und stellen Sie sicher, dass die richtigen 5 V aus dem Ausgang kommen. Ich habe die einfachste Option mit der festverdrahteten einstellbaren Spannung gewählt. Der Trimmer passt die Spannung an, daher habe ich die Spannungsausgabe mit einem Multimeter beobachtet, während ich den Trimmer mit einem Schraubendreher eingestellt habe.

Schritt 6: Integrieren von Leistung

Integrationskraft
Integrationskraft
Integrationskraft
Integrationskraft
Integrationskraft
Integrationskraft

Nachdem wir uns um den Fernseher gekümmert hatten, wurde entschieden, dass der beste Ort, um Strom zu ziehen, der Negativ des Hohlsteckers und des Fernsehers EIN / AUS-Schalter ist, was bedeutet, dass wir die Streams mit dem Fernseher ein- und ausschalten können, eher das Ständige Stromversorgung des Pi durch Ziehen direkt vom Fassanschluss.

Die Drähte wurden eingelötet und entlang der Seite der Platinen neben dem Gehäuse geführt, bis sie die Rückseite des Geräts erreichten, wo sie durch ein Loch in der Rückseite des Batteriefachs geführt wurden. Nach der Durchführung können wir die Kabelenden vorbereiten und an den Leistungsregler anlöten. Ich habe es auf 5V abgestimmt, um das Pi mit Strom zu versorgen, und lötete Header-Pins daran, so dass wir Buchse-zu-Buchse-Jumper vom Leistungsregler direkt zum GPIO-Header-Set des Pi führen können. Dies wird normalerweise nicht empfohlen, da der Pi im Allgemeinen über die UBS mit Strom versorgt wird, die einen Inline-Regler zur Konditionierung der 5 V hat, aber da die Leistung bereits geregelt wird, sollte dies in Ordnung sein.

Dadurch entsteht etwas Rauschen auf den Audioleitungen, da im System eine Masseschleife vorhanden ist. Ich habe auf der ganzen Platine viele Strom- und Massepunkte ausprobiert, in der Hoffnung auf eine einfache Antwort, aber keine gefunden. Ich habe auch ein microUSB-Kabel an den Schaltregler gelötet, um zu sehen, ob das Erzwingen der Stromversorgung durch die internen Regler des Pi das Problem lösen würde. Es tat es nicht. Die Lösung wird in einigen Audio-Erdungstransformatoren liegen. Diese wurden eher bestellt als gebaut, weil sie billig und schön verpackt sind. Sie können sie in den meisten Auto-Audio-Läden oder -Abteilungen abholen. Das habe ich gewählt.

Schritt 7: Langzeit-Tastenlösung

Langzeit-Tastenlösung
Langzeit-Tastenlösung
Langzeit-Tastenlösung
Langzeit-Tastenlösung

Zweifellos bleiben die Tasten nicht auf einem Steckbrett, daher muss es eine dauerhaftere Lösung geben. Ich schnappte mir ein altes Protoboard und warf die Schaltung zusammen mit einigen Header-Pins, um den Zugriff auf die Signale zu erleichtern. Hier werden alle unterschiedlicher Meinung sein, wie die Tasten angebracht oder montiert werden. Ich entscheide mich für ein Protoboard und befestige sie einfach so am Chassis, dass der Griff, der zum Tragen über den Bildschirm schwingt, nicht stört. Fühlen Sie sich frei, das Design zu verbessern, indem Sie ein 3D-gedrucktes Gehäuse hinzufügen, das die Montage erleichtert, Schrauben und Muttern verwendet, ausgefallene Klebstoffe verwendet, Originalknöpfe integriert, was auch immer. Solange es funktioniert, gibt es keine falschen Antworten.

Diese werden an der Außenseite des Gehäuses montiert und der Raspberry Pi wird in das sehr geräumige Batteriefach gesteckt, sodass ein kleines Loch gebohrt werden muss, damit Kabel aus dem Batteriefach herausgeführt werden können.

Schritt 8: Endgültige Passformprüfung

Endgültiger Fit-Check
Endgültiger Fit-Check

Die gesamte Ausrüstung muss ein letztes Mal auf Passgenauigkeit überprüft werden, um genau zu sehen, wo alle Löcher am Chassis angebracht werden müssen und welche Löcher usw. Darüber hinaus sollte berücksichtigt werden, wo die Komponenten für eine optimale Konnektivität und einfachen Zugriff platziert werden sollen. Lange Rede, kurzer Sinn, stellen Sie sicher, dass alles dort passt, wo Sie denken, bevor Sie Ihr Projekt irreparabel beschädigen und den Spachtel entfernen müssen.

Schritt 9: Endgültige Integration

Endgültige Integration
Endgültige Integration
Endgültige Integration
Endgültige Integration
Endgültige Integration
Endgültige Integration

Jetzt ist die gesamte Hardware dort, wo sie sein muss, und sie passt genau so gut wie ein Käfer in einen Teppich. Lasst uns Dinge schneiden! Ich habe eine Stelle im Batteriefach identifiziert, an der ich die AV-Kabel mit einer kleinen Vertiefung im Kunststoff herausführen konnte. Ich habe es mit einer Schleifmaschine zerkleinert. Es hat ziemlich kurzen Prozess gemacht. Ich benutzte einen Dremel, um mehr Plastik zu schleifen, damit es ziemlich gut für die Kabel passt.

Die letzte Komponente ist der Kanalwähler. Ich habe ein kleines Loch in das Batteriefach gebohrt und die Header-Kabel einzeln herausgeführt. Die Knöpfe wurden angeschlossen, und ich befestigte das Protoboard mit zwei Hälften von vorgeklebtem Klettband am Kunststoffchassis. Ich verstehe, dass es ungefähr 1200 bessere Möglichkeiten gab, dies zu tun, aber das funktionierte und ich hatte alles, was ich brauchte, zur Hand.

Schritt 10: Genießen Sie Ihr Vintage IPTV

Genießen Sie Ihr Vintage-IPTV
Genießen Sie Ihr Vintage-IPTV
Genießen Sie Ihr Vintage-IPTV
Genießen Sie Ihr Vintage-IPTV
Genießen Sie Ihr Vintage-IPTV
Genießen Sie Ihr Vintage-IPTV

Das fasst es ungefähr zusammen. Finden Sie Shows und haben Sie Spaß beim Anschauen. Sitzen Sie jedoch nicht zu nah. Sie werden Ihr Gehirn verrotten!

Es gibt viel Raum, dieses Projekt zu verbessern, also nimm es in die gewünschte Richtung, aber es hat Spaß gemacht, so weit zu kommen. Was mich betrifft, führe ich dies beim Neustart von einem Cronjob aus, damit der stdout die Nachrichten aus dem Python-Skript nicht erfasst. Ich würde das gerne beheben, damit ich weiß, auf welchem Kanal ich bin. Eine weitere gute Ergänzung ist ein drahtloser Tastatur-Dongle auf dem Pi. Auf diese Weise können Sie das WLAN-Netzwerk ändern, wenn Sie Ihr Haus mit dem Fernseher verlassen. Ungeachtet. Es war ein lustiges Projekt, und ich kann es kaum erwarten, mit dem nächsten zu beginnen.

Empfohlen: