Taula de continguts:

Retro Idiot Box: 10 passos
Retro Idiot Box: 10 passos

Vídeo: Retro Idiot Box: 10 passos

Vídeo: Retro Idiot Box: 10 passos
Vídeo: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Desembre
Anonim
Retro Idiot Box
Retro Idiot Box

Vaig trobar un vell televisor portàtil Magnavox del 1984 assegut en un prestatge de la meva botiga de segona mà local. Vaig pensar en mi mateix: "oh NEAT!" Després d’una nova inspecció, vaig notar-ne un preu de 15 dòlars, de manera que vaig decidir emportar-me’l a casa i fer-ne alguna cosa més sofisticada. Recordo haver vist les repeticions quan era un nen de tots els grans clàssics en blanc i negre gloriós i volia tornar-ho a fer realitat.

El problema és que ja no hi ha estacions analògiques, i això és totalment incapaç de fer cap descodificació ATSC, ni cap descodificació digital. Vaig notar la presència d'una connexió AV al costat i tenia algunes instal·lacions de raspberry pi, així que vaig decidir emprendre una aventura per esbrinar com podia transmetre canals cap a això. També vull que sembli nítida. No ho faré funcionar amb les 9 bateries de cèl·lules D, de manera que puc amagar el rpi al compartiment de la bateria amb una gran quantitat de productes.

Pas 1: Obteniu una bona llista IPTV

Obteniu una bona llista IPTV
Obteniu una bona llista IPTV

Daily IPTV List té una fantàstica selecció d’emissores iptv gratuïtes organitzades per països. Seleccioneu el país que escolliu i descarregueu el fitxer m3u.

Per al programari que conté, m3u és un format requerit. Podeu llegir més informació sobre els detalls del format aquí.

Pas 2: experiment preliminar de codi

El codi python que escriurem analitza el fitxer m3u en una llista d’estacions.

#! / usr / bin / python3

importar subprocessos de sys import argv class Station: def _init _ (self): self.channel = 0 self.name = "self.address =" channel_list = amb open ('./ us-m3uplaylist-2020-08- 17-1.m3u ',' r ') com a m3u: i = 0 per a la línia de m3u: si 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])

Descomponem això.

#! / usr / bin / python3

Això indica a bash que utilitzarem python3 per interpretar aquest fitxer.

importar subprocés de sys import argv

Necessitarem el mòdul de subprocés per iniciar la nostra instància vlc i necessitarem argv per triar a quin canal llançarem vlc.

classe Estació: def _init _ (self): self.channel = 0 self.name = "self.address ="

Això defineix una classe anomenada Estació. Cada canal tindrà un número de canal, el nom del canal tal com s’ha extret del fitxer m3u i una adreça d’on s’emet aquest canal.

llista_canal =

Aquesta és una llista que emmagatzemarà tots els canals analitzats des del fitxer m3u.

amb open ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') com a m3u: i = 0 per a la línia de m3u: si 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

Aquest bucle obre la llista de reproducció m3u i ingereix les dades. les línies de fitxer m3u que ens interessen comencen per #EXTINF, indica una entrada nova al fitxer de llista de reproducció. El següent valor d’interès és el nom, que es troba a la mateixa línia que #EXTINF, però amb una coma entre ells. La següent línia d'aquest m3u en concret és l'adreça del flux. Hi ha un iterador "i" en ús per comptar quin canal és quin. Aquest bucle recorre tot el fitxer m3u i omple la llista de canals amb estacions.

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

la biblioteca de subprocessos permet que Python cridi processos (programes) i retorni un PID (Process ID). Això permet que Python pugui gestionar el llançament i el tancament de programes "correctament" sense emplenar el fitxer d'historial, ni permetre executar codi més arbitrari amb trucades genèriques de "sistema". Cada element de la matriu que s'utilitza com a argument per a Popen és el que s'ha escrit a la línia d'ordres.

vlc --loop --intf dummy --adreça de pantalla completa

L'ordre anterior és el que es vol executar, amb l'opció --loop solucionant alguns problemes amb la pausa del flux mentre es carreguen els trossos següents (problemes estranys de m3u8), --intf dummy inicia vlc sense la interfície, només una pantalla, - pantalla completa llança el vídeo en mode de pantalla completa (NO MANERA!) i l'adreça és l'adreça del flux. Com podeu veure al codi, proporcionem l'adreça del número de canal de la llista, que es proporciona en temps d'execució mitjançant la declaració argv. Deseu aquest fitxer com a tv_channels.py, canvieu la ubicació de la llista de reproducció al fitxer python per apuntar a la vostra llista de reproducció i podeu executar el codi de la manera següent:

python tv_channels.py

Pas 3: afegiu GPIO

Afegiu GPIO
Afegiu GPIO
Afegiu GPIO
Afegiu GPIO

L’esquema mostra els dos pins GPIO que s’utilitzen per als botons, i cadascun té una resistència de tracció cap amunt per mantenir el pin GPIO elevat després de prémer el botó. El codi definit prèviament es pot refinar per fer l'operació una mica més fluida afegint capacitat GPIO. Això ens permet canviar de canal amb botons, en lloc d'un enunciats de teclat i argv, igual que un televisor realsies.

El primer que cal destacar és que tinc la televisió definida com una classe. Per ser televisiu, hem d’estar en un canal actual, tenir una llista de canals possibles i tenir la possibilitat de canviar-los. En aquest exemple, l'únic mètode per canviar de canal serà pujar per la llista de canals i baixar per la llista de canals. Un cop decidit el canal, haurem d'iniciar VLC al canal que volem veure.

#! / usr / bin / python3

des de temps importació importació subprocés importació de sys importació argv des importació gpiozero Classe de botons Estació: def _init _ (self): self.channel = 0 self.name = "self.address =" "self.process =" classe Televisió: def _init _ (self, nom del fitxer): self.current_channel = 0 self.channel_list = self.build_channel_list (nom del fitxer) self.start_channel () def build_channel_list (self, nom del fitxer): amb obert (nom del fitxer, 'r') com a m3u: i = 0 per a la línia a m3u: si 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 si self.current_channel <0: self.current_channel = 0 self.start_channel () def start_channel (self): provar: autoprocés. kill () except: pass print ('canal inicial% d'% self.current_channel) self.process = subprocess. Popen (['vlc', '-q', '--loop', '--intf', ' maniquí ',' --fullscreen ', self.channel_list [self.current_channel].address]) this = Television ('./ us-m3uplaylist-2020-08-17-1.m3u ') channel_UP = Button (18) channel_DN = Botó (23) mentre és cert: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

Aquesta iteració de codi té força millores. ara utilitzava un mòdul anomenat gpiozero que el raspberry pi requereix per accedir fàcilment a la funcionalitat dels pins GPIO

sudo apt-get install python3-gpiozero

o bé

sudo pip instal·lar gpiozero

Com es veu al meu codi, he triat GPIO 18 i GPIO 23 per als canals UP i DOWN respectivament. La biblioteca gpiozero té una bona classe per a les funcions de botons per a when_pressed, is_pressed, when_held, etc. Això ho fa bastant fàcil. He escollit el when_pressed, que fa referència a una funció de devolució de trucada per executar-se quan es detecta aquest senyal.

L'últim canvi important és la inclusió de l'opció '-q' a la trucada de subprocés VLC. Això simplement executa vlc sense tota la sortida al terminal per mantenir-lo lliure de molèsties, de manera que puguem veure les instruccions impreses informatives del codi.

Pas 4: Integreu el maquinari per semblar nítid

Integreu el maquinari per semblar nítid
Integreu el maquinari per semblar nítid
Integreu el maquinari per semblar nítid
Integreu el maquinari per semblar nítid
Integreu el maquinari per semblar nítid
Integreu el maquinari per semblar nítid

No he esbrinat com vull aconseguir-ho, i serà una solució única per a cada model de televisió en ús. Necessito reflexionar-hi molt i analitzar la televisió per trobar una bona font d’alimentació per al pi un cop embrutat l’ordinador dins del compartiment massiu de la bateria. També he considerat utilitzar els botons del rellotge per a la selecció del canal, ja que ja estan ben posats al televisor i el rellotge no funciona igualment. En publicaré més quan trobi una bona solució, però aquí és on el meu projecte serà molt diferent dels de la resta. Gaudeix de la integració IPTV de televisió real.

Pas 5: Potència Pi

Pi Power
Pi Power

Per al model de televisió que he trobat, requereix una font d'alimentació de 12V. Vaig explorar el tauler, però no vaig veure cap regulador de potència evident per a 5V, de manera que el lloc més evident per obtenir una font d’alimentació constant és a la placa de circuit on entra el connector de barril del 12V. Hi ha un problema evident. no volem fregir el pi, així que necessitarem un regulador de potència. He triat el convertidor de potència Step23 Down MP2315. És barat i senzill d’utilitzar. Soldarem l’entrada de 12VDC des del connector de barril del PCB als pins IN + i GND del convertidor, i el VO + al pin 2 del Raspberry Pi, així com un GND.

Abans d’aconseguir-ho, assegureu-vos d’encendre el convertidor i assegureu-vos que la sortida de 5V adequada surti. Vaig triar l’opció més senzilla amb el voltatge ajustable per cable. El tallador ajustarà el voltatge, de manera que vaig veure la sortida de voltatge amb un multímetre mentre ajustava el tallador amb un tornavís.

Pas 6: integració de l'energia

Potència integradora
Potència integradora
Potència integradora
Potència integradora
Potència integradora
Potència integradora

Després d’excavar al voltant de la televisió, es va decidir que el millor lloc per treure energia era el negatiu del connector del barril i l’interruptor ON / OFF de la televisió, cosa que significa que podem activar i desactivar els fluxos amb la televisió, més aviat que alimentant constantment el pi tirant directament del connector del canó.

Els cables es soldaven i s’alimentaven al costat del PCB al costat de la caixa fins que arribaven a la part posterior de la unitat, on s’alimentaven a través d’un forat que hi havia a la part posterior del compartiment de la bateria. Un cop alimentats, podem preparar els extrems del cablejat i soldar-los fins al regulador de potència. El vaig ajustar per a 5 V per alimentar el pi i els passadors de capçalera soldats, de manera que puguem executar ponts femenins a femelles des del regulador de potència directament fins al conjunt de capçaleres GPIO del pi. Normalment no s’aconsella això, ja que el pi generalment obté energia a través de l’UBS, que té un regulador en línia per condicionar el 5V, però com que la potència ja s’està regulant, hauria d’estar bé.

Hi ha soroll a les línies d'àudio que fa això, perquè hi ha un bucle de terra al sistema. Vaig provar molts punts de poder i de terra per tot el tauler esperant una resposta fàcil, però no en vaig trobar cap. També he soldat un cable microUSB al regulador de mode commutat per veure si forçar l'alimentació a través dels reguladors interns del pi solucionaria el problema. No va ser així. La solució serà en alguns transformadors d’aïllament de sòl. Es van demanar en lloc de construir-los, ja que són econòmics i estan ben embalats. Podeu recollir-los a la majoria de departaments o botigues d’àudio per a automòbils. Això és el que vaig triar.

Pas 7: solució de botons a llarg termini

Solució de botons a llarg termini
Solució de botons a llarg termini
Solució de botons a llarg termini
Solució de botons a llarg termini

Sens dubte, els botons no es mantindran en una taula de treball, de manera que cal que hi hagi una solució més permanent. Vaig agafar una antiga placa de protecció i vaig llançar el circuit junt amb uns pins de capçalera per facilitar l'accés als senyals. Aquí és on tothom tindrà una opinió diferent sobre com connectar o muntar els botons. Estic decidint protegir-los i fixar-los al xassís de manera que el mànec que gira per sobre de la pantalla no interfereixi. No dubteu a afegir el disseny a l’església afegint una funda impresa en 3D que suavitzi el muntatge, utilitzeu cargols i femelles, adhesius de luxe i que integri botons originals. Mentre funcioni, no hi ha respostes incorrectes.

Aquests es muntaran a l’exterior de la caixa i el Raspberry Pi estarà ficat dins del compartiment de la bateria molt espaiós, de manera que haurà d’haver un petit forat que permeti que els cables surtin del compartiment de la bateria.

Pas 8: comprovació de l'ajust final

Comprovació d’ajust final
Comprovació d’ajust final

Cal revisar tots els equips per última vegada per veure exactament on cal fer tots els forats al xassís i quina mida cal fer, etc. A més, s’hauria de considerar on col·locar els components per a una òptima facilitat de connectivitat i accés. Resum llarg, assegureu-vos que tot s’adapti allà on creieu que fa abans de danyar irreparablement el vostre projecte i haver de treure el joc.

Pas 9: Integració final

Integració final
Integració final
Integració final
Integració final
Integració final
Integració final

Ara tot el maquinari és allà on ha d’estar, i tot encaixa tan bé com un error en una catifa. Tallem coses! Vaig identificar un lloc al compartiment de la bateria on podia encaminar els cables AV mitjançant un petit sagnat al plàstic. Vaig posar-lo a terra amb un molinet de banc. Va fer un treball força breu. Vaig fer servir un dremel per moldre més plàstic per fer que s’adaptés bastant bé als cables.

L’últim component és el selector de canals. He foradat un petit forat al compartiment de la bateria i he encaminat els cables de capçalera d’un a un. Els botons estaven connectats i vaig fixar la protoborda al xassís de plàstic amb dues meitats de velcro pre-adhesiu. Em sembla que hi havia aproximadament 1200 maneres millors de fer-ho, però això funcionava i tenia tot el que necessitava a mà.

Pas 10: gaudiu de la vostra IPTV vintage

Gaudeix de la teva IPTV vintage
Gaudeix de la teva IPTV vintage
Gaudeix de la teva IPTV vintage
Gaudeix de la teva IPTV vintage
Gaudeix de la teva IPTV vintage
Gaudeix de la teva IPTV vintage

Això es resumeix. Cerca espectacles i diverteix-te veient. No us asseieu massa a prop. Et podriràs el cervell!

Hi ha molt marge per millorar aquest projecte, així que preneu-lo en la direcció que vulgueu, però va ser divertit arribar fins aquí. Pel que fa a mi, ho executo des d'un cronjob al reiniciar-lo, de manera que la versió estàndard no captura els missatges de l'script python. M'agradaria solucionar-ho per saber en quin canal estic. Una altra bona addició és un dongle de teclat sense fils al Pi. Això us permetria canviar la xarxa wifi si sortiu de casa amb la televisió. Sense detriment. va ser un projecte divertit i no puc esperar per començar el següent.

Recomanat: