Sadržaj:
- Korak 1: Nabavite dobru listu IPTV -a
- Korak 2: Preliminarni eksperiment sa kodom
- Korak 3: Dodajte GPIO
- Korak 4: Integrirajte hardver da biste izgledali oštro
- Korak 5: Pi Power
- Korak 6: Integriranje napajanja
- Korak 7: Dugoročno rješenje dugmadi
- Korak 8: Konačna provjera uklapanja
- Korak 9: Konačna integracija
- Korak 10: Uživajte u svojoj vintage IPTV
Video: Retro Idiot Box: 10 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:04
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
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
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
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
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
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
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
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
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
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:
Retro arkada - (Puna veličina Pokreće Raspberry Pi): 8 koraka
Retro Arcade - (Puna veličina Pokreće Raspberry Pi): Prvo sam vam želio zahvaliti što ste pogledali vodič za izgradnju ovog Retro Arcade sistema. Uzimam stariju arkadnu kutiju i stavljam je u samostalni ormar sa 24-inčnim monitorom širokog ekrana. Mjerenja u ovom vodiču su gruba za dati
Retro "Rayotron" noćno svjetlo (1. dio): 16 koraka
Retro "Rayotron" noćno svjetlo (1. dio): Uvod U prosincu 1956. Atomic Laboratories reklamirali su Rayotron kao "prvi jeftini elektrostatički generator i akcelerator čestica" za nastavnike nauke i hobiste [1]. Rayotron je bio prevelik, sa gumenim pojasom, napunjen
Retro CP/M samostalni emulator: 8 koraka
Retro CP/M samostalni emulator: Ovaj projekt koristi VGA32 ESP v1.4 modul za pokretanje kombinacije ili RunCPM i FabGL za osiguravanje samostalnog računara sa sustavom ekvivalentnim CP/M 2.2. Popularan tokom 1980 -ih kao operativni sistem za male računare. Možete se vratiti u
Retro arkadna stand-up igra za 2 igrača by Micro Center: 20 koraka
Retro arkada za 2 igrača Stand-Up Micro Center: Vaš lokalni Micro Center sada sadrži sve što vam je potrebno za izradu vlastitog Retro Arcade ormara zasnovanog na Raspberry Pi. Kompleti su potpuno prilagodljivi, uključuju ormarić, Raspberry Pi, dugmad, upravljačke palice, audio i video pribor i još mnogo toga. To je
Raspberry Pi Retro Gaming Machine Postavljanje: 5 koraka
Raspberry Pi Retro Gaming Machine Setup: Za repliciranje retro arkadnih igara od ranih dana računarstva, Rasberry Pi i prateći sustav Retropie odlični su za postavljanje kod kuće na svim starim igrama koje želite igrati ili kao hobi. učenje Pi. Ovaj sistem je bio