Indholdsfortegnelse:

Retro Idiot Box: 10 trin
Retro Idiot Box: 10 trin

Video: Retro Idiot Box: 10 trin

Video: Retro Idiot Box: 10 trin
Video: IDIOTS DRIVING BOATS CAUGHT ON CAMERA #7 2024, November
Anonim
Retro Idiot Box
Retro Idiot Box

Jeg fandt et gammelt Magnavox bærbart fjernsyn fra 1984, der sad på en hylde i min lokale genbrugsbutik. Jeg tænkte ved mig selv, "åh NEAT!" Ved yderligere inspektion bemærkede jeg en pris på $ 15 på den, så jeg besluttede at tage den med hjem og lave noget pudsigt ud af den. Jeg husker, at jeg så genudsendelser som barn af alle de store klassikere i strålende sort og hvid, og ville gøre dette til virkelighed igen.

Problemet er, at der ikke længere er nogen analoge stationer derude, og dette er helt ude af stand til at foretage nogen ATSC -afkodning eller digital afkodning. Jeg lagde mærke til tilstedeværelsen af en AV -forbindelse på siden og havde et par hindbærpi’er liggende, så jeg besluttede mig for at tage på et eventyr for at finde ud af, hvordan jeg kunne streame kanaler til dette. Jeg vil også få det til at se skarpt ud. Jeg vil ikke køre det på de 9 D-celle batterier, så jeg kan skjule rpi i batterirummet med en lang række andre godbidder.

Trin 1: Få en god IPTV -liste

Få en god IPTV -liste
Få en god IPTV -liste

Daily IPTV List har et fantastisk udvalg af gratis iptv -stationer organiseret efter land. Vælg det land, du ønsker, og download m3u -filen.

For softwaren, der er i dette, er m3u et nødvendigt format. Du kan læse mere om specifikationerne for formatet her.

Trin 2: Foreløbig kodeksperiment

Python -koden, som vi skal skrive, analyserer m3u -filen i en liste over stationer.

#!/usr/bin/python3

import delproces fra sys import argv klasse Station: def _init _ (self): self.channel = 0 self.name = '' self.address = '' channel_list = with open ('./ us-m3uplaylist-2020-08- 17-1.m3u ',' r ') som m3u: i = 0 for linje i m3u: hvis 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 proces = subprocess. Popen (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. adresse])

Lad os bryde dette ned.

#!/usr/bin/python3

Dette fortæller bash, at vi vil bruge python3 til at fortolke denne fil.

import delproces fra sys import argv

Vi skal bruge delprocesmodulet til at starte vores vlc -forekomst, og vi skal bruge argv til at vælge, hvilken kanal vi vil starte vlc i.

klasse Station: def _init _ (self): self.channel = 0 self.name = '' self.address = ''

Dette definerer en klasse kaldet Station. Hver kanal vil have et kanalnummer, kanalens navn taget fra m3u -filen og en adresse på, hvor kanalen streamer fra.

channel_list =

Dette er en liste, der gemmer alle kanaler, der er analyseret fra m3u -filen.

med åben ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') som m3u: i = 0 for linje i m3u: hvis line.startswith ('#EXTINF'): dette = Station () this.name = line.split (',') [1] line = next (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1

Denne loop åbner m3u -spillelisten og indtager data. de m3u -fillinjer, som vi er interesserede i, starter med #EXTINF, Dette angiver en ny post til afspilningslistefilen. Den næste værdi af interesse er navnet, der er på samme linje som #EXTINF, men med et komma mellem dem. Den følgende linje i denne særlige m3u er adressen på strømmen. Der er en iterator "i" i brug til at tælle hvilken kanal der er hvilken. Denne sløjfe gentager sig gennem hele m3u -filen og fylder channel_list med stationer.

proces = delproces. Popen (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. adresse])

delprocesbiblioteket tillader python at kalde processer (programmer) og returnerer et PID (proces -id). Dette gør det muligt for python at kunne styre lancering og lukning af programmer "korrekt" uden at fylde historikfilen eller tillade mere vilkårlig kode at blive kørt med generiske "system" -opkald. Hvert element i arrayet, der bruges som et argument til Popen, er som indtastet i kommandolinjen.

vlc --loop --intf dummy -fuldskærmsadresser

Ovenstående kommando er det, der ønskes kørt, med --loop -indstillingen, der løser nogle problemer med stream -pause, mens de næste stykker indlæses (mærkelige m3u8 -problemer), --intf dummy starter vlc uden grænseflade, bare en skærm, --fullscreen starter videoen i fuldskærmstilstand (INGEN MÅDE!), og adressen er streamens adresse. Som du kan se i koden, leverer vi adressen fra listens kanalnummer, som leveres under runtime via argv -sætningen. Gem denne fil som tv_channels.py, ændr afspilningslistens placering i python -filen for at pege på din afspilningsliste, og du kan køre koden som følger:

python tv_channels.py

Trin 3: Tilføj GPIO

Tilføj GPIO
Tilføj GPIO
Tilføj GPIO
Tilføj GPIO

Skematisk viser de to GPIO -ben, der bruges til knapperne, og hver har en pull -up -modstand for at holde GPIO -stiften trukket højt efter at der er trykket på knappen. Koden, der tidligere er defineret, kan forfines for at gøre operationen lidt mere problemfri ved at tilføje GPIO -kapacitet. Dette giver os mulighed for at skifte kanal med knapper, frem for et tastatur og argv -udsagn, ligesom et for realsies tv.

Den første ting at bemærke er, at jeg har fjernsynet defineret som en klasse. For at være fjernsyn skal vi være på en aktuel kanal, have en liste over mulige kanaler og have mulighed for at ændre kanaler. I dette eksempel vil den eneste metode til at skifte kanal være at flytte op på kanallisten og flytte ned på kanallisten. Når kanalen er besluttet, bliver vi nødt til at starte VLC på den kanal, vi vil se.

#!/usr/bin/python3

fra tid import søvn import subprocess fra sys import argv fra gpiozero import Button class Station: def _init _ (self): self.channel = 0 self.name = '' self.address = '' self.process = '' class Television: def _init _ (selv, filnavn): self.current_channel = 0 self.channel_list = self.build_channel_list (filnavn) self.start_channel () def build_channel_list (self, filnavn): med åbent (filnavn, 'r') som m3u: i = 0 for linje i m3u: hvis 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): prøv: self.process. kill () undtagen: pass print ('startkanal % d' % self.current_channel) self.process = subprocess. Popen (['vlc', '-q', '--loop', '--intf', ' dummy ',' --fullscreen ', self.channel_list [self.current_channel].address]) this = Television ('./ us-m3uplaylist-2020-08-17-1.m3u ') channel_UP = Button (18) channel_DN = Knap (23) mens True: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

Denne iteration af kode har en del forbedringer. det brugte nu et modul kaldet gpiozero, der kræves af hindbær pi for let at få adgang til funktionaliteten af GPIO benene

sudo apt-get install python3-gpiozero

eller

sudo pip installer gpiozero

Som det ses i min kode, har jeg valgt henholdsvis GPIO 18 og GPIO 23 til kanal UP og kanal NED. Gpiozero -biblioteket har en god klasse for knapper til når_presset, is_presset, when_held osv. Dette gør det ret let. Jeg valgte når_presset, som refererer til en tilbagekaldsfunktion, der skal køres, når dette signal registreres.

Den sidste store ændring er inkluderingen af '-q' i VLC -delprocesopkaldet. Dette kører simpelthen vlc uden alt output til terminalen for at holde det fri for rod, så vi kan se de informative printudtalelser i koden.

Trin 4: Integrer hardware for at se skarp ud

Integrer hardware for at se skarp ud
Integrer hardware for at se skarp ud
Integrer hardware for at se skarp ud
Integrer hardware for at se skarp ud
Integrer hardware for at se skarp ud
Integrer hardware for at se skarp ud

Jeg har ikke fundet ud af, hvordan jeg vil opnå dette, og det vil være en unik løsning for hver model -tv i brug. Jeg er nødt til at tænke grundigt over dette og undersøge rundt om fjernsynet for at finde en god strømkilde til pi, når jeg propper computeren inde i det massive batterirum. Jeg har også overvejet at bruge urknapperne til kanalvalget, da de allerede er smukt placeret på fjernsynet, og uret alligevel ikke fungerer. Jeg sender mere, når jeg finder en god løsning, men det er her, mit projekt vil i høj grad afvige fra alle andres. Nyd den ægte tv-lignende IPTV-integration!

Trin 5: Pi Power

Pi magt
Pi magt

Til den model -tv, jeg fandt, kræver det en 12V strømforsyning. Jeg sonderede rundt på tavlen, men kunne ikke se nogen indlysende effektregulatorer til 5V, så det mest oplagte sted at få en stabil strømforsyning er på printkortet, hvor tønde -stikket til 12V kommer ind. Der er et indlysende problem med dette. vi vil ikke stege pi'en, så vi skal bruge en effektregulator. Jeg har valgt MP2315 Step-Down Power Converter. Det er snavs billigt og let at bruge. Vi lodder 12VDC -input fra tønde -stikket på printet til IN+ og GND -benene på konverteren og VO+ til pin 2 på Raspberry Pi samt en GND.

FØR dette er gjort, skal du sørge for at tænde for konverteren og sikre, at den korrekte 5V kommer ud af udgangen. Jeg valgte den enkleste mulighed med den indstillede spænding. Trimmeren justerer spændingen, så jeg så spændingsudgangen med et multimeter, da jeg justerede trimmeren med en skruetrækker.

Trin 6: Integrering af strøm

Integrering af strøm
Integrering af strøm
Integrering af strøm
Integrering af strøm
Integrering af strøm
Integrering af strøm

Efter at have gravet rundt om fjernsynet, blev det besluttet, at det bedste sted at hente strøm var fra tøndeforbindelsens minus og fjernsynets ON/OFF -kontakt, hvilket betyder, at vi kan tænde og slukke for vandløbene med fjernsynet, snarere at konstant strømforsyning af pi'en ved at trække direkte fra tøndeforbindelsen.

Trådene blev loddet ind og ført langs siden af printkortet ved siden af sagen, indtil de nåede bagsiden af enheden, hvor de blev ført gennem et hul, der var på bagsiden af batterirummet. Når de er blevet gennemført, kan vi forberede enderne på kablerne og lodde dem ned til effektregulatoren. Jeg indstillede det til 5V for at drive pi'en og loddet hovedstifter til det, så vi kan køre hun -til -hun -jumpere fra effektregulatoren direkte til pi's GPIO header -sæt. Dette frarådes normalt, da pi generelt får strøm via UBS, som har en regulator inline til at betinge 5V, men da strømmen allerede er ved at blive reguleret, burde det være fint.

Der er en vis støj på lydlinjerne ved at gøre dette, fordi der er en jordsløjfe i systemet. Jeg prøvede mange magt- og jordpunkter overalt på tavlen i håb om et let svar, men fandt ingen. Jeg lod også et microUSB -kabel til den skiftede tilstandsregulator for at se, om tvingende strøm gennem pi's interne regulatorer ville sortere problemet. Det gjorde den ikke. Løsningen kommer til at ligge i nogle lydjordisoleringstransformatorer. Disse blev bestilt frem for bygget, fordi de er billige og pænt pakket. Du kan hente dem fra de fleste autolydbutikker eller afdelinger. Dette er hvad jeg valgte.

Trin 7: Løsning med langsigtet knap

Langsigtet knap løsning
Langsigtet knap løsning
Langsigtet knap løsning
Langsigtet knap løsning

Uden tvivl vil knapperne ikke blive på et brødbræt, så der skal være en mere permanent løsning. Jeg tog en gammel protoboard og smed kredsløbet sammen med nogle header pins for at gøre det let at få adgang til signalerne. Det er her, alle vil have forskellige meninger om, hvordan man fastgør eller monterer knapperne. Jeg vælger at køre ombord på dem og bare vedhæfte dem til chassiset, så håndtaget, der svinger over skærmen for at bære, ikke forstyrrer. Du er velkommen til at opbygge designet ved at tilføje et 3d -printet etui, der glatter montering, brug møtrikker og bolte, smarte klæbemidler, integrer originale knapper, uanset hvad. Så længe det virker, er der ingen forkerte svar.

Disse vil blive monteret på ydersiden af kabinettet, og Raspberry Pi vil blive gemt inde i det meget rummelige batterirum, så der skal bores et lille hul for at tillade kabler at komme ud af batterirummet.

Trin 8: Final Fit Check

Final Fit Check
Final Fit Check

Alt udstyr skal kontrolleres tilpas en sidste gang for at se præcis, hvor alle hullerne skal laves til chassiset, og hvilken størrelse huller osv. Der skal laves. Derudover bør det overvejes, hvor komponenterne skal placeres for optimal let forbindelse og adgang. Lang historie kort, sørg for at alt passer, hvor du tror, det gør, før du uopretteligt beskadiger dit projekt og skal få spacklen ud.

Trin 9: Endelig integration

Endelig integration
Endelig integration
Endelig integration
Endelig integration
Endelig integration
Endelig integration

Nu er alt hardware der, hvor det skal være, og det hele passer lige så tæt som en fejl i et tæppe. Lad os skære tingene! Jeg identificerede et sted i batterirummet, hvor jeg kunne føre AV -kablerne ud ved hjælp af en lille fordybning i plasten. Jeg slib det ned med en bænksliber. Det gjorde ret kort arbejde af det. Jeg brugte en dremel til at slibe mere plastik for at få det til at passe godt til kablerne.

Den sidste komponent er kanalvælgeren. Jeg borede et lille hul i batterirummet og førte headerkablerne ud af det en ad gangen. Knapperne blev forbundet, og jeg fastgjorde protoboardet til plastikchassiset med to halvdele præklæbende velcro. Jeg forstår, at der var omkring 1200 bedre måder at gøre dette på, men det virkede, og jeg havde alt, hvad jeg havde brug for.

Trin 10: Nyd dit Vintage IPTV

Nyd dit vintage IPTV
Nyd dit vintage IPTV
Nyd dit vintage IPTV
Nyd dit vintage IPTV
Nyd dit vintage IPTV
Nyd dit vintage IPTV

Det omtrent opsummerer det. Find shows og se det sjovt. Sid dog ikke for tæt. Du vil rådne din hjerne!

Der er meget plads til at forbedre dette projekt, så tag det i hvilken retning du vil, men det var sjovt at komme så langt. Hvad mig angår, kører jeg dette fra en cronjob ved genstart, så stdout ikke fanger beskederne fra python -scriptet. Jeg vil gerne rette op på dette, så jeg ved, hvilken kanal jeg er på. En anden god tilføjelse er en trådløs tastaturdongle på Pi. Dette ville lade dig ændre wifi -netværket, hvis du forlader dit hus med tv'et. Uanset. det var et sjovt projekt, og jeg kan ikke vente med at komme i gang med det næste.

Anbefalede: