Obsah:

Box Retro Idiot: 10 krokov
Box Retro Idiot: 10 krokov
Anonim
Retro Idiot box
Retro Idiot box

Našiel som starú prenosnú televíziu Magnavox z roku 1984, ako sedí na poličke v mojom miestnom obchode so šetrnosťou. Pomyslel som si: „Ó NEAT!“Po ďalšej kontrole som si na ňom všimol cenovku 15 dolárov, a tak som sa rozhodol vziať si ho domov a urobiť z neho niečo šteklivé. Pamätám si, ako som ako dieťa sledoval reprízy všetkých veľkých klasík v nádhernej čiernobielej verzii a chcel som z toho urobiť opäť realitu.

Problém je v tom, že už neexistujú žiadne analógové stanice, a to je úplne nemožné vykonať akékoľvek dekódovanie ATSC alebo akékoľvek digitálne dekódovanie. Všimol som si prítomnosti AV pripojenia na boku a okolo bolo niekoľko malinových pi, a tak som sa rozhodol vydať sa na dobrodružstvo, aby som zistil, ako na to môžem streamovať kanály. Tiež chcem, aby to vyzeralo ostro. Nebudem to prevádzkovať na 9 D-článkových batériách, takže môžem rpi skryť v priehradke na batérie s radom ďalších dobrôt.

Krok 1: Získajte dobrý zoznam IPTV

Získajte dobrý zoznam IPTV
Získajte dobrý zoznam IPTV

Denný zoznam IPTV ponúka fantastický výber bezplatných staníc iptv organizovaných podľa krajín. Vyberte požadovanú krajinu a stiahnite si súbor m3u.

Pre softvér, ktorý je v tomto, je m3u požadovaný formát. Viac informácií o špecifikách formátu si môžete prečítať tu.

Krok 2: Predbežný experiment s kódom

Python kód, ktorý budeme písať, analyzuje súbor m3u do zoznamu staníc.

#!/usr/bin/python3

import podprocesu zo sys import trieda argv Stanica: def _init _ (self): self.channel = 0 self.name = '' self.address = '' channel_list = s otvoreným ('./ us-m3uplaylist-2020-08- 17-1.m3u ',' r ') ako m3u: i = 0 pre riadok v m3u: if line.startswith ('#EXTINF '): this = Station () this.name = line.split (', ') [1] riadok = nasledujúci (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])]. address])

Poďme to rozobrať.

#!/usr/bin/python3

Toto hovorí bash, že na interpretáciu tohto súboru použijeme python3.

import podprocesu zo sys import argv

Na spustenie našej inštancie vlc budeme potrebovať modul podprocesu a na výber kanála, do ktorého spustíme vlc, budeme potrebovať argv.

stanica stanice: def _init _ (self): self.channel = 0 self.name = '' self.address = ''

Toto definuje triedu s názvom Stanica. Každý kanál bude mať číslo kanála, názov kanála prevzatý zo súboru m3u a adresu, odkiaľ kanál streamuje.

channel_list =

Toto je zoznam, ktorý uloží všetky kanály analyzované zo súboru m3u.

s otvoreným ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') ako m3u: i = 0 pre riadok v m3u: ak line.startswith ('#EXTINF'): toto = stanica () this.name = line.split (',') [1] line = next (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1

Táto slučka otvorí zoznam skladieb m3u a prehltne údaje. riadky súboru m3u, ktoré nás zaujímajú, začínajú znakom #EXTINF, čo znamená nový záznam do súboru zoznamu skladieb. Ďalšou hodnotou záujmu je meno, ktoré je na rovnakom riadku ako #EXTINF, ale medzi nimi je čiarka. Nasledujúci riadok tohto konkrétneho m3u je adresa streamu. Na výpočet, ktorý kanál je ktorý, sa používa iterátor „i“. Táto slučka opakuje celý súbor m3u a napĺňa zoznam kanálov stanicami.

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

knižnica podprocesov umožňuje pythonu volať procesy (programy) a vracia PID (Process ID). Vďaka tomu je python schopný „správne“spravovať spúšťanie a zatváranie programov bez zaplnenia súboru histórie alebo umožňuje spúšťať ľubovoľnejší kód s generickými „systémovými“hovormi. Každý prvok poľa použitý ako argument pre Popen je zadaný v príkazovom riadku.

vlc --loop --intf dummy -úplné adresy obrazoviek

Vyššie uvedený príkaz je požadovaný na spustenie, pričom možnosť --loop opravuje niektoré problémy s pozastavením prúdu pri súčasnom načítaní ďalších kúskov (podivné problémy s m3u8), --intf dummy spustí vlc bez rozhrania, iba obrazovku, --fullscreen spustí video v režime celej obrazovky (ŽIADNY spôsob!) a adresa je adresa streamu. Ako vidíte v kóde, poskytujeme adresu z čísla kanála zoznamu, ktoré je za behu poskytnuté prostredníctvom príkazu argv. Uložte tento súbor ako tv_channels.py, zmeňte umiestnenie zoznamu skladieb v súbore python tak, aby smerovalo na váš zoznam skladieb, a kód môžete spustiť nasledovne:

python tv_channels.py

Krok 3: Pridajte GPIO

Pridajte GPIO
Pridajte GPIO
Pridajte GPIO
Pridajte GPIO

Schéma ukazuje dva GPIO piny používané pre tlačidlá a každý z nich má výsuvný odpor, ktorý udržuje kolík GPIO vytiahnutý vysoko po stlačení tlačidla. Predtým definovaný kód je možné upresniť, aby bola operácia trochu plynulejšia pridaním funkcií GPIO. To nám umožňuje zmeniť kanál pomocou tlačidiel, nie pomocou klávesnice a príkazov argv, rovnako ako v prípade televízora Realsies.

Prvá vec, ktorú treba poznamenať, je, že televíziu mám definovanú ako triedu. Na to, aby sme mohli byť televíziou, musíme byť na aktuálnom kanáli, mať zoznam možných kanálov a mať možnosť kanály meniť. V tomto prípade bude jedinou metódou zmeny kanálov presunutie zoznamu kanálov nahor a nadol. Akonáhle je o kanáli rozhodnuté, budeme musieť spustiť VLC na kanáli, ktorý chceme vidieť.

#!/usr/bin/python3

z času import spánkový import podproces zo sys import argv z gpiozero import trieda tlačidiel Stanica: def _init _ (self): self.channel = 0 self.name = '' self.address = '' self.process = '' trieda Televízia: def _init _ (self, filename): self.current_channel = 0 self.channel_list = self.build_channel_list (názov súboru) self.start_channel () def build_channel_list (self, filename): with open (filename, 'r') as m3u: i = 0 pre riadok v 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): try: self.process. kill () okrem: prejsť tlačou ('štartovací kanál % 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 = Button (18) channel_DN = Button (23) while True: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

Táto iterácia kódu má niekoľko vylepšení. teraz používa modul s názvom gpiozero, ktorý vyžaduje malinový pi na ľahký prístup k funkčnosti pinov GPIO

sudo apt-get install python3-gpiozero

alebo

sudo pip install gpiozero

Ako je vidieť v mojom kóde, pre kanál UP som vybral GPIO 18 a GPIO 23 pre kanál DOWN. Knižnica gpiozero má peknú triedu funkcií tlačidiel pre when_pressed, is_pressed, when_held atď. Vďaka tomu je to celkom jednoduché. Vybral som príkaz when_pressed, ktorý odkazuje na funkciu spätného volania, ktorá sa má spustiť, keď je zistený tento signál.

Poslednou zásadnou zmenou je zahrnutie voľby '-q' do volania podprocesu VLC. Jednoducho sa spustí vlc bez všetkého výstupu na terminál, aby nebol rušený, aby sme v kóde mohli vidieť informačné tlačové príkazy.

Krok 4: Integrujte hardvér, aby vyzeral ostro

Integrujte hardvér, aby vyzeral ostro
Integrujte hardvér, aby vyzeral ostro
Integrujte hardvér, aby vyzeral ostro
Integrujte hardvér, aby vyzeral ostro
Integrujte hardvér, aby vyzeral ostro
Integrujte hardvér, aby vyzeral ostro

Neprišiel som na to, ako to chcem dosiahnuť, a bude to jedinečné riešenie pre každý používaný model televízora. Musím si to poriadne premyslieť a sondovať okolo televízie, aby som našiel dobrý zdroj energie pre pí, akonáhle vtesnám počítač do veľkého priestoru pre batériu. Tiež som zvážil použitie tlačidiel hodín na výber kanálov, pretože sú už krásne umiestnené v televízii a hodiny aj tak nefungujú. Keď nájdem dobré riešenie, zverejním viac, ale práve tu sa môj projekt bude výrazne líšiť od všetkých ostatných. Užite si integráciu IPTV ako zo skutočnej televízie!

Krok 5: Napájanie Pi

Pi Power
Pi Power

Pre model televízora, ktorý som našiel, vyžaduje napájanie 12 V. Sondoval som okolo dosky, ale nevidel som žiadne zjavné regulátory napájania pre 5V, takže najzrejmejšie miesto na získanie stabilného napájania je na doske s plošnými spojmi, kde vstupuje valcový konektor pre napätie 12V. S tým je zjavný problém. nechceme vyprážať pi, takže budeme potrebovať regulátor výkonu. Vybral som si menič výkonu MP2315 s zostupom. Je to veľmi lacné a používanie je veľmi jednoduché. Vstup 12 VDC z valcového konektora na doske plošných spojov spájkujeme na piny IN+ a GND prevodníka a VO+ na pin 2 na Raspberry Pi, ako aj na GND.

Predtým, ako to urobíte, zapnite menič a uistite sa, že z výstupu vychádza správnych 5V. Vybral som si najjednoduchšiu možnosť s pevne nastaviteľným napätím. Zastrihávač upraví napätie, takže som pomocou multimetra sledoval výstup napätia, ako som trimrom nastavoval skrutkovač.

Krok 6: Integrácia napájania

Integrujúca sila
Integrujúca sila
Integrujúca sila
Integrujúca sila
Integrujúca sila
Integrujúca sila

Po prekopaní televízie sa rozhodlo, že najlepšie miesto na získanie energie je zo záporného pólu konektora valca a prepínača zapnutia/vypnutia televízora, čo znamená, že pomocou televízora môžeme zapínať a vypínať prúdy. neustále napájanie pi ťahom priamo z valcového konektora.

Vodiče boli spájkované a vedené po boku DPS vedľa puzdra, kým sa nedostali k zadnej časti jednotky, kde boli privádzané otvorom, ktorý bol v zadnej časti priestoru pre batériu. Akonáhle sú prevlečené, môžeme pripraviť konce kabeláže a spájkovať ich do regulátora výkonu. Vyladil som to na 5V na napájanie pí a spájkoval som k nemu kolíky, aby sme mohli spustiť prepojky medzi ženami a ženami z regulátora výkonu priamo do sady záhlaví pí GPI. To sa bežne neodporúča, pretože pi vo všeobecnosti získava energiu prostredníctvom UBS, ktorý má vložený regulátor na stabilizáciu 5 V, ale keďže výkon sa už reguluje, malo by to byť v poriadku.

Z tohto zvukového vedenia je určitý šum, pretože v systéme je uzemňovacia slučka. Skúšal som veľa silových a pozemných bodov po celej doske dúfajúc v jednoduchú odpoveď, ale nič som nenašiel. Tiež som spájkoval kábel microUSB k regulátoru spínaného režimu, aby som zistil, či by nútenie napájania vnútornými regulátormi pí problém vyriešilo. To nie. Riešenie bude v niektorých transformátoroch izolácie audio uzemnenia. Tieto boli skôr objednané ako postavené, pretože sú lacné a pekne zabalené. Môžete si ich vyzdvihnúť vo väčšine predajní alebo oddelení automobilového audia. Toto som si vybral.

Krok 7: Dlhodobé riešenie tlačidiel

Dlhodobé riešenie tlačidiel
Dlhodobé riešenie tlačidiel
Dlhodobé riešenie tlačidiel
Dlhodobé riešenie tlačidiel

Tlačidlá nepochybne nezostanú na doske, takže musí existovať trvalejšie riešenie. Chytil som nejaký starý protoboard a hodil som obvod spolu s niekoľkými kolíkovými konektormi, aby bol ľahký prístup k signálom. Tu bude mať každý rozdielny názor na to, ako tlačidlá pripevniť alebo namontovať. Rozhodol som sa ich protoboardovať a pripevniť ich k podvozku tak, aby rukoväť, ktorá sa otáča cez obrazovku, neprekážala. Nebojte sa vylepšiť dizajn pridaním 3D tlačeného puzdra, ktoré uľahčuje montáž, používajte matice a skrutky, ozdobné lepidlá, integrujte originálne tlačidlá a čokoľvek. Pokiaľ to funguje, neexistujú žiadne nesprávne odpovede.

Tieto budú namontované na vonkajšej strane puzdra a Raspberry Pi bude zasunuté do veľmi priestranného priestoru pre batériu, takže bude potrebné vyvŕtať malý otvor, aby káble mohli prechádzať do priestoru pre batérie.

Krok 8: Konečná kontrola vhodnosti

Konečná kontrola vhodnosti
Konečná kontrola vhodnosti

Naposledy je potrebné skontrolovať všetko vybavenie, aby ste zistili, kde presne je potrebné urobiť všetky otvory na podvozku a aké veľké otvory atď. Okrem toho by sa malo zvážiť, kam umiestniť komponenty, aby sa zaistila optimálna jednoduchosť pripojenia a prístupu. Stručne povedané, uistite sa, že všetko sedí tam, kde si myslíte, že áno, skôr ako nenapraviteľne poškodíte svoj projekt a budete musieť dostať preč.

Krok 9: Konečná integrácia

Konečná integrácia
Konečná integrácia
Konečná integrácia
Konečná integrácia
Konečná integrácia
Konečná integrácia

Teraz je všetok hardvér tam, kde má byť, a všetko sedí rovnako pohodlne ako chyba v koberci. Poďme rezať veci! V priehradke na batériu som identifikoval miesto, kde by som mohol AV káble vyvediť von pomocou malého priehlbiny v plaste. Brúsil som to na lavičke. Dalo to dosť krátku prácu. Na drvenie som použil viac plastov, aby to bolo celkom vhodné pre káble.

Poslednou súčasťou je volič kanálov. Do priestoru pre batériu som vyvŕtal malý otvor a postupne som z neho vyťahoval zberné káble. Gombíky boli spojené hore a protoboard som pripevnil k plastovému šasi dvoma polovicami vopred nalepeného suchého zipsu. Chápem, že existovalo asi 1200 lepších spôsobov, ako to urobiť, ale fungovalo to a mal som po ruke všetko, čo som potreboval.

Krok 10: Užite si svoju Vintage IPTV

Užite si svoju Vintage IPTV
Užite si svoju Vintage IPTV
Užite si svoju Vintage IPTV
Užite si svoju Vintage IPTV
Užite si svoju Vintage IPTV
Užite si svoju Vintage IPTV

To je asi všetko zhrnuté. Hľadajte relácie a bavte sa pozeraním. Neseďte však príliš blízko. Zhniješ mozog!

Je tu veľa priestoru na vylepšenie tohto projektu, takže ho vezmite akýmkoľvek smerom, akým chcete, ale dostať sa tak ďaleko bolo zábavné. Pokiaľ ide o mňa, spúšťam to z cronjob pri reštarte, takže stdout nezachytáva správy zo skriptu python. Chcel by som to napraviť, aby som vedel, na ktorom kanáli som. Ďalším dobrým doplnkom je bezdrôtový klávesový kľúč na zariadení Pi. To vám umožní zmeniť sieť Wi -Fi, ak odchádzate z domu s televízorom. Bez ohľadu na to. bol to zábavný projekt a nemôžem sa dočkať, kým sa pustím do ďalšieho.

Odporúča: