Indholdsfortegnelse:
- Trin 1: Få en god IPTV -liste
- Trin 2: Foreløbig kodeksperiment
- Trin 3: Tilføj GPIO
- Trin 4: Integrer hardware for at se skarp ud
- Trin 5: Pi Power
- Trin 6: Integrering af strøm
- Trin 7: Løsning med langsigtet knap
- Trin 8: Final Fit Check
- Trin 9: Endelig integration
- Trin 10: Nyd dit Vintage IPTV
Video: Retro Idiot Box: 10 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:26
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
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
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
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
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
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
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
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
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
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:
Retro Arcade - (fuld størrelse drevet af Raspberry Pi): 8 trin
Retro Arcade - (Fuld størrelse drevet af Raspberry Pi): Først ville jeg takke dig for at have kigget på byggeguiden til dette Retro Arcade -system. Jeg tager en ældre arkadeboks og placerer den i et selvstændigt skab med en 24-tommer widescreen-skærm. Målinger på denne vejledning er grove at give dig
Retro "Rayotron" natlys (del 1): 16 trin
Retro "Rayotron" nattelys (del 1): Introduktion I december 1956 annoncerede Atomic Laboratories Rayotron som "Første lavpris elektrostatisk generator og partikelaccelerator" for naturfagslærere og amatører [1]. Rayotron var en supersized, gummibælte
Akustisk levitation med Arduino Uno trin for trin (8 trin): 8 trin
Akustisk levitation med Arduino Uno Step-by Step (8-trin): ultralyds lydtransducere L298N Dc kvindelig adapter strømforsyning med en han-DC-pin Arduino UNOBreadboard Sådan fungerer det: Først uploader du kode til Arduino Uno (det er en mikrokontroller udstyret med digital og analoge porte til konvertering af kode (C ++)
The Barbie Box: a Camouflaged Case/ Boom Box for Your Mp3 Player: 4 Steps (with Pictures)
Barbie -boksen: en camoufleret taske/ bomkasse til din mp3 -afspiller: Dette er en polstret beskyttende taske til din mp3 -afspiller, der også konverterer hovedtelefonstikket til en centimeter, kan fungere som en bomkasse ved en omskifter og forklæder din mp3 -afspiller som en tidlig båndafspiller i begyndelsen af halvfemserne eller lignende lavt tyveri i
Cedar (Cigar?) Box Speaker Box: 8 trin (med billeder)
Cedar (Cigar?) Box Speaker Box: Inspireret af Munny -højttalerne, men ikke villig til at bruge mere end $ 10, her er min instruktion ved hjælp af gamle computerehøjttalere, en trækasse fra genbrugsbutikken og masser af varm lim