INHOUDSOPGAWE:

Retro Idiot Box: 10 stappe
Retro Idiot Box: 10 stappe

Video: Retro Idiot Box: 10 stappe

Video: Retro Idiot Box: 10 stappe
Video: Экзамен в DMV. 15 ошибок. Авто-Словарь на английском. Ссылки внизу. 2024, Julie
Anonim
Retro Idiot Box
Retro Idiot Box

Ek het 'n ou draagbare televisie van Magnavox uit 1984 op 'n rak by my plaaslike tweedehandse winkel gevind. Ek het by myself gedink, "o NETJIES!" By verdere inspeksie het ek 'n prys van $ 15 opgemerk, so ek het besluit om dit huis toe te neem en iets nuuts daarvan te maak. Ek onthou hoe ek herhalings gesien het as 'n kind van al die groot klassieke in glorieryke swart en wit, en wou dit weer 'n werklikheid maak.

Die probleem is dat daar geen analoog stasies meer is nie, en dit is heeltemal onbekwaam om ATSC -dekodering of digitale dekodering uit te voer. Ek het wel die teenwoordigheid van 'n AV -verbinding aan die kant gesien, en ek het 'n paar framboos -pi's gelê, so ek het besluit om 'n avontuur aan te gaan om uit te vind hoe ek kanale hierheen kan stroom. Ek wil dit ook skerp laat lyk. Ek sal dit nie op die 9 D-selbatterye gebruik nie, sodat ek die rpi in die batterykompartement kan verberg met 'n magdom ander lekkernye.

Stap 1: Kry 'n goeie IPTV -lys

Kry 'n goeie IPTV -lys
Kry 'n goeie IPTV -lys

Daily IPTV List het 'n fantastiese verskeidenheid gratis iptv -stasies wat per land gereël word. Kies die land van keuse en laai die m3u -lêer af.

Vir die sagteware wat hierin voorkom, is m3u 'n vereiste formaat. U kan hier meer lees oor die besonderhede van die formaat.

Stap 2: Voorlopige kode -eksperiment

Die python -kode wat ons gaan skryf, ontleed die m3u -lêer in 'n lys met stasies.

#!/usr/bin/python3

invoer subproses van sys invoer argv klas Stasie: def _init _ (self): self.channel = 0 self.name = '' self.address = '' channel_list = met open ('./ us-m3uplaylist-2020-08- 17-1.m3u ',' r ') as m3u: i = 0 vir reël in m3u: as 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])]. adres])

Kom ons breek dit op.

#!/usr/bin/python3

Dit sê dat ons python3 sal gebruik om hierdie lêer te interpreteer.

invoer subproses van sys invoer argv

Ons benodig die subprosesmodule om ons vlc -instansie te begin, en ons sal argv nodig hê om te kies na watter kanaal ons vlc sal begin.

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

Dit definieer 'n klas genaamd Station. Elke kanaal sal 'n kanaalnommer hê, die naam van die kanaal, uit die m3u -lêer, en 'n adres van waar die kanaal vandaan stroom.

channel_list =

Dit is 'n lys wat alle kanale wat uit die m3u -lêer ontleed is, stoor.

met oop ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') as m3u: i = 0 vir reël in m3u: as line.startswith ('#EXTINF'): dit = Stasie () this.name = line.split (',') [1] line = next (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1

Hierdie lus maak die m3u -snitlys oop en neem die data in. die m3u -lêerreëls waarin ons belangstel, begin met #EXTINF, dit dui op 'n nuwe inskrywing in die snitlyslêer. Die volgende waarde van rente is die naam, wat op dieselfde reël as #EXTINF is, maar met 'n komma tussen hulle. Die volgende reël van hierdie spesifieke m3u is die adres van die stroom. Daar is 'n iterator "i" wat gebruik word om te tel watter kanaal watter is. Hierdie lus herhaal deur die hele m3u -lêer en vul die channel_list met stasies.

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

Met die subprosesbiblioteek kan python prosesse (programme) bel en 'n PID (Process ID) teruggee. Dit stel python in staat om die begin en sluiting van programme "korrek" te bestuur sonder om die geskiedenislêer in te vul, of om meer willekeurige kode met algemene "stelsel" -oproepe te laat loop. Elke element van die skikking wat gebruik word as 'n argument vir Popen, is soos getik in die opdragreël.

vlc --loop --intf dummy -volle skerm adresse

Bogenoemde opdrag is wat u wil uitvoer, met die --loop -opsie wat probleme met die onderbreking van die stroom regstel terwyl die volgende stukke laai (vreemde m3u8 -kwessies), --intf dummy begin vlc sonder die koppelvlak, net 'n skerm, -volledig skerm stel die video in volskerm af (GEEN manier nie), en die adres is die adres van die stroom. Soos u in die kode kan sien, verskaf ons die adres van die kanaal se nommer van die lys, wat tydens gebruik via die argv -verklaring verskaf word. Stoor hierdie lêer as tv_channels.py, verander die ligging van die snitlys in die python -lêer om na u snitlys te wys, en u kan die kode soos volg uitvoer:

python tv_channels.py

Stap 3: Voeg GPIO by

Voeg GPIO by
Voeg GPIO by
Voeg GPIO by
Voeg GPIO by

Die skema toon die twee GPIO -penne wat vir die knoppies gebruik word, en elkeen het 'n optrekweerstand om die GPIO -pen hoog te hou nadat die knoppie gedruk is. Die voorheen gedefinieerde kode kan verfyn word om die operasie 'n bietjie meer naadloos te maak deur GPIO -vermoëns by te voeg. Dit stel ons in staat om die kanaal te verander met knoppies, eerder as met 'n sleutelbord en argv -stellings, net soos vir realsies tv.

Die eerste ding om op te let is dat ek die televisie as 'n klas gedefinieer het. Om 'n televisie te wees, moet ons op 'n huidige kanaal wees, 'n lys van moontlike kanale hê en die kanale kan verander. In hierdie voorbeeld is die enigste metode om van kanaal te verander, om die kanaallys op te skuif en die kanaallys af te beweeg. Sodra die kanaal besluit is, moet ons VLC begin op die kanaal wat ons wil sien.

#!/usr/bin/python3

van tyd af invoer slaap invoer subproses van sys invoer argv van gpiozero invoer Knoppie klas Stasie: def _init _ (self): self.channel = 0 self.name = '' self.address = '' self.process = '' klas Televisie: def _init _ (self, lêernaam): self.current_channel = 0 self.channel_list = self.build_channel_list (lêernaam) self.start_channel () def build_channel_list (self, lêernaam): met oop (lêernaam, 'r') as m3u: i = 0 vir reël in m3u: as 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): probeer: self.verwerking. kill () behalwe: slaag druk ('begin kanaal % 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 = Knoppie (23) terwyl dit waar is: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

Hierdie iterasie van kode het 'n hele paar verbeterings. dit gebruik nou 'n module genaamd gpiozero wat deur die framboospi benodig word om maklik toegang tot die funksies van die GPIO -penne te verkry

sudo apt-get install python3-gpiozero

of

sudo pip installeer gpiozero

Soos gesien in my kode, het ek GPIO 18 en GPIO 23 gekies vir kanaal UP en kanaal DOWN onderskeidelik. Die gpiozero -biblioteek het 'n goeie klas vir knoppiesfunksies vir wanneer_gedruk, ingedruk, wanneer_gehou, ens. Dit maak dit redelik maklik. Ek het die when_pressed gekies, wat verwys na 'n terugbelfunksie om uit te voer wanneer hierdie sein opgespoor word.

Die laaste groot verandering is die opname van die '-q' opsie in die VLC -subprosesoproep. Dit voer vlc eenvoudig uit sonder al die uitvoer na die terminale om dit sonder rommel te hou, sodat ons die inligtingsafdrukverklarings in die kode kan sien.

Stap 4: Integreer die hardeware om skerp te lyk

Integreer die hardeware om skerp te lyk
Integreer die hardeware om skerp te lyk
Integreer die hardeware om skerp te lyk
Integreer die hardeware om skerp te lyk
Integreer die hardeware om skerp te lyk
Integreer die hardeware om skerp te lyk

Ek het nie agtergekom hoe ek dit wil bereik nie, en dit sal 'n unieke oplossing wees vir elke model -TV wat gebruik word. Ek moet goed hieroor nadink en om die televisie kyk om 'n goeie kragbron vir die pi te vind sodra ek die rekenaar in die massiewe batterykompartement druk. Ek het ook oorweeg om die horlosieknoppies te gebruik vir die kanaalkeuse, aangesien hulle alreeds pragtig op die televisie geplaas is, en die klok werk in elk geval nie. Ek plaas meer as ek 'n goeie oplossing vind, maar dit is waar my projek baie van die ander sal verskil. Geniet die regte TV-agtige IPTV-integrasie!

Stap 5: Pi Power

Pi krag
Pi krag

Vir die model -TV wat ek gevind het, benodig dit 'n 12V -kragtoevoer. Ek het om die bord gesoek, maar het geen duidelike kragreguleerders vir 5V gesien nie, so die mees voor die hand liggende plek om 'n konstante kragtoevoer te kry, is op die printplaat waar die vatkonnektor vir die 12V inkom. Daar is 'n duidelike probleem hiermee. ons wil nie die pi braai nie, so ons benodig 'n kragreguleerder. Ek het die MP2315 Step-Down Power Converter gekies. Dit is goedkoop en maklik om te gebruik. Ons sal die 12VDC -invoer van die vatverbinding op die PCB aan die IN+ en GND -penne van die omskakelaar soldeer, en die VO+ na pen 2 op die Raspberry Pi, sowel as 'n GND.

Voordat dit gedoen word, moet u die omskakelaar aanskakel en seker maak dat die regte 5V uit die uitvoer kom. Ek het die eenvoudigste opsie gekies met die vasgemaakte verstelbare spanning. Die trimmer pas die spanning aan, so ek het die spanningsuitset met 'n multimeter dopgehou terwyl ek die trimmer met 'n skroewedraaier aangepas het.

Stap 6: Integrasie van krag

Integrasie van krag
Integrasie van krag
Integrasie van krag
Integrasie van krag
Integrasie van krag
Integrasie van krag

Nadat ons om die televisie gegrawe het, is besluit dat die beste plek om krag te haal, was uit die negatiewe van die vatkonnektor en die TV -AAN/UIT -skakelaar, wat beteken dat ons die strome met die televisie kan aan- en afskakel, eerder dat die pi voortdurend aan die gang deur direk uit die vatkonneksie te trek.

Die drade is vasgesoldeer en langs die PCB se kant langs die kas gevoer totdat hulle die agterkant van die eenheid bereik het, waar hulle deur 'n gat in die agterkant van die batterykompartiment gevoer is. Sodra hulle deurgevoer is, kan ons die punte van die bekabeling voorberei en aan die kragreguleerder soldeer. Ek het dit vir 5V ingestel om die pi aan te dryf en die kopstukke aan die soldeer vasgemaak, sodat ons springers van vroulike na vroulike rakke van die kragreguleerder direk na die pi se GPIO -kopstel kan hardloop. Dit word gewoonlik nie aangeraai nie, aangesien die pi gewoonlik krag kry deur die UBS, wat 'n reguleerder in lyn het om die 5V te kondisioneer, maar aangesien die krag reeds gereguleer word, behoort dit goed te wees.

Daar is 'n mate van geraas op die klanklyne omdat dit 'n grondlus in die stelsel het. Ek het oral op die bord baie krag- en grondpunte probeer, in die hoop op 'n maklike antwoord, maar ek kon dit nie vind nie. Ek het ook 'n microUSB -kabel aan die skakelaar vir die skakelaar gesoldeer om te sien of krag deur die interne regulators van die pi gedwing word. Dit het nie. Die oplossing is in sommige transformators vir klankgrond -isolasie. Dit is bestel eerder as gebou, want dit is goedkoop en mooi verpak. U kan dit by die meeste outomatiese klankwinkels of afdelings afhaal. Dit is wat ek gekies het.

Stap 7: Oplossing vir langtermynknoppies

Langtermyn -knoppie -oplossing
Langtermyn -knoppie -oplossing
Langtermyn -knoppie -oplossing
Langtermyn -knoppie -oplossing

Ongetwyfeld bly die knoppies nie op 'n broodbord nie, so daar moet 'n meer permanente oplossing wees. Ek gryp 'n ou protobord en gooi die kring saam met 'n paar koppenne om dit maklik te maak om by die seine te kom. Dit is waar almal 'n meningsverskil het oor hoe om die knoppies aan of uit te sit. Ek kies om dit aan boord te plaas en dit net aan die onderstel vas te maak sodat die handvatsel wat oor die skerm swaai, nie inmeng nie. Voel vry om die ontwerp by te voeg deur 'n 3d -gedrukte omhulsel by te voeg wat die montering glad maak, moere en boute, fyn kleefmiddels gebruik, die oorspronklike knoppies integreer. Solank dit werk, is daar geen verkeerde antwoorde nie.

Dit word aan die buitekant van die omhulsel gemonteer, en die Raspberry Pi word in die baie ruim batterykompartiment ingesteek, dus moet 'n klein gaatjie geboor word sodat kabels die batterykompartement kan uittrek.

Stap 8: Finale fiksheidskontrole

Finale pas tjek
Finale pas tjek

Al die toerusting moet nog 'n laaste keer geskik wees om presies te sien waar al die gate aan die onderstel gemaak moet word, en watter grootte gate, ens. Daar moet ook oorweeg word waar die komponente geplaas moet word vir optimale verbinding en toegang. Lang verhaal kort, maak seker dat alles pas waar u dink dit pas, voordat u u projek onherstelbaar beskadig en die spansel moet verwyder.

Stap 9: Finale integrasie

Finale integrasie
Finale integrasie
Finale integrasie
Finale integrasie
Finale integrasie
Finale integrasie

Nou is al die hardeware waar dit moet wees, en dit pas alles net so lekker soos 'n gogga in 'n mat. Kom ons sny dinge! Ek het 'n plek in die batterykompartement geïdentifiseer waar ek die AV -kabels kon uitlei met 'n klein inkeping in die plastiek. Ek het dit afgemaal met 'n bankslyper. Dit het redelik kort werk daarvan gemaak. Ek gebruik 'n dremel om meer plastiek af te maal sodat dit baie goed by die kabels pas.

Die laaste komponent is die kanaalkieser. Ek het 'n klein gaatjie in die batteryruimte geboor en die kopkabels een vir een daaruit getrek. Die knoppies is verbind, en ek het die protobord aan die plastiek onderstel vasgemaak met twee helftes voorafgeplak klittenband. Ek verstaan dat daar ongeveer 1200 beter maniere was om dit te doen, maar dit het gewerk en ek het alles wat ek nodig gehad het byderhand.

Stap 10: Geniet u vintage IPTV

Geniet u vintage IPTV
Geniet u vintage IPTV
Geniet u vintage IPTV
Geniet u vintage IPTV
Geniet u vintage IPTV
Geniet u vintage IPTV

Dit omtrent vat dit op. Soek programme en geniet dit om te kyk. Moet egter nie te naby sit nie. Jy sal jou brein verrot!

Daar is baie ruimte om hierdie projek te verbeter, so neem dit in watter rigting u ook al wil, maar dit was lekker om so ver te kom. Wat my betref, loop ek dit vanaf 'n cronjob by herlaai, sodat die stdout nie die boodskappe van die python -script opneem nie. Ek wil dit regstel sodat ek weet op watter kanaal ek is. Nog 'n goeie toevoeging is 'n draadlose sleutelbord -dongle op die Pi. Dit sal u toelaat om die wifi -netwerk te verander as u die huis met die TV verlaat. Ongeag. dit was 'n prettige projek, en ek kan nie wag om met die volgende een te begin nie.

Aanbeveel: