Turinys:

Retro idioto dėžutė: 10 žingsnių
Retro idioto dėžutė: 10 žingsnių

Video: Retro idioto dėžutė: 10 žingsnių

Video: Retro idioto dėžutė: 10 žingsnių
Video: 10 geriausių žaidimų 8 bitų sistemose | NES [Dandy, Subor] 2024, Lapkritis
Anonim
Retro idiotų dėžutė
Retro idiotų dėžutė

Radau seną nešiojamąjį 1984 metų „Magnavox“televizorių, sėdintį ant lentynos vietinėje dėvėtų prekių parduotuvėje. Aš pagalvojau sau: "O NEAT!" Po tolesnio patikrinimo pastebėjau 15 USD kainų etiketę, todėl nusprendžiau parsinešti namo ir padaryti iš jo kažką pikantiško. Prisimenu, kaip vaikystėje žiūrėjau pakartojimus iš visų didžiųjų klasikų nuostabios juodos ir baltos spalvos, ir norėjau tai vėl paversti realybe.

Problema ta, kad ten nebėra analoginių stočių, ir tai visiškai nesugeba atlikti jokio ATSC ar bet kokio skaitmeninio dekodavimo. Aš pastebėjau, kad šone yra AV jungtis, ir aplinkui buvo keletas aviečių pi, todėl nusprendžiau leistis į nuotykius ir išsiaiškinti, kaip galėčiau transliuoti kanalus. Aš taip pat noriu, kad jis atrodytų aštrus. Nenaudosiu jo su 9 D elementų baterijomis, todėl galiu paslėpti baterijų skyriaus RPI su daugybe kitų gėrybių.

1 žingsnis: gaukite gerą IPTV sąrašą

Gaukite gerą IPTV sąrašą
Gaukite gerą IPTV sąrašą

Kasdieniniame IPTV sąraše yra fantastiškas nemokamų iptv stočių pasirinkimas pagal šalį. Pasirinkite pasirinktą šalį ir atsisiųskite m3u failą.

Šioje programinėje įrangoje m3u yra būtinas formatas. Daugiau apie formato specifiką galite paskaityti čia.

2 žingsnis: preliminarus kodo eksperimentas

Python kodas, kurį ketiname parašyti, analizuoja m3u failą į stočių sąrašą.

#!/usr/bin/python3

importuoti papildomą procesą iš sys importuoti argv klasės stotis: def _init _ (self): self.channel = 0 self.name = '' self.address = '' channel_list = su open ('./ us-m3uplaylist-2020-08- 17-1.m3u ',' r ') kaip m3u: i = 0 eilutėje 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 = subprocess. Popen (['vlc', '--loop', '--intf', 'fiktyvus', '-pilnas ekranas', kanalų sąrašas [int (argv [1])]. adresas])

Padalinkime tai.

#!/usr/bin/python3

Tai sako bash, kad mes naudosime „python3“šiam failui interpretuoti.

importuoti subprocessfrom sys importuoti argv

Mums reikės papildomo proceso modulio, kad paleistume vlc egzempliorių, ir mums reikės argv, kad pasirinktume, į kurį kanalą paleisime vlc.

klasės stotis: def _init _ (self): self.channel = 0 self.name = "self.address ="

Tai apibrėžia klasę, vadinamą stotimi. Kiekvienas kanalas turės kanalo numerį, kanalo pavadinimą, paimtą iš m3u failo, ir adresą, iš kurio kanalas transliuojamas.

channel_list =

Tai sąrašas, kuriame bus saugomi visi kanalai, išanalizuoti iš m3u failo.

su atvira ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') kaip m3u: i = 0 eilutei 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

Ši kilpa atveria m3u grojaraštį ir įtraukia duomenis. mus dominančios „m3u“failo eilutės prasideda #EXTINF, tai reiškia naują įrašą grojaraščio faile. Kita vertybė yra pavadinimas, kuris yra toje pačioje eilutėje kaip ir #EXTINF, tačiau tarp jų yra kablelis. Sekanti šio konkretaus m3u eilutė yra srauto adresas. Norėdami apskaičiuoti, kuris kanalas yra, naudojamas iteratorius „i“. Ši kilpa kartoja visą m3u failą ir užpildo kanalų sąrašą stotimis.

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

papildomo proceso biblioteka leidžia python iškviesti procesus (programas) ir grąžina PID (proceso ID). Tai leidžia „python“valdyti „paleidimą ir uždarymą“„teisingai“neužpildant istorijos failo arba neleidžiant paleisti savavališkesnio kodo su bendrais „sistemos“iškvietimais. Kiekvienas masyvo elementas, naudojamas kaip Popen argumentas, yra įvestas komandų eilutėje.

vlc --loop --intf dummy -viso ekrano adresai

Aukščiau pateikta komanda yra tai, ką norima paleisti, pasirinkus parinktį --loop, kai kurios problemos, susijusios su srauto pristabdymu, kai įkeliami kiti gabalai (keistos m3u8 problemos), --intf dummy paleidžia vlc be sąsajos, tik ekrano, paleidžia vaizdo įrašą viso ekrano režimu (NĖRA!), o adresas yra srauto adresas. Kaip matote kode, mes pateikiame adresą iš sąrašo kanalo numerio, kuris vykdymo metu pateikiamas naudojant argv teiginį. Išsaugokite šį failą kaip tv_channels.py, pakeiskite grojaraščio vietą „python“faile, kad jis būtų nukreiptas į jūsų grojaraštį, ir galite paleisti kodą taip:

python tv_channels.py

3 veiksmas: pridėkite GPIO

Pridėti GPIO
Pridėti GPIO
Pridėti GPIO
Pridėti GPIO

Schemoje pavaizduoti du GPIO kaiščiai, naudojami mygtukams, ir kiekvienas turi ištraukimo rezistorių, kad GPIO kaištis būtų aukštai ištrauktas po mygtuko paspaudimo. Anksčiau apibrėžtą kodą galima patobulinti, kad operacija būtų šiek tiek sklandesnė, pridedant GPIO galimybes. Tai leidžia mums pakeisti kanalą mygtukais, o ne klaviatūra ir argv teiginiais, kaip ir realybės televizijai.

Pirmiausia reikia atkreipti dėmesį į tai, kad televizija yra klasė. Norėdami būti televizija, turime būti dabartiniame kanale, turėti galimų kanalų sąrašą ir turėti galimybę keisti kanalus. Šiame pavyzdyje vienintelis būdas pakeisti kanalus bus perkelti kanalų sąrašą aukštyn ir perkelti žemyn. Kai kanalas bus nuspręstas, turėsime paleisti VLC kanalą, kurį norime matyti.

#!/usr/bin/python3

nuo laiko importavimo miego importavimo papildomas procesas iš sys importavimo argv iš „gpiozero import“Mygtuko klasė Stotis: def _init _ (self): self.channel = 0 self.name = "self.address =" self.process = "class Television: def _init _ (aš, failo pavadinimas): self.current_channel = 0 self.channel_list = self.build_channel_list (failo pavadinimas) self.start_channel () def build_channel_list (self, filename): su open (failo pavadinimas, „r“) kaip m3u: i = 0 eilutei 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 if self.current_channel <0: self.current_channel = 0 self.start_channel () def start_channel (self): pabandykite: savarankiškas procesas. kill () išskyrus: pass print ('pradinis kanalas % 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 = Mygtukas (18) channel_DN = Mygtukas (23), kol tiesa: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

Ši kodo iteracija turi nemažai patobulinimų. dabar jis naudojo modulį, pavadintą „gpiozero“, kurio reikia aviečių pi, kad būtų galima lengvai pasiekti GPIO kaiščių funkcijas

sudo apt-get install python3-gpiozero

arba

sudo pip įdiegti gpiozero

Kaip matyti iš mano kodo, aš pasirinkau GPIO 18 ir GPIO 23 atitinkamai kanalui UP ir DOWN. „Gpiozero“bibliotekoje yra puiki klasė, skirta mygtukų funkcijoms, kai spaudžiamas, spaudžiamas, kai laikomas ir tt. Tai labai paprasta. Aš pasirinkau „When_pressed“, kuris reiškia atgalinio ryšio funkciją, kuri bus paleista aptikus šį signalą.

Paskutinis esminis pakeitimas yra parinkties „-q“įtraukimas į VLC papildomo proceso iškvietimą. Tai tiesiog paleidžia „vlc“be visos išvesties į terminalą, kad jame nebūtų netvarkos, kad galėtume matyti informacinius spausdintinius teiginius kode.

4 žingsnis: integruokite aparatūrą, kad atrodytumėte aštriai

Integruokite aparatūrą, kad atrodytumėte aštriai
Integruokite aparatūrą, kad atrodytumėte aštriai
Integruokite aparatūrą, kad atrodytumėte aštriai
Integruokite aparatūrą, kad atrodytumėte aštriai
Integruokite aparatūrą, kad atrodytumėte aštriai
Integruokite aparatūrą, kad atrodytumėte aštriai

Aš nesupratau, kaip noriu tai padaryti, ir tai bus unikalus sprendimas kiekvienam naudojamam televizoriaus modeliui. Turiu gerai apie tai pagalvoti ir apžiūrėti televizorių, kad surastų gerą energijos šaltinį pi, kai tik įkišiu kompiuterį į didžiulį akumuliatoriaus skyrių. Taip pat svarsčiau galimybę naudoti kanalo parinkimo laikrodžio mygtukus, nes jie jau gražiai išdėstyti televizoriuje, o laikrodis vis tiek neveikia. Kai rasiu gerą sprendimą, paskelbsiu daugiau, tačiau būtent čia mano projektas labai skirsis nuo visų kitų. Mėgaukitės tikra televizija panašia IPTV integracija!

5 žingsnis: „Pi Power“

Pi Power
Pi Power

Rastam televizoriaus modeliui reikia 12 V maitinimo šaltinio. Aš zondavau aplink plokštę, bet nemačiau jokių akivaizdžių 5 V galios reguliatorių, todėl akivaizdžiausia nuolatinio maitinimo šaltinio vieta yra plokštėje, kurioje yra 12 V statinės jungtis. Yra akivaizdi problema. mes nenorime kepti pi, todėl mums reikės galios reguliatoriaus. Aš pasirinkau MP2315 „Power-Down Power Converter“. Tai pigu ir paprasta naudoti. Lituosime 12 V nuolatinės srovės įvestį iš PCB cilindro jungties prie keitiklio IN+ ir GND kaiščių, o VO+ - prie Raspberry Pi 2 kaiščio, taip pat GND.

Prieš tai darydami, būtinai įjunkite keitiklį ir įsitikinkite, kad išvestyje išeina tinkama 5 V įtampa. Aš pasirinkau paprasčiausią variantą su laidine reguliuojama įtampa. Žoliapjovė sureguliuos įtampą, todėl žiūrėjau įtampos išėjimą multimetru, kai žoliapjovę sureguliavau atsuktuvu.

6 žingsnis: „Power“integravimas

„Power“integravimas
„Power“integravimas
„Power“integravimas
„Power“integravimas
„Power“integravimas
„Power“integravimas

Pasigrožėjus televizoriumi, buvo nuspręsta, kad geriausia elektros energijos tiekimo vieta yra iš statinės jungties ir televizoriaus įjungimo/išjungimo jungiklio negatyvo, o tai reiškia, kad mes galime įjungti ir išjungti srautus su televizoriumi, o ne nuolat maitindami pi, traukdami tiesiai iš statinės jungties.

Laidai buvo lituojami ir tiekiami išilgai PCB šono šalia dėklo, kol jie pasiekė įrenginio galą, kur jie buvo maitinami per skylę, esančią akumuliatoriaus skyriaus gale. Kai jie bus maitinami, galime paruošti kabelių galus ir prilituoti prie galios reguliatoriaus. Aš sureguliavau jį 5 V, kad galėčiau maitinti pi, ir prie jo prilituosiu antgalių kaiščius, kad nuo maitinimo reguliatoriaus tiesiai prie pi GPIO antraštės rinkinio galėtume paleisti moteriškus džemperius. Paprastai tai nerekomenduojama, nes pi paprastai gauna maitinimą per UBS, kuriame yra reguliatorius, skirtas 5 V kondensacijai, tačiau kadangi galia jau reguliuojama, tai turėtų būti gerai.

Dėl to garso linijose yra šiek tiek triukšmo, nes sistemoje yra įžeminimo kilpa. Išbandžiau daug galios ir žemės taškų, tikėdamasi lengvo atsakymo, bet neradau. Aš taip pat lituodavau „microUSB“kabelį prie perjungto režimo reguliatoriaus, norėdamas pamatyti, ar priverstinis maitinimas per pi vidinius reguliatorius išspręs problemą. Taip nebuvo. Sprendimas bus kai kuriuose garso įžeminimo transformatoriuose. Jie buvo užsakyti, o ne pastatyti, nes jie yra pigūs ir gražiai supakuoti. Juos galite pasiimti iš daugelio automobilių garso parduotuvių ar skyrių. Tai aš pasirinkau.

7 žingsnis: ilgalaikio mygtuko sprendimas

Ilgalaikio mygtuko sprendimas
Ilgalaikio mygtuko sprendimas
Ilgalaikio mygtuko sprendimas
Ilgalaikio mygtuko sprendimas

Be abejo, sagos neliks ant duonos lentos, todėl reikia turėti pastovesnį sprendimą. Aš pagriebiau seną protobondą ir sujungiau grandinę su kai kuriais antraštės kaiščiais, kad būtų lengviau pasiekti signalus. Čia visi skirsis nuomonėmis, kaip pritvirtinti ar pritvirtinti mygtukus. Aš renkuosi juos protoboarduoti ir tiesiog pritvirtinti prie važiuoklės taip, kad rankena, kuri perkeliama per ekraną, netrukdytų. Nesivaržykite papuošti dizainą pridėdami 3D spausdintą dėklą, kuris išlygina tvirtinimą, naudokite veržles ir varžtus, įmantrius klijus, integruokite originalius mygtukus. Kol tai veikia, nėra klaidingų atsakymų.

Jie bus pritvirtinti prie korpuso išorės, o „Raspberry Pi“bus įkištas į labai talpų baterijų skyrių, todėl reikės išgręžti nedidelę skylę, kad kabeliai galėtų išeiti iš akumuliatoriaus skyriaus.

8 žingsnis: galutinis tinkamumo patikrinimas

Galutinis tinkamumo patikrinimas
Galutinis tinkamumo patikrinimas

Visą įrangą reikia patikrinti paskutinį kartą, kad būtų galima tiksliai pamatyti, kur visos skylės turi būti padarytos važiuoklėje ir kokio dydžio skylės ir tt reikia padaryti. Be to, turėtų būti apsvarstyta, kur sudėti komponentus, kad būtų lengviau prijungti ir pasiekti. Trumpai tariant, įsitikinkite, kad viskas sutampa ten, kur manote, prieš nepataisomai sugadindami savo projektą ir turėdami atsikratyti.

9 veiksmas: galutinė integracija

Galutinė integracija
Galutinė integracija
Galutinė integracija
Galutinė integracija
Galutinė integracija
Galutinė integracija

Dabar visa techninė įranga yra ten, kur reikia, ir visa tai tinka taip pat, kaip ir klaida kilimėlyje. Supjaustykime dalykus! Akumuliatoriaus skyriuje nustatiau vietą, kurioje galėčiau išvesti AV kabelius, naudodami mažą įdubą plastike. Aš jį sumaliau suoliniu šlifuokliu. Tai padarė gana trumpą darbą. Aš panaudojau „dremel“, kad sumalčiau daugiau plastiko, kad jis būtų gana tinkamas kabeliams.

Paskutinis komponentas yra kanalo parinkiklis. Aš išgręžiau nedidelę skylę akumuliatoriaus skyriuje ir po vieną išvedžiau iš jo kabelius. Mygtukai buvo sujungti, o aš pritvirtinau protoboatą prie plastikinės važiuoklės su dviem pusėmis iš anksto priklijuoto velcro. Suprantu, kad buvo apie 1200 geresnių būdų tai padaryti, bet tai pavyko ir turėjau viską, ko man reikėjo.

10 veiksmas: mėgaukitės savo senovine IPTV

Mėgaukitės savo senovine IPTV
Mėgaukitės savo senovine IPTV
Mėgaukitės savo senovine IPTV
Mėgaukitės savo senovine IPTV
Mėgaukitės savo senovine IPTV
Mėgaukitės savo senovine IPTV

Tai apie tai apibendrina. Raskite laidas ir smagiai žiūrėkite. Tačiau nesėdėkite per arti. Jūs sugadinsite savo smegenis!

Yra daug galimybių tobulinti šį projektą, todėl imkitės bet kokios norimos krypties, bet buvo smagu taip toli. Kalbant apie mane, tai paleidžiu iš „cronjob“iš naujo paleisdamas, todėl „stdout“neužfiksuoja pranešimų iš „python“scenarijaus. Norėčiau tai ištaisyti, kad žinotų, kokiame kanale esu. Kitas geras papildymas yra belaidis klaviatūros raktas „Pi“. Tai leis jums pakeisti „Wi -Fi“tinklą, jei išeisite iš namų su televizoriumi. Nepriklausomai. tai buvo įdomus projektas ir nekantrauju pradėti kitą.

Rekomenduojamas: