Innholdsfortegnelse:

Retro Idiot Box: 10 trinn
Retro Idiot Box: 10 trinn

Video: Retro Idiot Box: 10 trinn

Video: Retro Idiot Box: 10 trinn
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, November
Anonim
Retro Idiot -boks
Retro Idiot -boks

Jeg fant en gammel bærbar TV fra Magnavox fra 1984 som satt på en hylle i min lokale bruktbutikk. Jeg tenkte for meg selv, "åh NEAT!" Ved ytterligere inspeksjon la jeg merke til en prislapp på $ 15 på den, så jeg bestemte meg for å ta den med hjem og lage noe piff ut av den. Jeg husker jeg så repriser som barn av alle de store klassikerne i strålende svart -hvitt, og ønsket å gjøre dette til virkelighet igjen.

Problemet er at det ikke er noen analoge stasjoner der ute lenger, og dette er helt ute av stand til å utføre noen ATSC -dekoding eller digital dekoding. Jeg la merke til tilstedeværelsen av en AV -tilkobling på siden, og hadde noen bringebær -pi som lå rundt, så jeg bestemte meg for å begynne på et eventyr for å finne ut hvordan jeg kunne streame kanaler til dette. Jeg vil også få det til å se skarpt ut. Jeg kommer ikke til å kjøre den på de 9 D-cellebatteriene, så jeg kan gjemme rpi i batterirommet med en rekke andre godbiter.

Trinn 1: Få en god IPTV -liste

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

Daily IPTV List har et fantastisk utvalg av gratis iptv -stasjoner organisert etter land. Velg landet du ønsker, og last ned m3u -filen.

For programvaren som er i dette, er m3u et nødvendig format. Du kan lese mer om detaljene i formatet her.

Trinn 2: Foreløpig kodeksperiment

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

#!/usr/bin/python3

import delprosess fra sys import argv class 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] linje = neste (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1 prosess = delprosess. Popen (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. address])

La oss bryte dette ned.

#!/usr/bin/python3

Dette forteller at vi kommer til å bruke python3 for å tolke denne filen.

importere delprosesser fra sys importere argv

Vi trenger delprosessmodulen for å starte vår vlc -forekomst, og vi trenger argv for å velge hvilken kanal vi vil starte vlc til.

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

Dette definerer en klasse som heter Station. Hver kanal vil ha et kanalnummer, navnet på kanalen som hentet fra m3u -filen, og en adresse hvor kanalen strømmer fra.

channel_list =

Dette er en liste som vil lagre alle kanalene som er analysert fra m3u -filen.

med åpen ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') som m3u: i = 0 for linje i 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

Denne sløyfen åpner m3u -spillelisten og inntar dataene. m3u -fillinjene som vi er interessert i starter med #EXTINF, Dette indikerer en ny oppføring i spillelistefilen. Den neste verdien av interesse er navnet, som er på samme linje som #EXTINF, men med et komma mellom dem. Følgende linje i denne spesielle m3u er adressen til strømmen. Det er en iterator "i" i bruk for å telle hvilken kanal som er hvilken. Denne sløyfen går gjennom hele m3u -filen og fyller channel_list med stasjoner.

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

delprosessbiblioteket lar python kalle prosesser (programmer) og returnerer en PID (prosess -ID). Dette gjør at python kan administrere lansering og lukking av programmer "riktig" uten å fylle ut historikkfilen, eller la mer vilkårlig kode kjøres med generiske "system" -anrop. Hvert element i matrisen som brukes som et argument til Popen er som skrevet på kommandolinjen.

vlc --loop --intf dummy -fullskjermsadresser

Kommandoen ovenfor er det som ønskes kjørt, med --loop -alternativet som løser noen problemer med strømpause mens neste deler lastes (rare m3u8 -problemer), --intf dummy starter vlc uten grensesnitt, bare en skjerm, -fullskjerm starter videoen i fullskjermsmodus (IKKE!), og adressen er adressen til strømmen. Som du kan se i koden, gir vi adressen fra listens kanalnummer, som er gitt ved kjøretid via argv -setningen. Lagre denne filen som tv_channels.py, endre spillelisteplasseringen i python -filen for å peke på spillelisten din, og du kan kjøre koden som følger:

python tv_channels.py

Trinn 3: Legg til GPIO

Legg til GPIO
Legg til GPIO
Legg til GPIO
Legg til GPIO

Skjematisk viser de to GPIO -pinnene som brukes for knappene, og hver har en opptrekksmotstand for å holde GPIO -pinnen trukket høyt etter knappetrykk. Koden som tidligere er definert kan finpusses for å gjøre operasjonen litt mer sømløs ved å legge til GPIO -funksjonalitet. Dette lar oss bytte kanal med knapper, i stedet for et tastatur og argv -setninger, akkurat som for realsies tv.

Det første jeg må merke meg er at jeg har fjernsynet definert som en klasse. For å være en TV må vi være på en nåværende kanal, ha en liste over mulige kanaler og ha muligheten til å bytte kanal. I dette eksemplet vil den eneste metoden for å bytte kanal være å gå oppover kanallisten og gå nedover kanallisten. Når kanalen er bestemt, må vi starte VLC på kanalen vi vil se.

#!/usr/bin/python3

fra tid importere dvalemodus importprosess fra sys import argv fra gpiozero import Knappklasse Stasjon: def _init _ (self): self.channel = 0 self.name = '' self.address = '' self.process = '' klasse TV: 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 åpent (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 () unntatt: 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 = Knapp (23) mens True: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

Denne iterasjonen av kode har ganske mange forbedringer. den brukte nå en modul kalt gpiozero som er nødvendig av bringebær pi for enkelt å få tilgang til funksjonaliteten til GPIO -pinnene

sudo apt-get install python3-gpiozero

eller

sudo pip installer gpiozero

Som det fremgår av koden min, har jeg valgt GPIO 18 og GPIO 23 for henholdsvis kanal UP og kanal NED. Gpiozero -biblioteket har en fin klasse for knappefunksjoner for når_presset, er_presset, når_holdt, etc. Dette gjør det ganske enkelt. Jeg valgte når_presset, som refererer til en tilbakeringingsfunksjon som skal kjøres når dette signalet oppdages.

Den siste store endringen er inkluderingen av '-q' -alternativet i VLC -delprosessanropet. Dette kjører ganske enkelt vlc uten all utgang til terminalen for å holde den fri for rot, slik at vi kan se de informative utskriftsuttalelsene i koden.

Trinn 4: Integrer maskinvaren for å se skarp ut

Integrer maskinvaren for å se skarp ut
Integrer maskinvaren for å se skarp ut
Integrer maskinvaren for å se skarp ut
Integrer maskinvaren for å se skarp ut
Integrer maskinvaren for å se skarp ut
Integrer maskinvaren for å se skarp ut

Jeg har ikke funnet ut hvordan jeg vil oppnå dette, og det vil være en unik løsning for hver modell -tv i bruk. Jeg må tenke nøye over dette og undersøke rundt fjernsynet for å finne en god strømkilde for pi når jeg stapper datamaskinen inne i det massive batterirommet. Jeg har også vurdert å bruke klokkeknappene for kanalvalget, ettersom de allerede er vakkert plassert på fjernsynet, og klokken fungerer ikke uansett. Jeg legger ut mer når jeg finner en god løsning, men det er her Mitt prosjekt vil avvike sterkt fra alle andres. Nyt den ekte tv-lignende IPTV-integrasjonen!

Trinn 5: Pi Power

Pi -kraft
Pi -kraft

For modell -TVen jeg fant, krever den en 12V strømforsyning. Jeg undersøkte rundt brettet, men så ingen åpenbare effektregulatorer for 5V, så det mest åpenbare stedet å få en jevn strømforsyning er på kretskortet hvor fatkontakten for 12V kommer inn. Det er et åpenbart problem med dette. vi vil ikke steke pi, så vi trenger en effektregulator. Jeg har valgt MP2315 Step-Down Power Converter. Det er skitt billig og enkelt å bruke. Vi vil lodde 12VDC -inngangen fra fatkontakten på kretskortet til IN+ og GND -pinnene på omformeren, og VO+ til pinne 2 på Raspberry Pi, samt en GND.

FØR dette er gjort, må du slå på omformeren og sørge for at riktig 5V kommer ut av utgangen. Jeg valgte det enkleste alternativet med den fastkoblede justerbare spenningen. Trimmeren vil justere spenningen, så jeg så på spenningsutgangen med et multimeter mens jeg justerte trimmeren med en skrutrekker.

Trinn 6: Integrering av strøm

Integrering av kraft
Integrering av kraft
Integrering av kraft
Integrering av kraft
Integrering av kraft
Integrering av kraft

Etter å ha gravd rundt fjernsynet, ble det bestemt at det beste stedet å hente ut strøm var fra tønnekontaktens minus og TV -ON/OFF -bryteren, noe som betyr at vi kan slå av og på strømmer med fjernsynet, snarere at konstant driver pi ved å trekke direkte fra fatkontakten.

Ledningene ble loddet inn og matet langs siden av kretskortet ved siden av saken til de nådde baksiden av enheten, hvor de ble matet gjennom et hull på baksiden av batterirommet. Når de er ført gjennom, kan vi forberede endene på kablingen og lodde dem ned til effektregulatoren. Jeg stemte den for 5V for å drive pi og loddet topptekst til den slik at vi kan kjøre kvinnelige til kvinnelige hoppere fra effektregulatoren direkte til pi's GPIO header -sett. Dette anbefales vanligvis ikke, ettersom pi vanligvis får strøm gjennom UBS, som har en regulator inline for å kondisjonere 5V, men siden strømmen allerede er under regulering burde det være greit.

Det er noe støy på lydlinjene fra å gjøre dette, fordi det er en jordsløyfe i systemet. Jeg prøvde mange strøm- og bakkepunkter over hele tavlen i håp om et enkelt svar, men fant ingen. Jeg loddet også en microUSB -kabel til regulator for koblet modus for å se om det ville løse problemet å tvinge strøm gjennom pi's interne regulatorer. Det gjorde den ikke. Løsningen kommer til å være i noen transformatorer for lydjordisolasjon. Disse ble bestilt fremfor bygget, fordi de er billige og pent pakket. Du kan hente dem fra de fleste autolydbutikker eller avdelinger. Dette er hva jeg valgte.

Trinn 7: Løsning for langsiktig knapp

Langsiktig knappeløsning
Langsiktig knappeløsning
Langsiktig knappeløsning
Langsiktig knappeløsning

Utvilsomt vil ikke knappene bli på et brødbrett, så det må være en mer permanent løsning. Jeg tok noen gamle protoboard og kastet kretsen sammen med noen header pins for å gjøre det enkelt å få tilgang til signalene. Det er her alle vil ha forskjellige meninger om hvordan du skal feste eller montere knappene. Jeg velger å kaste dem ombord og bare feste dem til kabinettet slik at håndtaket som svinger over skjermen for å bære ikke forstyrrer. Føl deg fri til å forenkle designet ved å legge til et 3d -trykt etui som jevner montering, bruker muttere og bolter, flotte lim, integrerer originale knapper, uansett. Så lenge det fungerer, er det ingen feil svar.

Disse vil bli montert på utsiden av saken, og Raspberry Pi vil bli gjemt inne i det svært romslige batterirommet, så det må være et lite hull boret for at kabler skal komme ut av batterirommet.

Trinn 8: Final Fit Check

Final Fit Check
Final Fit Check

Alt utstyr må passformsjekkes en siste gang for å se nøyaktig hvor alle hullene må gjøres til chassiset, og hvilken størrelse hull osv. Som må lages. I tillegg bør det vurderes hvor komponentene skal plasseres for optimal enkel tilkobling og tilgang. Lang historie kort, sørg for at alt passer der du tror det gjør før du uopprettelig skader prosjektet ditt og må få ut spaken.

Trinn 9: Sluttintegrering

Endelig integrasjon
Endelig integrasjon
Endelig integrasjon
Endelig integrasjon
Endelig integrasjon
Endelig integrasjon

Nå er all maskinvare der den trenger å være, og alt passer like godt som en feil i et teppe. La oss kutte ting! Jeg identifiserte et sted på batterirommet hvor jeg kunne føre AV -kablene ut ved hjelp av en liten innrykk i plasten. Jeg slo det ned med en benkekvern. Det gjorde ganske kort ut av det. Jeg brukte en dremel til å slipe ned mer plast for å gjøre det ganske godt egnet for kablene.

Den siste komponenten er kanalvelgeren. Jeg boret et lite hull i batterirommet og førte toppkablene ut av det en om gangen. Knappene var koblet opp, og jeg festet protoboardet til plastkabinettet med to halvdeler med forhånds-klebende borrelås. Jeg skjønner at det var omtrent 1200 bedre måter å gjøre dette på, men dette fungerte, og jeg hadde alt jeg trengte for hånden.

Trinn 10: Nyt din vintage IPTV

Nyt din vintage IPTV
Nyt din vintage IPTV
Nyt din vintage IPTV
Nyt din vintage IPTV
Nyt din vintage IPTV
Nyt din vintage IPTV

Det omtrent oppsummerer det. Finn programmer og ha det gøy å se. Ikke sitt for nært, skjønt. Du råtner hjernen din!

Det er mye plass til å forbedre dette prosjektet, så ta det i hvilken retning du vil, men det var morsomt å komme så langt. Når det gjelder meg, kjører jeg dette fra en cronjob ved omstart, slik at stdout ikke fanger meldingene fra python -skriptet. Jeg vil fikse dette slik at jeg vet hvilken kanal jeg er på. Et annet godt tillegg er en trådløs tastaturdongle på Pi. Dette vil la deg endre wifi -nettverket hvis du forlater huset ditt med TV -en. Uansett. det var et morsomt prosjekt, og jeg kan ikke vente med å komme i gang med det neste.

Anbefalt: