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, Novembar
Anonim
Retro Idiot Box
Retro Idiot Box

Pronašao sam stari prijenosni televizor Magnavox iz 1984. godine koji je sjedio na polici u mojoj lokalnoj trgovini. Pomislio sam, "oh NEAT!" Nakon dodatnog pregleda, primijetio sam na njemu cijenu od 15 dolara, pa sam odlučio da ga odnesem kući i napravim nešto mršavo od njega. Sjećam se da sam gledao reprize kao klinac svih velikih klasika u veličanstveno crno -bijeloj tehnici, i želio sam ovo ponovo 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 prenijeti kanale do ovoga. I ja želim da izgleda oštro. Neću ga koristiti na 9 baterija s D-ćelijama, tako da mogu sakriti rpi u odjeljku za baterije s mnoštvom drugih dobrota.

Korak 1: Nabavite dobru listu IPTV -a

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

Dnevna lista IPTV -a ima fantastičan izbor besplatnih iptv stanica organiziranih po zemljama. Odaberite željenu zemlju i preuzmite m3u datoteku.

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 sa kodom

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

#!/usr/bin/python3

uvoz podprocesa iz sys import argv klasa Stanica: def _init _ (self): self.channel = 0 self.name = '' self.address = '' channel_list = sa 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] red = 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 koristiti python3 za tumačenje ove datoteke.

import potprocesfrom sys import argv

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

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

Ovo definira klasu koja se zove Station. Svaki kanal će imati broj kanala, naziv kanala preuzet iz m3u datoteke i adresu odakle taj kanal struji.

channel_list =

Ovo je lista koja ć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 listu za reprodukciju i unosi podatke. linije datoteke m3u koje nas zanimaju počinju s #EXTINF, Ovo označava novi unos u datoteku liste pjesama. Sljedeća interesna vrijednost je ime, koje se nalazi u istom redu kao i #EXTINF, ali sa zarezom između njih. Sljedeća linija ovog m3u je adresa toka. Postoji iterator "i" koji se koristi za brojanje koji je koji kanal. Ova petlja prolazi kroz cijelu m3u datoteku i ispunjava channel_list stanicama.

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

biblioteka potprocesa dozvoljava pythonu da poziva procese (programe) i vraća PID (ID procesa). Ovo omogućava pythonu da može upravljati pokretanjem i zatvaranjem programa "ispravno" bez popunjavanja datoteke povijesti, ili dopuštajući pokretanje više proizvoljnog koda s generičkim "sistemskim" pozivima. Svaki element niza koji se koristi kao argument za Popen je otkucan u komandnoj liniji.

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

Gore navedena naredba je ono što se želi pokrenuti, s opcijom --loop koja rješava neke probleme s pauziranjem toka dok se sljedeći komadi učitavaju (čudni problemi sa m3u8), --intf dummy pokreće vlc bez sučelja, samo zaslon, --fullscreen pokreće video u načinu prikaza na cijelom ekranu (NEMA NAČINA!), a adresa je adresa prijenosa. Kao što možete vidjeti u kodu, adresu dostavljamo s broja kanala s popisa, koji se u vrijeme izvođenja daje putem argv izraza. Sačuvajte ovu datoteku kao tv_channels.py, promijenite lokaciju playliste u python datoteci tako da pokazuje na vašu listu 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 dugmad, a svaki ima otpornik za povlačenje kako bi GPIO pin bio visoko povučen nakon pritiska na dugme. Prethodno definirani kôd može se poboljšati kako bi operacija postala još besprijekornija dodavanjem GPIO mogućnosti. Ovo nam omogućava da promijenimo kanal pomoću dugmadi, a ne pomoću tastature i argv izjava, baš kao televizija za stvarne situacije.

Prva stvar koju treba primijetiti je da imam televiziju definiranu kao klasu. Da bismo bili televizija, moramo biti na trenutnom kanalu, imati listu mogućih kanala i imati mogućnost mijenjanja kanala. U ovom primjeru, jedini način promjene kanala bit će pomicanje prema gore prema popisu kanala, 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 trenutka uvezi podproces uvoza spavanja iz sys uvoza argv iz gpiozero uvoza Klasa dugmeta Stanica: def _init _ (samo): 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.process. kill () osim: pass print ('početni kanal % d' % self.current_channel) self.process = subprocess. Popen (['vlc', '-q', '--loop', '--intf', ' dummy ',' --fullscreen ', self.channel_list [self.current_channel].address]) this = Televizija ('./ us-m3uplaylist-2020-08-17-1.m3u ') channel_UP = Dugme (18) channel_DN = Dugme (23) dok je Tačno: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

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

sudo apt-get install python3-gpiozero

ili

sudo pip install gpiozero

Kao što se vidi u mom kodu, odabrao sam GPIO 18 i GPIO 23 za kanal GORE i kanal DOLJE. Biblioteka gpiozero ima lijepu klasu za funkcije dugmadi kada je pritisnut, pritisnut, pritisnut, zadržan itd. To ga čini prilično lakim. Odabrao sam when_pressed, koji se odnosi na funkciju povratnog poziva koja se pokreće kada se otkrije ovaj signal.

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

Korak 4: Integrirajte hardver da biste izgledali oštro

Integrirajte hardver da biste izgledali oštro
Integrirajte hardver da biste izgledali oštro
Integrirajte hardver da biste izgledali oštro
Integrirajte hardver da biste izgledali oštro
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 u upotrebi. Moram dobro razmisliti o ovome i istražiti televizor kako bih pronašao dobar izvor napajanja za pi nakon što naguram računar u masivni pretinac za baterije. Razmišljao sam i o korištenju tipki sata za odabir kanala, jer su već lijepo postavljeni 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 očigledne regulatore snage za 5V, pa je najočitije mjesto za dobijanje stalnog napajanja na ploči na kojoj ulazi konektor za 12V. Postoji očigledan problem sa ovim. ne želimo pržiti pi, pa će nam trebati regulator snage. Odabrao sam stepeni pretvarač snage MP2315. Jeftino je, prljav i jednostavan za upotrebu. Spajaćemo 12VDC ulaz sa konektora na štampanoj ploči na IN+ i GND pinove pretvarača, a VO+ na pin 2 na Raspberry Pi, kao i GND.

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

Korak 6: Integriranje napajanja

Integrating Power
Integrating Power
Integrating Power
Integrating Power
Integrating Power
Integrating Power

Nakon kopanja po televizoru, odlučeno je da je najbolje mjesto za napajanje iz negativa na konektoru cijevi i televizijskog prekidača za uključivanje/isključivanje, što znači da možemo uključivati i isključivati tokove s televizorom, umjesto toga stalno napajanje pi izvlačenjem direktno 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 otvor koji se nalazio na stražnjoj strani odjeljka 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 prelaziti ženski na ženski skakač iz regulatora snage direktno na pi -jev GPIO set zaglavlja. 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.

Čuje se to na audio linijama, jer postoji petlja uzemljenja u sistemu. Isprobao sam mnoge tačke napajanja i uzemljenja po ploči nadajući se lakom odgovoru, ali nisam našao nijedan. Takođe sam lemio microUSB kabl na regulator sa uključenim režimom da vidim da li bi forsiranje napajanja kroz unutrašnje regulatore pi rešilo problem. Nije. Rješenje će biti u nekim audio transformatorima za izolaciju tla. Oni su radije naručeni nego izgrađeni, jer su jeftini i lijepo upakovani. Možete ih preuzeti u većini trgovina audio odjelima ili odjelima. Ovo sam izabrao.

Korak 7: Dugoročno rješenje dugmadi

Rješenje za dugoročno dugme
Rješenje za dugoročno dugme
Rješenje za dugoročno dugme
Rješenje za dugoročno dugme

Bez sumnje, dugmad neće ostati na osnovnoj ploči, pa mora postojati trajnije rješenje. Uzeo sam staru protoboard ploču i spojio kolo zajedno 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. Odlučujem se za protoboard i samo ih pričvršćujem na šasiju tako da ručka koja se okreće preko ekrana za nošenje ne ometa. Dizajnirajte slobodno dodavanjem 3D štampanog kućišta koje olakšava montažu, koristite matice i vijke, elegantna ljepila, integrirajte originalna dugmad, šta god. Sve dok radi, nema pogrešnih odgovora.

Oni će biti montirani s vanjske strane kućišta, a Raspberry Pi će biti uvučen u vrlo prostran pretinac 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 uklapanja

Final Fit Check
Final Fit Check

Sva oprema mora biti provjerena i zadnji put provjerena kako bi se vidjelo gdje točno sve rupe moraju biti napravljene na šasiji i koje veličine treba napraviti. Osim toga, trebalo bi razmotriti gdje smjestiti komponente radi optimalne lakoće povezivanja i pristupa. Ukratko, pobrinite se da sve stane tamo gdje mislite da jeste 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 se uklapa jednako kao i buba u prostirku. Prekinimo stvari! Prepoznao sam mjesto u odjeljku za bateriju na kojem 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 samljevenje više plastike kako bi bio prilično prikladan za kabele.

Posljednja komponenta je birač kanala. Izbušio sam malu rupu u odeljku za baterije i iz njega izvlačio kablove zaglavlja jedan po jedan. Dugmad su spojena, a protoboard sam pričvrstio za plastično kućište sa dvije polovice prethodno zalijepljenog čička. Shvaćam da je postojalo oko 1200 boljih načina za to, ali ovo je upalilo 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 to sažima. Pronađite emisije i uživajte gledajući. Ipak, nemojte sjediti previše blizu. Pokvarićeš mozak!

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

Preporučuje se: