Sisällysluettelo:

Retro Idiot Box: 10 vaihetta
Retro Idiot Box: 10 vaihetta

Video: Retro Idiot Box: 10 vaihetta

Video: Retro Idiot Box: 10 vaihetta
Video: ВСЕ СЕРИИ КРУТОГО СЕРИАЛА С БЕСПОЩАДНЫМ СЮЖЕТОМ! Петля Нестерова / THE LOOP + ENGLISH SUBTITLES 2024, Marraskuu
Anonim
Retro idioottilaatikko
Retro idioottilaatikko

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

Hanki hyvä IPTV -luettelo
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

Lisää GPIO
Lisää GPIO
Lisää GPIO
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ä

Integroi laitteisto näyttääksesi terävältä
Integroi laitteisto näyttääksesi terävältä
Integroi laitteisto näyttääksesi terävältä
Integroi laitteisto näyttääksesi terävältä
Integroi laitteisto näyttääksesi terävältä
Integroi laitteisto näyttääksesi 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

Pi Power
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

Powerin integrointi
Powerin integrointi
Powerin integrointi
Powerin integrointi
Powerin integrointi
Powerin 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

Pitkäaikainen painikeratkaisu
Pitkäaikainen painikeratkaisu
Pitkäaikainen painikeratkaisu
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

Lopullinen sopivuustarkistus
Lopullinen sopivuustarkistus

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

Lopullinen integrointi
Lopullinen integrointi
Lopullinen integrointi
Lopullinen integrointi
Lopullinen integrointi
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ä

Nauti vintage -IPTV: stä
Nauti vintage -IPTV: stä
Nauti Vintage IPTV: stä
Nauti Vintage IPTV: stä
Nauti Vintage IPTV: stä
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: