Sisällysluettelo:
- Vaihe 1: Hanki hyvä IPTV -luettelo
- Vaihe 2: Alustava koodikokeilu
- Vaihe 3: Lisää GPIO
- Vaihe 4: Integroi laitteisto näyttämään terävältä
- Vaihe 5: Pi Power
- Vaihe 6: Virran integrointi
- Vaihe 7: Pitkäaikainen painikeratkaisu
- Vaihe 8: Lopullinen sovitustarkistus
- Vaihe 9: Lopullinen integrointi
- Vaihe 10: Nauti vintage -IPTV: stä
Video: Retro Idiot Box: 10 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 08:59
Löysin vanhan Magnavox -kannettavan television vuodelta 1984 istuen hyllyllä paikallisesta säästökaupastani. Mietin itsekseni: "Voi NEAT!" Tarkasteltaessa huomasin siinä 15 dollarin hintalappua, joten päätin viedä sen kotiin ja tehdä siitä jotain pirteää. Muistan, kun katselin lapsena kaikkien suurten klassikoiden upeita mustavalkoisia kappaleita, ja halusin tehdä tästä totta.
Ongelmana on, että siellä ei ole enää analogisia asemia, ja tämä on täysin kykenemätön tekemään mitään ATSC -dekoodausta tai digitaalista dekoodausta. Huomasin AV -yhteyden läsnäolon sivussa ja minulla oli muutama vadelmapi, joten päätin lähteä seikkailuun selvittääkseni, kuinka voisin suoratoistaa kanavia tähän. Haluan myös näyttää terävältä. En käytä sitä yhdeksän D-kennon paristoilla, joten voin piilottaa paristolokeron rpi monien muiden herkkujen kanssa.
Vaihe 1: Hanki hyvä IPTV -luettelo
Päivittäisessä IPTV -luettelossa on upea valikoima ilmaisia iptv -asemia maittain. Valitse haluamasi maa ja lataa m3u -tiedosto.
Tässä ohjelmistossa m3u on pakollinen muoto. Voit lukea lisää muodon erityispiirteistä täältä.
Vaihe 2: Alustava koodikokeilu
Python -koodi, jonka aiomme kirjoittaa, jäsentää m3u -tiedoston asemaluetteloon.
#!/usr/bin/python3
tuoda aliprosessi sys tuoda argv luokka Station: def _init _ (self): self.channel = 0 self.name = '' self.address = '' channel_list = ja open ('./ us-m3uplaylist-2020-08- 17-1.m3u ',' r ') kuten m3u: i = 0 riville m3u: if line.startswith ('#EXTINF '): this = Station () this.name = line.split (', ') [1] rivi = seuraava (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1 process = subprocess. Popen (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. osoite])
Hajotetaan tämä.
#!/usr/bin/python3
Tämä kertoo bashille, että käytämme python3: ta tämän tiedoston tulkitsemiseen.
tuoda aliprosessi sys tuoda argv
Tarvitsemme aliprosessimoduulin vlc -instanssimme käynnistämiseksi, ja argv: n on valittava, millä kanavalla vlc käynnistetään.
luokan asema: def _init _ (self): self.channel = 0 self.name = '' self.address = ''
Tämä määrittelee luokan nimeltä Station. Jokaisella kanavalla on kanavan numero, sen nimi, joka on otettu m3u -tiedostosta, ja osoite, josta kanava suoratoistaa.
channel_list =
Tämä on luettelo, joka tallentaa kaikki m3u -tiedostosta jäsennetyt kanavat.
avoimella ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') muodossa m3u: i = 0 riville 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
Tämä silmukka avaa m3u -soittolistan ja syötä tiedot. meitä kiinnostavat m3u -tiedostorivit alkavat #EXTINF, Tämä osoittaa uuden merkinnän soittolistatiedostoon. Seuraava kiinnostava arvo on nimi, joka on samalla rivillä kuin #EXTINF, mutta niiden välissä on pilkku. Tämän nimenomaisen m3u: n seuraava rivi on virran osoite. Käytössä on iteraattori "i", joka laskee, mikä kanava on mikä. Tämä silmukka iteroi koko m3u -tiedoston ja täyttää kanavaluettelon asemilla.
prosessi = aliprosessi. avattu (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. osoite])
aliprosessikirjaston avulla python voi kutsua prosesseja (ohjelmia) ja palauttaa PID -tunnuksen (Process ID). Tämä mahdollistaa sen, että python pystyy hallitsemaan ohjelmien käynnistämistä ja sulkemista "oikein" täyttämättä historiatiedostoa tai sallimatta mielivaltaisemman koodin suorittamisen yleisten "järjestelmä" -kutsujen kanssa. Jokainen Popenille argumenttina käytetty taulukon elementti on kirjoitettu komentoriville.
vlc --loop --intf dummy -koko näytön osoitteet
Yllä oleva komento on suoritettava, ja --loop -vaihtoehto korjaa joitain ongelmia, jotka liittyvät virran keskeyttämiseen seuraavien palojen lataamisen aikana (outoja m3u8 -ongelmia), --intf dummy käynnistää vlc: n ilman käyttöliittymää, vain näytön, -koko näytön käynnistää videon koko näytön tilassa (NO WAY!), ja osoite on streamin osoite. Kuten koodista näet, tarjoamme osoitteen luettelon kanavanumerosta, joka annetaan ajon aikana argv -lausekkeen kautta. Tallenna tämä tiedosto nimellä tv_channels.py, muuta soittolistan sijainti python -tiedostossa osoittamaan soittolistaa ja voit suorittaa koodin seuraavasti:
python tv_channels.py
Vaihe 3: Lisää GPIO
Kaaviossa esitetään kaksi GPIO -nastaa, joita käytetään painikkeille, ja jokaisessa on vetovastus, joka pitää GPIO -nastan korkealla painikkeen painamisen jälkeen. Aiemmin määritettyä koodia voidaan tarkentaa, jotta operaatiosta tulee hieman saumattomampi lisäämällä GPIO -ominaisuus. Tämän avulla voimme vaihtaa kanavaa painikkeilla näppäimistön ja argv -lausuntojen sijasta, aivan kuten tositelevisiossa.
Ensimmäinen huomionarvoinen asia on, että minulla on televisio määritelty luokana. Jotta voimme olla televisio, meidän on oltava nykyisellä kanavalla, meillä on oltava luettelo mahdollisista kanavista ja mahdollisuus vaihtaa kanavia. Tässä esimerkissä ainoa tapa vaihtaa kanavia on siirtyä kanavaluetteloa ylöspäin ja kanavaluetteloa alaspäin. Kun kanava on päätetty, meidän on käynnistettävä VLC kanavalla, jonka haluamme nähdä.
#!/usr/bin/python3
ajasta tuonti lepotila tuonti aliprosessi sys tuonti argv gpiozero tuonnista Button luokka Station: def _init _ (self): self.channel = 0 self.name = '' self.address = '' self.process = '' class Television: def _init _ (itse, tiedostonimi): self.current_channel = 0 self.channel_list = self.build_channel_list (tiedostonimi) self.start_channel () def build_channel_list (self, filename): with open (filename, 'r') as m3u: i = 0 riville m3u: jos 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): try: self.process. kill () paitsi: pass print ('aloituskanava % d' % self.current_channel) self.process = aliprosessi. Popen (['vlc', '-q', '--loop', '--intf', ' dummy ',' --fullscreen ', self.channel_list [self.current_channel].osoite]) this = Television ('./ us-m3uplaylist-2020-08-17-1.m3u ') channel_UP = Button (18) channel_DN = Painike (23) kun tosi: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down
Tällä koodin iteroinnilla on melko vähän parannuksia. se käytti nyt gpiozero -nimistä moduulia, jota vadelma pi tarvitsee päästäkseen helposti GPIO -nastojen toimintoihin
sudo apt-get install python3-gpiozero
tai
sudo pip asenna gpiozero
Kuten koodistani käy ilmi, olen valinnut GPIO 18 ja GPIO 23 kanavalle UP ja DOWN. Gpiozero -kirjastossa on mukava luokka painiketoiminnoille painettaessa painettuna, is_pressed, when_held jne. Tämä tekee siitä melko helppoa. Valitsin When_pressed, joka viittaa soittotoimintoon, joka suoritetaan, kun tämä signaali havaitaan.
Viimeinen suuri muutos on -q -vaihtoehdon sisällyttäminen VLC -aliprosessikutsuun. Tämä yksinkertaisesti suorittaa vlc: n ilman kaikkia päätelaitteen ulostuloja, jotta se ei ole sotkuinen, jotta voimme nähdä koodin informaatiotulostuslausunnot.
Vaihe 4: Integroi laitteisto näyttämään terävältä
En ole keksinyt, miten haluan saavuttaa tämän, ja se on ainutlaatuinen ratkaisu kullekin käytössä olevalle televisiomallille. Minun täytyy miettiä tätä tarkkaan ja tutkia television ympärillä löytääkseni hyvän virtalähteen pi: lle, kun pakkaan tietokoneen massiivisen paristolokeron sisälle. Olen myös harkinnut kellopainikkeiden käyttämistä kanavien valinnassa, koska ne on jo sijoitettu kauniisti televisioon, eikä kello toimi joka tapauksessa. Julkaisen lisää, kun löydän hyvän ratkaisun, mutta tässä projektini poikkeaa suuresti kaikkien muiden hankkeesta. Nauti todellisen TV: n kaltaisesta IPTV-integraatiosta!
Vaihe 5: Pi Power
Löytyneelle TV -mallille se vaatii 12 V: n virtalähteen. Kokeilin piirilevyä, mutta en nähnyt selviä tehon säätimiä 5 V: lle, joten ilmeisin paikka saada tasainen virtalähde on piirilevyllä, jossa 12 V: n tynnyriliitin tulee sisään. Tässä on ilmeinen ongelma. emme halua paistaa pi, joten tarvitsemme tehonsäätimen. Olen valinnut MP2315 Step-Down Power Converter. Se on likainen halpa ja helppokäyttöinen. Juotamme 12 VDC: n tulon piirilevyn tynnyriliittimestä muuntimen IN+ - ja GND -nastoihin ja VO+: n Raspberry Pi: n nastaan 2 sekä GND: n.
ENNEN tätä, muista kytkeä muuntaja päälle ja varmistaa, että lähtöstä tulee oikea 5 V. Valitsin yksinkertaisimman vaihtoehdon langallisella säädettävällä jännitteellä. Trimmeri säätää jännitettä, joten katselin jännitteen ulostuloa yleismittarilla, kun säädin trimmeriä ruuvimeisselillä.
Vaihe 6: Virran integrointi
Television ympärillä kaivamisen jälkeen päätettiin, että paras paikka virran ottamiseen on piippuliittimen ja television ON/OFF -kytkimen negatiivi, mikä tarkoittaa, että voimme kytkeä virrat päälle ja pois television kanssa, pikemminkin virtaa pi jatkuvasti vetämällä suoraan piipun liittimestä.
Johdot juotettiin sisään ja syötettiin piirilevyn kyljessä kotelon vieressä, kunnes ne saavuttivat yksikön takaosan, jossa ne syötettiin paristokotelon takana olevan reiän läpi. Kun ne on syötetty läpi, voimme valmistella kaapeloinnin päät ja juottaa ne alas tehonsäätimelle. Viritin sen 5 V: ksi pi: n virittämiseksi ja juotetut otsikkotapit siihen, jotta voimme ajaa naaraspuolisia hyppääjiä tehonsäätimestä suoraan pi: n GPIO -otsikkosarjaan. Tätä ei yleensä suositella, koska pi saa yleensä virran UBS: n kautta, jossa on säädin 5V: n ehdoksi, mutta koska tehoa jo säädetään, sen pitäisi olla kunnossa.
Äänilinjoista kuuluu jonkin verran kohinaa tästä, koska järjestelmässä on maasilmukka. Yritin monia voima- ja maapisteitä kaikkialla, toivoen helppoa vastausta, mutta en löytänyt mitään. Juotin myös microUSB -kaapelin kytkentätilan säätimeen nähdäkseni, ratkaisisiko virran pakottaminen pi: n sisäisten säätimien läpi. Se ei. Ratkaisu on joissakin äänimaadoitusmuuntajissa. Nämä tilattiin pikemminkin kuin rakennettiin, koska ne ovat halpoja ja kauniisti pakattuja. Voit noutaa ne useimmista autoäänikaupoista tai osastoilta. Tämän valitsin.
Vaihe 7: Pitkäaikainen painikeratkaisu
Epäilemättä painikkeet eivät jää leipäpöydälle, joten tarvitaan pysyvämpi ratkaisu. Tartuin vanhaan protoboardiin ja heitin piirin yhteen joidenkin otsikkotappien kanssa, jotta signaaleihin olisi helppo päästä käsiksi. Täällä kaikilla on erilaisia mielipiteitä painikkeiden kiinnittämisestä tai kiinnittämisestä. Päätän laittaa ne protoboardiin ja kiinnittää ne vain runkoon siten, että kantokahva, joka heilahtaa näytön yli, ei häiritse. Voit vapaasti korostaa muotoilua lisäämällä 3D -painetun kotelon, joka tasoittaa asennuksen, käytä muttereita ja pultteja, hienoja liimoja, integroi alkuperäiset napit. Niin kauan kuin se toimii, ei ole vääriä vastauksia.
Nämä asennetaan kotelon ulkopuolelle, ja Raspberry Pi työnnetään erittäin tilavan paristolokeron sisään, joten siihen on porattava pieni reikä, jotta kaapelit pääsevät ulos paristolokerosta.
Vaihe 8: Lopullinen sovitustarkistus
Kaikki laitteet on tarkistettava viimeisen kerran, jotta näet tarkalleen, mihin kaikki reiät on tehtävä runkoon ja minkä kokoiset reiät jne. On tehtävä. Lisäksi on harkittava, minne komponentit sijoitetaan, jotta liitettävyys ja pääsy olisi mahdollisimman helppoa. Lyhyesti sanottuna, varmista, että kaikki sopii sinne, missä luulet, ennen kuin vahingoitat projektiasi korjaamattomasti ja sinun on poistettava spackle.
Vaihe 9: Lopullinen integrointi
Nyt kaikki laitteistot ovat siellä, missä niiden on oltava, ja kaikki sopii yhtä tiukasti kuin vika matossa. Leikataan asioita! Tunnistin paristolokerosta paikan, jossa voisin reitittää AV -kaapelit pois käyttämällä pientä muovia. Maadoitin sen penkkihiomakoneella. Se teki siitä melko lyhyen työn. Jauhain dremelillä lisää muovia, jotta se sopisi hyvin kaapeleihin.
Viimeinen komponentti on kanavan valitsin. Porasin paristokoteloon pienen reiän ja vedin johdinkaapelit siitä ulos yksi kerrallaan. Painikkeet yhdistettiin, ja kiinnitin protoboardin muovirunkoon kahdella puolikolla esiliimautuvaa tarranauhaa. Ymmärrän, että tähän oli noin 1200 parempaa tapaa, mutta tämä toimi, ja minulla oli kaikki tarvitsemani käsillä.
Vaihe 10: Nauti vintage -IPTV: stä
Se kiteyttää asian. Etsi esityksiä ja pidä hauskaa katsomista. Älä kuitenkaan istu liian lähellä. Räjäytät aivosi!
Tässä projektissa on paljon parantamisen varaa, joten vie se mihin tahansa suuntaan, mutta hauska oli päästä niin pitkälle. Mitä tulee minuun, suoritan tämän cronjobista uudelleenkäynnistyksen yhteydessä, joten stdout ei kaappaa viestejä python -komentosarjasta. Haluaisin korjata tämän, jotta tiedän, millä kanavalla olen. Toinen hyvä lisäys on langaton näppäimistöavain Pi: ssä. Näin voit vaihtaa wifi -verkkoa, jos lähdet kotoa television kanssa. Riippumatta. se oli hauska projekti, en malta odottaa, että pääsen aloittamaan seuraavan.
Suositeltava:
Retro Arcade - (täysikokoinen Powered by Raspberry Pi): 8 vaihetta
Retro Arcade - (täysikokoinen Powered by Raspberry Pi): Halusin ensin kiittää sinua tämän Retro Arcade -järjestelmän rakennusoppaan katsomisesta. Otan vanhemman arcade-laatikon ja asetan sen erilliseen kaappiin, jossa on 24 tuuman laajakuvanäyttö. Tämän oppaan mittaukset ovat karkeita antaakseen sinulle
Retro "Rayotron" -yövalo (osa 1): 16 vaihetta
Retro "Rayotron" -yövalo (osa 1): Johdanto Joulukuussa 1956 Atomic Laboratories mainosti Rayotronin "ensimmäisenä edullisena sähköstaattisena generaattorina ja hiukkaskiihdyttimenä" luonnontieteiden opettajille ja harrastajille [1]. Rayotron oli ylimitoitettu, kumivyöllä ladattu
Retro CP/M Stand Alone -emulaattori: 8 vaihetta
Retro CP/M Stand Alone -emulaattori: Tämä projekti käyttää VGA32 ESP v1.4 -moduulia yhdistelmän suorittamiseen tai RunCPM ja FabGL tarjoavat erillisen tietokoneen, joka käyttää CP/M 2.2 -järjestelmää vastaavaa järjestelmää. Suosittu 1980 -luvulla pientietokoneiden käyttöjärjestelmänä. Voit palata sisään
Micro Centerin 2 pelaajan Stand-Up Retro Arcade: 20 vaihetta
Micro Centerin 2 pelaajan Stand-Up Retro Arcade: Paikallisessa Micro Centerissä on nyt kaikki mitä tarvitset oman Raspberry Pi -pohjaisen Retro Arcade -kaapin tekemiseen. Sarjat ovat täysin muokattavissa, ja niihin kuuluvat kaappi, Raspberry Pi, painikkeet, ohjaussauvat, ääni- ja videotarvikkeet ja paljon muuta. Se
Raspberry Pi Retro -pelikoneen asennus: 5 vaihetta
Raspberry Pi Retro Gaming Machine -asetus: Retro-arcade-pelien kopioimiseksi tietokoneen alkuvaiheista Rasberry Pi ja Retropie-järjestelmä ovat erinomaisia kotiasetusten tekemiseen vanhoille peleille, joita haluat ehkä pelata tai harrastuksena oppii Pi. Tämä järjestelmä on ollut l