Satura rādītājs:
- 1. darbība: iegūstiet labu IPTV sarakstu
- 2. darbība. Iepriekšējais koda eksperiments
- 3. darbība: pievienojiet GPIO
- 4. solis: integrējiet aparatūru, lai tā izskatītos asa
- 5. solis: Pi Power
- 6. darbība: jaudas integrēšana
- 7. solis: ilgtermiņa pogu risinājums
- 8. solis: galīgā piemērotības pārbaude
- 9. solis: galīgā integrācija
- 10. solis: izbaudiet savu vintage IPTV
Video: Retro idiotu kaste: 10 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:52
Es atradu veco Magnavox portatīvo televizoru no 1984. gada, sēžot plauktā savā vietējā lietoto preču veikalā. Es pie sevis nodomāju: "ak NEAT!" Pēc turpmākas pārbaudes es pamanīju uz tā 15 ASV dolāru cenu zīmi, tāpēc es nolēmu to nogādāt mājās un izveidot no tā kaut ko krāšņu. Atceros, kā bērnībā skatījos visu lielo klasiku krāšņās melnbaltās krāsās atkārtojumus un gribēju to atkal realizēt.
Problēma ir tāda, ka vairs nav analogo staciju, un tas pilnīgi nespēj veikt nekādu ATSC vai digitālu dekodēšanu. Es pamanīju, ka sānos ir AV savienojums, un apkārt bija daži aveņu pi, tāpēc es nolēmu sākt piedzīvojumu, lai noskaidrotu, kā es varētu straumēt kanālus. Es arī gribu, lai tas izskatās asi. Es to nedarbināšu ar 9 D šūnu baterijām, tāpēc varu paslēpt akumulatoru nodalījumā esošo RPI ar daudziem citiem labumiem.
1. darbība: iegūstiet labu IPTV sarakstu
Ikdienas IPTV sarakstā ir fantastiska bezmaksas iptv staciju izvēle, kas sakārtota pa valstīm. Izvēlieties izvēlēto valsti un lejupielādējiet m3u failu.
Šajā programmatūrā m3u ir nepieciešamais formāts. Vairāk par formāta specifiku varat lasīt šeit.
2. darbība. Iepriekšējais koda eksperiments
Python kods, ko mēs rakstīsim, parsē m3u failu staciju sarakstā.
#!/usr/bin/python3
importēt apakšprocesu no sys importēt argv klases Stacija: def _init _ (self): self.channel = 0 self.name = '' self.address = '' channel_list = ar open ('./ us-m3uplaylist-2020-08- 17-1.m3u ',' r ') kā m3u: i = 0 rindai 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 process = apakšprocess. Popen (['vlc', '--loop', '--intf', 'fiktīvs', '-pilns ekrāns', kanālu saraksts [int (argv [1])]. adrese])
Sadalīsim šo.
#!/usr/bin/python3
Tas norāda bash, ka šī faila interpretēšanai izmantosim python3.
importēt apakšprocesu no sys importēt argv
Mums būs nepieciešams apakšprocesa modulis, lai palaistu mūsu vlc instanci, un mums būs nepieciešams argv, lai izvēlētos, kurā kanālā mēs sāksim vlc.
klases stacija: def _init _ (self): self.channel = 0 self.name = "self.address ="
Tas definē klasi ar nosaukumu Stacija. Katram kanālam būs kanāla numurs, kanāla nosaukums, kas ņemts no m3u faila, un adrese, no kuras kanāls straumē.
channel_list =
Šis ir saraksts, kurā tiks saglabāti visi kanāli, kas parsēti no m3u faila.
ar atvērtu ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') kā m3u: i = 0 rindai m3u: ja line.startswith ('#EXTINF'): šis = stacija () this.name = line.split (',') [1] line = next (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1
Šī cilpa atver m3u atskaņošanas sarakstu un ievada datus. mūs interesējošās m3u failu rindas sākas ar #EXTINF. Tas norāda uz jaunu ierakstu atskaņošanas saraksta failā. Nākamā interesējošā vērtība ir nosaukums, kas atrodas vienā rindā ar #EXTINF, bet ar komatu starp tiem. Šī konkrētā m3u rinda ir straumes adrese. Tiek izmantots iterators "i", lai saskaitītu, kurš kanāls ir kurš. Šī cilpa atkārto visu m3u failu un aizpilda kanālu sarakstu ar stacijām.
process = apakšprocess. Popen (['vlc', '--loop', '--intf', 'fiktīvs', '-pilns ekrāns', channel_list [int (argv [1])]. adrese])
apakšprocesa bibliotēka ļauj python izsaukt procesus (programmas) un atgriež PID (procesa ID). Tas ļauj python pārvaldīt programmu palaišanu un aizvēršanu "pareizi", neaizpildot vēstures failu vai ļaujot izpildīt patvaļīgāku kodu ar vispārējiem "sistēmas" izsaukumiem. Katrs masīva elements, ko Popen izmanto kā argumentu, ir ierakstīts komandrindā.
vlc --loop --intf dummy -pilna ekrāna adreses
Iepriekš minētā komanda ir vēlama, lai to izpildītu, izmantojot opciju --loop, kas novērš dažas problēmas ar straumes apturēšanu, kamēr tiek ielādēti nākamie gabali (dīvainas m3u8 problēmas), --intf fiktīvs palaiž vlc bez saskarnes, tikai ekrāns, palaiž video pilnekrāna režīmā (NO WAY!), un adrese ir straumes adrese. Kā redzat kodā, mēs norādām adresi no saraksta kanāla numura, kas tiek nodrošināts izpildes laikā, izmantojot argv paziņojumu. Saglabājiet šo failu kā tv_channels.py, mainiet atskaņošanas saraksta atrašanās vietu python failā, lai norādītu uz jūsu atskaņošanas sarakstu, un varat palaist kodu šādi:
python tv_channels.py
3. darbība: pievienojiet GPIO
Shēmā parādītas divas GPIO tapas, kas tiek izmantotas pogām, un katrai no tām ir uzvilkšanas rezistors, lai pēc pogas nospiešanas GPIO tapa būtu izvilkta augstu. Iepriekš definēto kodu var uzlabot, lai padarītu darbību nedaudz vienmērīgāku, pievienojot GPIO iespējas. Tas ļauj mums mainīt kanālu ar pogām, nevis ar tastatūru un argv paziņojumiem, tāpat kā televīzijai.
Vispirms jāatzīmē, ka televīzija ir definēta kā klase. Lai kļūtu par televīziju, mums ir jābūt pašreizējam kanālam, jābūt iespējamo kanālu sarakstam un jāspēj mainīt kanālus. Šajā piemērā vienīgā kanālu maiņas metode ir pārvietot kanālu sarakstu uz augšu un kanālu sarakstu uz leju. Kad kanāls ir izlemts, mums būs jāsāk VLC kanālā, kuru vēlamies redzēt.
#!/usr/bin/python3
no laika importēšanas miega importēšanas apakšprocesa no sys importēšanas argv no gpiozero importēšanas Pogas klases Stacija: def _init _ (self): self.channel = 0 self.name = "self.address =" self.process = "class Television: def _init _ (self, faila nosaukums): self.current_channel = 0 self.channel_list = self.build_channel_list (faila nosaukums) self.start_channel () def build_channel_list (self, filename): ar open (faila nosaukums, 'r') kā m3u: i = 0 rindai m3u: if line.startswith ('#EXTINF'): this = Station () this.name = line.split (',') [1] line = next (m3u) this.address = line. sloksne () 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 ja self.current_channel <0: self.current_channel = 0 self.start_channel () def start_channel (self): try: self.process. kill () izņemot: pass print ('sākuma kanāls % d' % self.current_channel) self.process = apakšprocess. 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 = Poga (23), kamēr True: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down
Šai koda iterācijai ir diezgan daudz uzlabojumu. tagad tas izmantoja moduli ar nosaukumu gpiozero, kas ir nepieciešams aveņu pi, lai viegli piekļūtu GPIO tapu funkcionalitātei
sudo apt-get install python3-gpiozero
vai
sudo pip instalējiet gpiozero
Kā redzams manā kodā, esmu izvēlējies attiecīgi GPIO 18 un GPIO 23 kanālam UP un DOWN. Gpiozero bibliotēkā ir jauka klase pogu funkcijām, kad tiek nospiests, ir_spiests, kad_turēts utt. Tas padara to diezgan vienkāršu. Es izvēlējos if_pressed, kas attiecas uz atzvanīšanas funkciju, kas jāpalaiž, kad tiek konstatēts šis signāls.
Pēdējās būtiskās izmaiņas ir opcijas “-q” iekļaušana VLC apakšprocesa izsaukumā. Tas vienkārši palaiž vlc bez visas izejas uz termināli, lai tas netiktu pārblīvēts, lai mēs varētu redzēt informatīvos drukātos paziņojumus kodā.
4. solis: integrējiet aparatūru, lai tā izskatītos asa
Es neesmu sapratis, kā es vēlos to paveikt, un tas būs unikāls risinājums katram izmantotajam televizora modelim. Man par to ir rūpīgi jādomā un jāpārbauda televizors, lai atrastu labu barošanas avotu pī, kad saspiedu datoru masīvā akumulatora nodalījumā. Esmu arī apsvēris iespēju izmantot kanālu atlasīšanai pulksteņa pogas, jo tās jau ir skaisti ievietotas televizorā, un pulkstenis tik un tā nedarbojas. Es publicēšu vairāk, kad atradīšu labu risinājumu, taču tieši šeit mans projekts ievērojami atšķirsies no citu projektu. Izbaudiet reālai TV līdzīgu IPTV integrāciju!
5. solis: Pi Power
Atrastā modeļa televizoram ir nepieciešams 12V barošanas avots. Es zondēju ap dēli, bet neredzēju acīmredzamus 5 V strāvas regulatorus, tāpēc visredzamākā vieta, kur iegūt stabilu barošanas avotu, ir uz shēmas plates, kur ieiet 12 V mucas savienotājs. Ar to ir acīmredzama problēma. mēs nevēlamies cept pi, tāpēc mums būs nepieciešams jaudas regulators. Es izvēlējos MP2315 pakāpenisku jaudas pārveidotāju. Tas ir neticami lēts un vienkārši lietojams. Mēs pielodēsim 12 V līdzstrāvas ieeju no PCB cilindra savienotāja uz pārveidotāja IN+ un GND tapām, un VO+ uz Raspberry Pi 2. tapu, kā arī GND.
PIRMS to dariet, noteikti ieslēdziet pārveidotāju un pārliecinieties, ka no izejas nāk pareizais 5V spriegums. Es izvēlējos vienkāršāko variantu ar vadu regulējamu spriegumu. Trimmeris regulēs spriegumu, tāpēc es noskatījos sprieguma izvadi ar multimetru, kad es regulēju trimmeri ar skrūvgriezi.
6. darbība: jaudas integrēšana
Pēc rakšanās pa televizoru tika nolemts, ka labākā vieta strāvas izņemšanai ir no mucas savienotāja mīnusa un televizora ON/OFF slēdža, kas nozīmē, ka mēs varam ar televizoru ieslēgt un izslēgt straumes. pastāvīgi barojot pi, velkot tieši no mucas savienotāja.
Vadi tika pielodēti un piegādāti gar PCB sānu korpusu blakus korpusam, līdz tie sasniedza ierīces aizmuguri, kur tie tika padoti caur caurumu, kas atradās akumulatora nodalījuma aizmugurē. Kad tie ir baroti, mēs varam sagatavot kabeļu galus un pielodēt līdz jaudas regulatoram. Es to noregulēju uz 5 V, lai darbinātu pi un pielodētu galvenes tapas, lai mēs varētu no sievietes līdz sieviešu džemperiem palaist no jaudas regulatora tieši uz pi GPIO galvenes komplektu. Tas parasti nav ieteicams, jo pi parasti saņem strāvu caur UBS, kurā ir iebūvēts regulators 5 V kondicionēšanai, bet, tā kā jauda jau tiek regulēta, tam vajadzētu būt kārtībā.
To darot, audio līnijās ir neliels troksnis, jo sistēmā ir zemējuma cilpa. Es izmēģināju daudzus spēka un zemes punktus, cerot uz vieglu atbildi, bet neatradu nevienu. Es arī pielodēju microUSB kabeli pie pārslēgtā režīma regulatora, lai redzētu, vai jaudas piespiešana caur pi iekšējiem regulatoriem atrisinās problēmu. Tā nebija. Risinājums būs dažos audio zemes izolācijas transformatoros. Tie tika pasūtīti, nevis būvēti, jo tie ir lēti un labi iepakoti. Jūs varat tos saņemt lielākajā daļā auto audio veikalu vai nodaļu. To es izvēlējos.
7. solis: ilgtermiņa pogu risinājums
Bez šaubām, pogas nepaliks uz maizes dēļa, tāpēc ir jābūt pastāvīgākam risinājumam. Es paķēru veco protobortu un sametu ķēdi kopā ar dažām galvenes tapām, lai būtu vieglāk piekļūt signāliem. Šeit ikvienam būs atšķirīgs viedoklis par to, kā piestiprināt vai piestiprināt pogas. Es izvēlos tos ievietot protoboardā un vienkārši piestiprināt pie šasijas tā, lai rokturis, kas pārvietotos pa ekrānu, netraucētu. Jūtieties brīvi, lai izlabotu dizainu, pievienojot 3D drukātu korpusu, kas izlīdzina montāžu, izmantojiet uzgriežņus un skrūves, izsmalcinātas līmes, integrējiet oriģinālās pogas. Kamēr tas darbojas, nav nepareizu atbilžu.
Tie tiks uzstādīti uz korpusa ārpuses, un Raspberry Pi tiks ievietots ļoti ietilpīgajā akumulatora nodalījumā, tāpēc būs jāizurbj mazs caurums, lai kabeļi varētu izkļūt no akumulatora nodalījuma.
8. solis: galīgā piemērotības pārbaude
Viss aprīkojums pēdējo reizi ir jāpārbauda, lai precīzi redzētu, kur visi šasijas caurumi ir jāizveido, un kāda izmēra caurumi utt. Turklāt būtu jāapsver, kur izvietot komponentus, lai nodrošinātu optimālu savienojamību un piekļuvi. Īsi sakot, pārliecinieties, ka viss atbilst tam, kur jūs domājat, pirms jūs neatgriezeniski sabojājat savu projektu un jums ir jāizņem spackle.
9. solis: galīgā integrācija
Tagad visa aparatūra ir tur, kur tai ir jābūt, un tā visa ir tikpat cieši pieguļoša kā kļūda paklājā. Izgriezīsim lietas! Es noteicu vietu akumulatora nodalījumā, kur varētu izvadīt AV kabeļus, izmantojot nelielu ievilkumu plastmasā. Es to noslīpēju ar stenda dzirnaviņām. Tas padarīja to diezgan īsu. Es izmantoju dremel, lai sasmalcinātu vairāk plastmasas, lai tas būtu diezgan piemērots kabeļiem.
Pēdējais komponents ir kanālu atlasītājs. Es urbju nelielu caurumu akumulatora nodalījumā un pa vienam izvedu no tā vadus. Pogas bija savienotas, un es piestiprināju protobortu pie plastmasas šasijas ar divām pusēm iepriekš uzlīmējama velcro. Es saprotu, ka bija aptuveni 1200 labāku veidu, kā to izdarīt, taču tas darbojās, un man bija viss nepieciešamais pa rokai.
10. solis: izbaudiet savu vintage IPTV
Tas par to apkopo. Atrodiet izrādes un izklaidējieties skatīties. Nesēdi taču pārāk tuvu. Jūs sapūsit smadzenes!
Ir daudz iespēju uzlabot šo projektu, tāpēc virziet to jebkurā vēlamajā virzienā, taču bija jautri tikt tik tālu. Kas attiecas uz mani, es to palaižu no cronjob pēc pārstartēšanas, tāpēc stdout neuztver ziņojumus no python skripta. Es vēlos to labot, lai es zinātu, kurā kanālā esmu. Vēl viens labs papildinājums ir bezvadu tastatūras dongle uz Pi. Tas ļautu mainīt Wi -Fi tīklu, ja atstājat māju ar televizoru. Neskatoties uz. tas bija jautrs projekts, un es nevaru gaidīt, lai sāktu nākamo.
Ieteicams:
DIY Raspberry Pi lejupielādes kaste: 4 soļi
DIY Raspberry Pi lejupielādes kaste: vai jūs bieži atrodaties lejupielādēt lielus failus, piemēram, filmas, straumes, kursus, seriālus utt., Tad jūs nonākat īstajā vietā. Šajā pamācībā mēs savu Raspberry Pi nulli pārvērstu lejupielādes mašīnā. Kurā var lejupielādēt jebkuru
Nedroša bloķēšanas kaste: 7 soļi
Nedroša slēdzene: šī pamācība tika izveidota, izpildot Dienvidfloridas Universitātes Makecourse projekta prasības (www.makecourse.com) Labdien! Vai jums ir ne tik vērtīgas vērtslietas, kuras vēlaties nodrošināt, bet ne tik droši? Vai jums tās ir
Arduino tastatūras kursorsviru paplašinātāja kaste un skaņas kontroliera lieta, izmantojot Deej: 8 soļi
Arduino tastatūras kursorsviru paplašinātāja kaste un skaņas kontroliera lieta, izmantojot Deej: Kāpēc Jau kādu laiku es vēlos tastatūrai pievienot nelielu kursorsviru, lai kontrolētu saskarnes elementus, vai citus mazākus uzdevumus spēlēs un simulatoros (MS Flight Sim, Elite: Dangerous, Zvaigžņu kari: eskadras utt.). Arī Elite: Dangerous, es esmu bijis
Kabatas bezjēdzīga kaste (ar personību): 9 soļi (ar attēliem)
Kabatas bezjēdzīga kaste (ar personību): Lai gan mēs varam būt tālu no robotu sacelšanās, ir viena mašīna, kas jau ir pretrunā ar cilvēkiem, kaut arī pēc iespējas mazākā veidā. Neatkarīgi no tā, vai vēlaties to saukt par bezjēdzīgu kasti vai mašīnu, kas atstāj mani mierā, šis plūkstošais, asprātīgais robots ir
Raspberry Pi dzesēšanas ventilatora kaste ar CPU temperatūras indikatoru: 10 soļi (ar attēliem)
Raspberry Pi dzesēšanas ventilatora kaste ar CPU temperatūras indikatoru: Iepriekšējā projektā es ieviesu aveņu pi (turpmāk RPI) CPU temperatūras indikatora ķēdi. Ķēde vienkārši parāda RPI 4 atšķirīgu CPU temperatūras līmeni šādi.- Zaļā gaismas diode ieslēdzas, kad CPU temperatūra ir 30 ~