Sadržaj:

Retro Idiot Box: 10 koraka
Retro Idiot Box: 10 koraka

Video: Retro Idiot Box: 10 koraka

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

Pronašao sam stari prijenosni televizor Magnavox iz 1984. koji je sjedio na polici u mojoj lokalnoj trgovini. U sebi sam pomislio: "oh NEAT!" Nakon daljnjeg pregleda primijetio sam na njemu cijenu od 15 dolara, pa sam ga odlučio odnijeti kući i od njega napraviti nešto mršavo. Sjećam se da sam kao klinac gledao reprize svih velikih klasika u veličanstvenoj crno -bijeloj tehnici, i želio sam to ponovno pretvoriti u stvarnost.

Problem je u tome što vani više nema analognih stanica, a to je potpuno nesposobno za bilo kakvo ATSC dekodiranje ili bilo koje digitalno dekodiranje. Primijetio sam prisutnost AV veze sa strane i imao sam nekoliko malina pi oko sebe, pa sam odlučio krenuti u avanturu kako bih shvatio kako mogu usmjeriti kanale do ovoga. I ja želim da izgleda oštro. Neću ga koristiti na 9 baterija s D-ćelijama, pa mogu sakriti rpi u odjeljku za baterije s mnoštvom drugih dobrota.

Korak 1: Nabavite dobar popis IPTV -a

Nabavite dobru listu IPTV -a
Nabavite dobru listu IPTV -a

Dnevni popis IPTV -a ima fantastičan izbor besplatnih iptv postaja organiziranih po zemljama. Odaberite željenu zemlju i preuzmite datoteku m3u.

Za softver koji je u ovom formatu, m3u je potreban format. Više o specifičnostima formata možete pročitati ovdje.

Korak 2: Preliminarni eksperiment s kodom

Python kôd koji ćemo napisati raščlanjuje m3u datoteku na popis postaja.

#!/usr/bin/python3

uvoz podprocesa iz sys uvoz argv klasa Stanica: def _init _ (self): self.channel = 0 self.name = '' self.address = '' channel_list = s otvorenim ('./ us-m3uplaylist-2020-08- 17-1.m3u ',' r ') kao m3u: i = 0 za liniju u m3u: if line.startswith ('#EXTINF '): this = Station () this.name = line.split (', ') [1] redak = sljedeći (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1 process = potprocess. Popen (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. adresa])

Hajde da ovo razbijemo.

#!/usr/bin/python3

Ovo govori bashu da ćemo za tumačenje ove datoteke koristiti python3.

uvoz podprocesa iz sys uvoz argv

Trebat će nam modul podprocesa za pokretanje naše vlc instance, a trebat će nam i argv za odabir kanala u koji ćemo pokrenuti vlc.

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

Time se definira klasa koja se naziva Station. Svaki kanal će imati broj kanala, naziv kanala preuzet iz m3u datoteke i adresu odakle taj kanal struji.

popis_ kanala =

Ovo je popis koji će pohraniti sve kanale raščlanjene iz m3u datoteke.

s otvorenim ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') kao m3u: i = 0 za liniju u 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

Ova petlja otvara m3u popis za reprodukciju i unosi podatke. linije datoteke m3u koje nas zanimaju počinju s #EXTINF, To ukazuje na novi unos u datoteku popisa za reprodukciju. Sljedeća interesna vrijednost je ime, koje se nalazi u istom retku kao i #EXTINF, ali s zarezom između njih. Sljedeći redak ovog m3u adresa je toka. Postoji iterator "i" koji se koristi za brojanje koji je koji kanal. Ova petlja ponavlja cijelu m3u datoteku i ispunjava channel_list postajama.

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

knjižnica potprocesa omogućuje pythonu pozivanje procesa (programa) i vraća PID (ID procesa). To omogućuje pythonu da može upravljati pokretanjem i zatvaranjem programa "ispravno" bez popunjavanja datoteke povijesti ili dopuštanjem izvođenja više proizvoljnog koda s generičkim "sistemskim" pozivima. Svaki element niza koji se koristi kao argument Popenu upisan je u naredbeni redak.

vlc --loop --intf dummy -adrese na cijelom zaslonu

Gore navedena naredba je ono što se želi pokrenuti, a opcija --loop popravlja neke probleme s pauziranjem toka dok se sljedeći komadi učitavaju (čudni problemi s m3u8), --intf dummy pokreće vlc bez sučelja, samo zaslon, --fullscreen pokreće video u načinu prikaza na cijelom zaslonu (NEMA NAČINA!), a adresa je adresa streama. Kao što možete vidjeti u kodu, adresu dostavljamo s broja kanala s popisa, koji se u vrijeme izvođenja daje putem argv izraza. Spremite ovu datoteku kao tv_channels.py, promijenite mjesto popisa za reprodukciju u datoteci python tako da pokazuje na vaš popis za reprodukciju, a kôd možete pokrenuti na sljedeći način:

python tv_channels.py

Korak 3: Dodajte GPIO

Dodajte GPIO
Dodajte GPIO
Dodajte GPIO
Dodajte GPIO

Shema prikazuje dva GPIO pina koji se koriste za gumbe, a svaki ima otpornik za povlačenje kako bi GPIO pin bio visoko povučen nakon pritiska na gumb. Prethodno definirani kôd može se poboljšati kako bi operacija postala još besprijekornija dodavanjem GPIO mogućnosti. To nam omogućuje da promijenimo kanal pomoću gumba, a ne tipkovnicom i argv izjavama, baš kao televizor za stvarne situacije.

Prvo što treba napomenuti je da sam televiziju definirao kao klasu. Da bismo bili televizija, moramo biti na trenutnom kanalu, imati popis mogućih kanala i imati mogućnost mijenjanja kanala. U ovom primjeru, jedini način promjene kanala bit će pomicanje popisa kanala prema gore i pomicanje prema dolje po popisu kanala. Nakon što se kanal odluči, morat ćemo pokrenuti VLC na kanalu koji želimo vidjeti.

#!/usr/bin/python3

od vremena import podproces uvoza spavanje iz sys uvoz argv iz gpiozero importa Tipka tipke Stanica: def _init _ (self): self.channel = 0 self.name = '' self.address = '' self.process = '' class Televizija: def _init _ (self, naziv datoteke): self.current_channel = 0 self.channel_list = self.build_channel_list (naziv datoteke) self.start_channel () def build_channel_list (self, naziv datoteke): s otvorenim (naziv datoteke, 'r') kao m3u: i = 0 za liniju u m3u: if 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 ako self.current_channel <0: self.current_channel = 0 self.start_channel () def start_channel (self): try: self.proces. kill () osim: pass print ('početni kanal % d' % self.current_channel) self.process = podproces. 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 = Gumb (18) channel_DN = Gumb (23) dok je True: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

Ova iteracija koda ima dosta poboljšanja. sada koristi modul gpiozero koji je potreban malini pi za lak pristup funkcijama GPIO pinova

sudo apt-get install python3-gpiozero

ili

sudo pip instalirajte gpiozero

Kao što se vidi u mom kodu, odabrao sam GPIO 18 i GPIO 23 za kanal UP i kanal DOWN. Knjižnica gpiozero ima lijepu klasu za funkcije gumba za when_pressed, is_pressed, when_held itd. To ga čini prilično lakim. Odabrao sam when_pressed, koji se odnosi na funkciju povratnog poziva koja će se pokrenuti kada se otkrije ovaj signal.

Posljednja velika promjena je uključivanje opcije '-q' u poziv potprocesa VLC. Ovo jednostavno pokreće vlc bez svih izlaza do terminala kako ne bi bilo nereda kako bismo mogli vidjeti informativne ispisne izjave u kodu.

Korak 4: Integrirajte hardver kako biste izgledali oštro

Integrirajte hardver da biste izgledali oštro
Integrirajte hardver da biste izgledali oštro
Integrirajte hardver da biste izgledali oštrije
Integrirajte hardver da biste izgledali oštrije
Integrirajte hardver da biste izgledali oštro
Integrirajte hardver da biste izgledali oštro

Nisam shvatio kako to želim postići, a to će biti jedinstveno rješenje za svaki model televizora koji se koristi. Moram dobro razmisliti o ovome i istražiti televizor kako bih pronašao dobar izvor napajanja za pi nakon što uguram računalo u masivni pretinac za baterije. Razmišljao sam i o korištenju tipki sata za odabir kanala jer su već lijepo postavljene na televizoru, a sat ionako ne radi. Objavit ću više kad nađem dobro rješenje, ali tu će se moj projekt uvelike razlikovati od svih ostalih. Uživajte u pravoj televiziji poput IPTV integracije!

Korak 5: Pi Power

Pi Power
Pi Power

Za model televizora koji sam pronašao potrebno je napajanje od 12 V. Pretražio sam ploču, ali nisam vidio nikakve očite regulatore snage za 5V, pa je najočitije mjesto za dobivanje stalnog napajanja na pločici na kojoj ulazi konektor za 12V. Tu je očit problem. ne želimo pržiti pi, pa će nam trebati regulator snage. Odabrao sam stepeni pretvarač snage MP2315. Jeftino je, prljav i jednostavan za upotrebu. Spajat ćemo 12VDC ulaz iz cijevnog priključka na PCB -u na IN+ i GND pinove pretvarača, a VO+ na pin 2 na Raspberry Pi, kao i GND.

PRIJE nego što to učinite, obavezno uključite pretvarač i pobrinite se da odgovarajući 5 V izlazi iz izlaza. Odabrao sam najjednostavniju opciju s ožičenim podesivim naponom. Trimer će podesiti napon, pa sam multimetrom promatrao izlazni napon dok sam trimer podešavao odvijačem.

Korak 6: Integriranje snage

Integrirajuća snaga
Integrirajuća snaga
Integrirajuća snaga
Integrirajuća snaga
Integrirajuća snaga
Integrirajuća snaga

Nakon što smo kopali po televizoru, odlučeno je da je najbolje mjesto za napajanje iz negativa priključka cijevi i televizijskog prekidača za uključivanje/isključivanje, što znači da možemo uključivati i isključivati tokove s televizorom, nego neprestano napajanje pi izvlačenjem izravno iz konektora cijevi.

Žice su bile lemljene i napajane sa strane PCB -a pored kućišta sve dok nisu stigle do stražnje strane jedinice, gdje su provedene kroz rupu koja se nalazila na stražnjoj strani pretinca za baterije. Nakon što su provedeni, možemo pripremiti krajeve kabela i lemiti ih do regulatora snage. Ugodio sam ga za 5V za napajanje pi -ja i lemio na njega zaglavlje zaglavlja tako da možemo izvoditi ženske na ženske skakače iz regulatora snage izravno na pi -jev skup zaglavlja GPIO. To se obično ne savjetuje jer pi općenito dobiva napajanje putem UBS -a, koji ima ugrađeni regulator za uvjetovanje 5V, ali budući da se napajanje već regulira, to bi trebalo biti u redu.

Na ovaj način dolazi do buke na audio linijama jer postoji petlja uzemljenja u sustavu. Isprobao sam mnoge točke napajanja i uzemljenja diljem ploče nadajući se jednostavnom odgovoru, ali nisam našao ništa. Zalemio sam i microUSB kabel na regulator s uključenim načinom rada da vidim hoće li forsiranje napajanja kroz unutarnje regulatore pi riješiti problem. Nije. Rješenje će biti u nekim audio transformatorima za izolaciju tla. Oni su prije naručeni nego izgrađeni, jer su jeftini i lijepo zapakirani. Možete ih preuzeti u većini trgovina audio odjelima ili na odjelima. Ovo sam izabrao.

Korak 7: Dugoročno rješenje gumba

Rješenje za dugoročne tipke
Rješenje za dugoročne tipke
Rješenje za dugoročne tipke
Rješenje za dugoročne tipke

Bez sumnje, gumbi neće ostati na ploči pa mora postojati trajnije rješenje. Uzeo sam staru protoboard ploču i spojio krug s nekim zaglavljima da bih olakšao pristup signalima. Ovdje će svi imati različita mišljenja o tome kako pričvrstiti ili montirati gumbe. Odabirem ih protoborovati i samo ih pričvrstiti na šasiju tako da ručka koja se njiše preko zaslona za nošenje ne ometa. Dizajnirajte slobodno dodavanjem 3D tiskane futrole koja olakšava montažu, koristite matice i vijke, elegantna ljepila, integrirajte izvorne gumbe, što god. Sve dok radi, nema pogrešnih odgovora.

Oni će biti montirani s vanjske strane kućišta, a Raspberry Pi će biti uguran unutar vrlo prostranog pretinca za baterije, pa će morati biti izbušena mala rupa kako bi kablovi mogli izaći iz pretinca za baterije.

Korak 8: Konačna provjera prikladnosti

Konačna provjera prikladnosti
Konačna provjera prikladnosti

Sva oprema mora biti provjerena posljednji put kako bi se vidjelo gdje točno sve rupe moraju biti napravljene na šasiji i koje veličine treba napraviti itd. Osim toga, trebalo bi razmotriti gdje smjestiti komponente za optimalnu jednostavnost povezivanja i pristupa. Ukratko, pobrinite se da sve stane tamo gdje mislite da jest prije nego što nepopravljivo oštetite svoj projekt i morate ukloniti mrlju.

Korak 9: Konačna integracija

Konačna integracija
Konačna integracija
Konačna integracija
Konačna integracija
Konačna integracija
Konačna integracija

Sada je sav hardver tamo gdje treba biti, a sve pristaje jednako ugodno kao bug u prostirci. Prekinimo stvari! Identificirao sam mjesto u pretincu za baterije gdje bih mogao izvući AV kabele pomoću male udubljenja u plastici. Samljela sam ga sa mlinom za klupu. Učinio je to prilično kratko. Koristio sam dremel za usitnjavanje više plastike kako bi bio prilično prikladan za kabele.

Posljednja komponenta je birač kanala. Izbušio sam malu rupu u pretincu za baterije i iz njega izvlačio kabele zaglavlja jedan po jedan. Gumbi su spojeni, a protoboard sam pričvrstio za plastično kućište s dvije polovice prethodno zalijepljenog čička. Shvaćam da je postojalo oko 1200 boljih načina za to, ali ovo je uspjelo i imao sam pri ruci sve što mi je potrebno.

Korak 10: Uživajte u svojoj vintage IPTV

Uživajte u svojoj vintage IPTV
Uživajte u svojoj vintage IPTV
Uživajte u svojoj vintage IPTV
Uživajte u svojoj vintage IPTV
Uživajte u svojoj vintage IPTV
Uživajte u svojoj vintage IPTV

To otprilike sažima. Pronađite emisije i zabavite se gledajući. Ipak, nemojte sjediti preblizu. Pokvarit ćeš mozak!

Postoji mnogo prostora za poboljšanje ovog projekta, pa ga odnesite u kojem god smjeru želite, ali bilo je zabavno doći dovde. Što se mene tiče, ovo pokrećem iz cronjoba pri ponovnom pokretanju, tako da stdout ne hvata poruke iz skripte python. Htio bih to popraviti da znam na kojem sam kanalu. Još jedan dobar dodatak je bežični ključ za tipkovnicu na Pi -u. To bi vam omogućilo da promijenite WiFi mrežu ako napustite kuću s televizorom. Bez obzira na to. bio je to zabavan projekt i jedva čekam započeti sljedeći.

Preporučeni: