Table des matières:

Retro Idiot Box : 10 étapes
Retro Idiot Box : 10 étapes

Vidéo: Retro Idiot Box : 10 étapes

Vidéo: Retro Idiot Box : 10 étapes
Vidéo: How to Get 80% Off Menswear Every Time: My Secret Step-By-Step Process 2024, Juillet
Anonim
Boîte d'idiot rétro
Boîte d'idiot rétro

J'ai trouvé un vieux téléviseur portable Magnavox de 1984 posé sur une étagère dans ma friperie locale. Je me suis dit, "oh NEAT!" Après une inspection plus poussée, j'ai remarqué une étiquette de prix de 15 $ dessus, alors j'ai décidé de le ramener à la maison et d'en faire quelque chose de chic. Je me souviens avoir regardé des rediffusions quand j'étais enfant de tous les grands classiques en noir et blanc glorieux, et je voulais en faire à nouveau une réalité.

Le problème est qu'il n'y a plus de stations analogiques là-bas, et cela est tout à fait incapable de faire un décodage ATSC ou un décodage numérique. J'ai remarqué la présence d'une connexion AV sur le côté et j'avais quelques raspberry pi, alors j'ai décidé de me lancer dans une aventure pour comprendre comment je pouvais diffuser des chaînes vers cela. Je veux aussi le rendre net. Je ne l'utiliserai pas sur les 9 piles D, je peux donc cacher le rpi dans le compartiment à piles avec une foule d'autres goodies.

Étape 1: Obtenez une bonne liste IPTV

Obtenez une bonne liste IPTV
Obtenez une bonne liste IPTV

Daily IPTV List propose une fantastique sélection de stations IPTV gratuites organisées par pays. Sélectionnez le pays de votre choix et téléchargez le fichier m3u.

Pour le logiciel qui s'y trouve, m3u est un format requis. Vous pouvez en savoir plus sur les spécificités du format ici.

Étape 2: Expérience de code préliminaire

Le code python que nous allons écrire analyse le fichier m3u dans une liste de stations.

#!/usr/bin/python3

importer le sous-processus de sys import argv class Station: def _init_(self): self.channel = 0 self.name = '' self.address = '' channel_list = avec open('./us-m3uplaylist-2020-08- 17-1.m3u', 'r') comme m3u: i = 0 pour la ligne dans 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])

Décomposons cela.

#!/usr/bin/python3

Cela indique à bash que nous utiliserons python3 pour interpréter ce fichier.

importer le sous-processus de sys importer argv

Nous aurons besoin du module de sous-processus pour lancer notre instance vlc, et nous aurons besoin d'argv pour choisir sur quel canal nous lancerons vlc.

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

Cela définit une classe appelée Station. Chaque chaîne aura un numéro de chaîne, le nom de la chaîne tiré du fichier m3u et une adresse d'où cette chaîne est diffusée.

liste_canaux =

Il s'agit d'une liste qui stockera tous les canaux analysés à partir du fichier m3u.

avec open('./us-m3uplaylist-2020-08-17-1.m3u', 'r') comme m3u: i = 0 pour la ligne dans 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

Cette boucle ouvre la liste de lecture m3u et ingère les données. les lignes du fichier m3u qui nous intéressent commencent par #EXTINF, cela indique une nouvelle entrée dans le fichier de liste de lecture. La prochaine valeur intéressante est le nom, qui se trouve sur la même ligne que #EXTINF, mais avec une virgule entre eux. La ligne suivante de ce m3u particulier est l'adresse du flux. Il y a un itérateur "i" utilisé pour compter quel canal est lequel. Cette boucle parcourt tout le fichier m3u et remplit channel_list avec des stations.

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

la bibliothèque de sous-processus permet à python d'appeler des processus (programmes) et renvoie un PID (ID de processus). Cela permet à python de gérer le lancement et la fermeture de programmes "correctement" sans remplir le fichier historique, ou de permettre l'exécution de code plus arbitraire avec des appels "système" génériques. Chaque élément du tableau utilisé comme argument de Popen est tel que tapé dans la ligne de commande.

vlc --loop --intf dummy --adresses plein écran

La commande ci-dessus est ce que l'on souhaite exécuter, avec l'option --loop résolvant certains problèmes de pause du flux pendant le chargement des morceaux suivants (problèmes étranges de m3u8), --intf dummy démarre vlc sans l'interface, juste un écran, --fullscreen lance la vidéo en mode plein écran (NO WAY!), et l'adresse est l'adresse du flux. Comme vous pouvez le voir dans le code, nous fournissons l'adresse à partir du numéro de canal de la liste, qui est fourni au moment de l'exécution via l'instruction argv. Enregistrez ce fichier sous le nom tv_channels.py, modifiez l'emplacement de la playlist dans le fichier python pour qu'il pointe vers votre playlist, et vous pouvez exécuter le code comme suit:

python tv_channels.py

Étape 3: ajouter GPIO

Ajouter GPIO
Ajouter GPIO
Ajouter GPIO
Ajouter GPIO

Le schéma montre les deux broches GPIO utilisées pour les boutons, et chacune a une résistance de rappel pour maintenir la broche GPIO haute après avoir appuyé sur le bouton. Le code précédemment défini peut être affiné pour rendre l'opération un peu plus transparente en ajoutant la capacité GPIO. Cela nous permet de changer de chaîne avec des boutons, plutôt qu'avec un clavier et des instructions argv, tout comme un téléviseur pour realsies.

La première chose à noter est que la télévision est définie comme une classe. Pour être une télévision, nous devons être sur une chaîne actuelle, avoir une liste de chaînes possibles et avoir la possibilité de changer de chaîne. Dans cet exemple, la seule méthode pour changer de chaîne sera de remonter dans la liste des chaînes et de descendre dans la liste des chaînes. Une fois la chaîne décidée, nous devrons démarrer VLC sur la chaîne que nous voulons voir.

#!/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 Télévision: 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 pour la ligne dans 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): essayez: self.process. kill() sauf: pass print('canal de démarrage %d' % self.current_channel) self.process = subprocess. Popen(['vlc', '-q', '--loop', '--intf', ' dummy', '--fullscreen', self.channel_list[self.current_channel].address]) this = Télévision('./us-m3uplaylist-2020-08-17-1.m3u') channel_UP = Bouton (18) channel_DN = Button(23) tant que True: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

Cette itération de code a quelques améliorations. il utilisait maintenant un module appelé gpiozero qui est requis par le raspberry pi pour accéder facilement aux fonctionnalités des broches GPIO

sudo apt-get installer python3-gpiozero

ou

sudo pip installer gpiozero

Comme on le voit dans mon code, j'ai choisi GPIO 18 et GPIO 23 pour le canal UP et le canal DOWN respectivement. La bibliothèque gpiozero a une belle classe pour les fonctions des boutons pour when_pressed, is_pressed, when_held, etc. Cela rend les choses assez faciles. J'ai choisi le when_pressed, qui fait référence à une fonction de rappel à exécuter lorsque ce signal est détecté.

Le dernier changement majeur est l'inclusion de l'option ' -q ' dans l'appel de sous-processus VLC. Cela exécute simplement vlc sans toute la sortie vers le terminal pour le garder libre de tout encombrement afin que nous puissions voir les instructions d'impression d'information dans le code.

Étape 4: Intégrez le matériel pour avoir l'air net

Intégrez le matériel pour avoir l'air net
Intégrez le matériel pour avoir l'air net
Intégrez le matériel pour avoir l'air net
Intégrez le matériel pour avoir l'air net
Intégrez le matériel pour avoir l'air net
Intégrez le matériel pour avoir l'air net

Je n'ai pas compris comment je veux y parvenir, et ce sera une solution unique pour chaque modèle de téléviseur utilisé. Je dois réfléchir sérieusement à cela et sonder le téléviseur pour trouver une bonne source d'alimentation pour le pi une fois que j'ai fourré l'ordinateur dans l'énorme compartiment de la batterie. J'ai également envisagé d'utiliser les boutons de l'horloge pour la sélection des chaînes, car ils sont déjà joliment placés sur le téléviseur et l'horloge ne fonctionne de toute façon pas. J'en publierai plus quand je trouverai une bonne solution, mais c'est là que Mon projet divergera grandement de celui de tout le monde. Profitez de l'intégration IPTV de type télé réelle !

Étape 5: Puissance Pi

Puissance Pi
Puissance Pi

Pour le modèle de téléviseur que j'ai trouvé, il nécessite une alimentation 12V. J'ai sondé autour de la carte, mais je n'ai pas vu de régulateurs de puissance évidents pour 5V, donc l'endroit le plus évident pour obtenir une alimentation stable est sur la carte de circuit où le connecteur cylindrique pour le 12V entre. Il y a un problème évident avec cela. nous ne voulons pas faire frire le pi, nous aurons donc besoin d'un régulateur de puissance. J'ai choisi le convertisseur de puissance abaisseur MP2315. C'est très bon marché et simple à utiliser. Nous allons souder l'entrée 12VDC du connecteur cylindrique du PCB aux broches IN+ et GND du convertisseur, et le VO+ à la broche 2 du Raspberry Pi, ainsi qu'un GND.

AVANT cela, assurez-vous de mettre le convertisseur sous tension et assurez-vous que le 5V approprié sort de la sortie. J'ai choisi l'option la plus simple avec la tension réglable câblée. Le trimmer ajustera la tension, j'ai donc regardé la tension de sortie avec un multimètre pendant que j'ajustais le trimmer avec un tournevis.

Étape 6: Intégration de la puissance

Intégration de la puissance
Intégration de la puissance
Intégration de la puissance
Intégration de la puissance
Intégration de la puissance
Intégration de la puissance

Après avoir fouillé autour de la télévision, il a été décidé que le meilleur endroit pour prendre l'alimentation était du négatif du connecteur cylindrique et de l'interrupteur ON/OFF de la télévision, ce qui signifie que nous pouvons allumer et éteindre les flux avec la télévision, plutôt que alimentant constamment le pi en tirant directement sur le connecteur du baril.

Les fils ont été soudés et acheminés le long du côté des circuits imprimés à côté du boîtier jusqu'à ce qu'ils atteignent l'arrière de l'unité, où ils ont été acheminés à travers un trou situé à l'arrière du compartiment des piles. Une fois qu'ils ont été alimentés, nous pouvons préparer les extrémités du câblage et les souder au régulateur de puissance. Je l'ai réglé sur 5 V pour alimenter le pi et les broches d'en-tête soudées afin que nous puissions exécuter des cavaliers femelle à femelle du régulateur de puissance directement à l'ensemble d'en-tête GPIO du pi. Ce n'est normalement pas conseillé, car le pi est généralement alimenté par l'UBS, qui dispose d'un régulateur en ligne pour conditionner le 5V, mais comme l'alimentation est déjà régulée, cela devrait aller.

Il y a du bruit sur les lignes audio à cause de cela, car il y a une boucle de masse dans le système. J'ai essayé de nombreux points de puissance et de masse partout dans l'espoir d'une réponse facile, mais je n'en ai trouvé aucun. J'ai également soudé un câble microUSB au régulateur à mode commuté pour voir si forcer l'alimentation via les régulateurs internes du pi résoudrait le problème. Ce n'est pas le cas. La solution se trouvera dans certains transformateurs d'isolation de masse audio. Ceux-ci ont été commandés plutôt que construits, car ils sont bon marché et bien emballés. Vous pouvez les récupérer dans la plupart des magasins ou départements audio automatiques. C'est ce que j'ai choisi.

Étape 7: Solution de bouton à long terme

Solution de bouton à long terme
Solution de bouton à long terme
Solution de bouton à long terme
Solution de bouton à long terme

Sans aucun doute, les boutons ne resteront pas sur une planche à pain, il doit donc y avoir une solution plus permanente. J'ai attrapé un vieux protoboard et j'ai jeté le circuit avec des broches d'en-tête pour faciliter l'accès aux signaux. C'est là que tout le monde aura une différence d'opinion sur la façon de fixer ou de monter les boutons. Je choisis de les protoboarder et de les attacher simplement au châssis de manière à ce que la poignée qui bascule sur l'écran pour le transporter ne gêne pas. N'hésitez pas à rehausser le design en ajoutant un boîtier imprimé en 3D qui facilite le montage, utilisez des écrous et des boulons, des adhésifs fantaisie, intégrez des boutons d'origine, peu importe. Tant que cela fonctionne, il n'y a pas de mauvaises réponses.

Ceux-ci seront montés à l'extérieur du boîtier et le Raspberry Pi sera niché à l'intérieur du compartiment de la batterie très spacieux, il faudra donc percer un petit trou pour permettre aux câbles de sortir du compartiment de la batterie.

Étape 8: Vérification finale de l'ajustement

Vérification finale de l'ajustement
Vérification finale de l'ajustement

Tout l'équipement doit être vérifié une dernière fois pour voir exactement où tous les trous doivent être faits sur le châssis, et quelle taille de trous, etc. doivent être faits. De plus, il convient de considérer où placer les composants pour une facilité optimale de connectivité et d'accès. Pour faire court, assurez-vous que tout s'adapte là où vous le pensez avant d'endommager irrémédiablement votre projet et de devoir retirer le spackle.

Étape 9: Intégration finale

Intégration finale
Intégration finale
Intégration finale
Intégration finale
Intégration finale
Intégration finale

Maintenant, tout le matériel est là où il doit être, et tout s'adapte aussi bien qu'un insecte dans un tapis. Coupons les choses ! J'ai identifié un endroit sur le compartiment des piles où je pouvais acheminer les câbles AV à l'aide d'une petite indentation dans le plastique. Je l'ai broyé avec un touret. Cela a fait un travail assez court. J'ai utilisé un dremel pour broyer plus de plastique afin d'en faire un assez bon ajustement pour les câbles.

Le dernier composant est le sélecteur de canal. J'ai percé un petit trou dans le compartiment de la batterie et j'en ai fait sortir les câbles d'en-tête un à la fois. Les boutons ont été connectés et j'ai attaché le protoboard au châssis en plastique avec deux moitiés de velcro pré-adhésif. Je comprends qu'il y avait environ 1200 meilleures façons de le faire, mais cela a fonctionné et j'avais tout ce dont j'avais besoin sous la main.

Étape 10: Profitez de votre IPTV vintage

Profitez de votre IPTV vintage
Profitez de votre IPTV vintage
Profitez de votre IPTV vintage
Profitez de votre IPTV vintage
Profitez de votre IPTV vintage
Profitez de votre IPTV vintage

ça résume à peu près. Trouvez des émissions et amusez-vous à regarder. Ne vous asseyez pas trop près, cependant. Tu vas te pourrir le cerveau !

Il y a beaucoup de place pour améliorer ce projet, alors prenez-le dans la direction que vous voulez, mais c'était amusant d'aller aussi loin. Quant à moi, je l'exécute à partir d'une tâche cron au redémarrage, donc la sortie standard ne capture pas les messages du script python. J'aimerais résoudre ce problème pour savoir sur quelle chaîne je suis. Un autre bon ajout est un dongle de clavier sans fil sur le Pi. Cela vous permettrait de changer de réseau wifi si vous quittez votre maison avec la télévision. Indépendamment. c'était un projet amusant, et j'ai hâte de commencer le prochain.

Conseillé: