Obsah:

Retro Idiot Box: 10 kroků
Retro Idiot Box: 10 kroků

Video: Retro Idiot Box: 10 kroků

Video: Retro Idiot Box: 10 kroků
Video: Mým úkolem je pozorovat les a tady se děje něco zvláštního. 2024, Červenec
Anonim
Retro Idiot Box
Retro Idiot Box

Našel jsem starou přenosnou televizi Magnavox z roku 1984, jak sedí na poličce v mém místním obchodě se šetrností. Říkal jsem si: „Ó NE!“Po další prohlídce jsem si na ní všiml cenovky 15 dolarů, a tak jsem se rozhodl ji vzít domů a udělat z ní něco spiffy. Pamatuji si, že jsem jako dítě sledoval reprízy všech velkých klasiků v nádherné černé a bílé a chtěl jsem to znovu proměnit ve skutečnost.

Problém je v tom, že už neexistují žádné analogové stanice, a to je zcela neschopné provádět jakékoli dekódování ATSC nebo jakékoli digitální dekódování. Všiml jsem si přítomnosti AV připojení na boku a kolem mě leželo několik malinových pí, a tak jsem se rozhodl vydat se na dobrodružství, abych zjistil, jak k tomu mohu streamovat kanály. Také chci, aby to vypadalo ostře. Nebudu to provozovat na 9 D-článkových bateriích, takže mohu schovat rpi v prostoru pro baterie s řadou dalších dobrot.

Krok 1: Získejte dobrý seznam IPTV

Získejte dobrý seznam IPTV
Získejte dobrý seznam IPTV

Denní seznam IPTV má fantastický výběr bezplatných stanic iptv organizovaných podle zemí. Vyberte požadovanou zemi a stáhněte soubor m3u.

Pro software, který je v tomto, je m3u požadovaný formát. Více o specifikách formátu si můžete přečíst zde.

Krok 2: Předběžný experiment s kódem

Pythonový kód, který budeme zapisovat, analyzuje soubor m3u do seznamu stanic.

#!/usr/bin/python3

import podprocesu ze sys import třída argv Stanice: def _init _ (self): self.channel = 0 self.name = '' self.address = '' channel_list = s otevřeným ('./ us-m3uplaylist-2020-08- 17-1.m3u ',' r ') jako m3u: i = 0 pro řádek v m3u: if line.startswith ('#EXTINF '): this = Station () this.name = line.split (', ') [1] řádek = další (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])]. adresa])

Pojďme to rozebrat.

#!/usr/bin/python3

To říká bash, že budeme používat python3 k interpretaci tohoto souboru.

import subproces z sys import argv

K spuštění naší instance vlc budeme potřebovat modul podprocesu a k výběru kanálu, do kterého spustíme vlc, budeme potřebovat argv.

třída Stanice: def _init _ (self): self.channel = 0 self.name = '' self.address = ''

To definuje třídu s názvem Station. Každý kanál bude mít číslo kanálu, název kanálu převzatý ze souboru m3u a adresu, odkud tento kanál streamuje.

channel_list =

Toto je seznam, který bude ukládat všechny kanály analyzované ze souboru m3u.

s otevřeným ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') jako m3u: i = 0 pro řádek v 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

Tato smyčka otevře seznam skladeb m3u a pohltí data. řádky souboru m3u, které nás zajímají, začínají znakem #EXTINF, což znamená nový záznam do souboru seznamu skladeb. Další zajímavou hodnotou je jméno, které je na stejném řádku jako #EXTINF, ale s čárkou mezi nimi. Následující řádek této konkrétní m3u je adresa streamu. Používá se iterátor „i“pro počítání, který kanál je který. Tato smyčka iteruje celým souborem m3u a naplňuje seznam kanálů stanicemi.

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

knihovna podprocesů umožňuje pythonu volat procesy (programy) a vrací PID (ID procesu). To umožňuje pythonu „spravovat“spouštění a zavírání programů „správně“bez vyplnění souboru historie nebo umožnit spouštění libovolnějšího kódu pomocí obecných volání „systému“. Každý prvek pole použitý jako argument pro Popen je zadán na příkazovém řádku.

vlc --loop --intf dummy --fullscreen adresy

Je požadováno spuštění výše uvedeného příkazu, přičemž volba --loop opravuje některé problémy s pozastavením proudu při načítání dalších bloků (podivné problémy s m3u8), --intf dummy spustí vlc bez rozhraní, pouze obrazovka, --fullscreen spustí video v režimu celé obrazovky (ŽÁDNÝ způsob!) a adresa je adresa streamu. Jak vidíte v kódu, poskytujeme adresu z čísla kanálu seznamu, které je poskytováno za běhu prostřednictvím příkazu argv. Uložte tento soubor jako tv_channels.py, změňte umístění seznamu skladeb v souboru python tak, aby ukazoval na váš seznam skladeb, a kód můžete spustit následujícím způsobem:

python tv_channels.py

Krok 3: Přidejte GPIO

Přidejte GPIO
Přidejte GPIO
Přidejte GPIO
Přidejte GPIO

Schéma ukazuje dva GPIO piny používané pro tlačítka a každý z nich má vytahovací odpor, který udržuje pin GPIO vytažený vysoko po stisknutí tlačítka. Dříve definovaný kód lze upřesnit, aby byla operace o něco plynulejší přidáním funkcí GPIO. To nám umožňuje změnit kanál pomocí tlačítek, nikoli pomocí klávesnice a příkazů argv, stejně jako pro realsies tv.

První věcí na vědomí je, že mám televizi definovanou jako třídu. Abychom mohli být televizí, musíme být na aktuálním kanálu, mít seznam možných kanálů a mít možnost kanály měnit. V tomto příkladu bude jedinou metodou změny kanálů přesunutí seznamu kanálů nahoru a posunutí seznamu kanálů dolů. Jakmile bude o kanálu rozhodnuto, budeme muset spustit VLC na kanálu, který chceme vidět.

#!/usr/bin/python3

od času import spánkový import podproces ze sys import argv z gpiozero import Třída tlačítka Stanice: def _init _ (self): self.channel = 0 self.name = '' self.address = '' self.process = '' třída Televize: def _init _ (self, název_souboru): self.current_channel = 0 self.channel_list = self.build_channel_list (název_souboru) self.start_channel () def build_channel_list (self, název_souboru): s otevřeným (název_souboru, 'r') jako m3u: i = 0 pro řádek 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 () kromě: projít tiskem ('počáteční 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 = Tlačítko (23) při True: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

Tato iterace kódu má několik vylepšení. nyní využíval modul s názvem gpiozero, který je vyžadován Raspberry Pi pro snadný přístup k funkcím GPIO pinů

sudo apt-get install python3-gpiozero

nebo

sudo pip install gpiozero

Jak je vidět v mém kódu, vybral jsem GPIO 18 a GPIO 23 pro kanál NAHORU a kanál DOLŮ. Knihovna gpiozero má pěknou třídu pro funkce tlačítek pro when_pressed, is_pressed, when_held atd. Díky tomu je docela snadné. Vybral jsem when_pressed, který odkazuje na funkci zpětného volání, která se spustí, když je detekován tento signál.

Poslední zásadní změnou je zahrnutí volby '-q' do volání podprocesu VLC. To jednoduše spustí vlc bez veškerého výstupu do terminálu, aby byl bez nepořádku, abychom v kódu viděli informační tiskové příkazy.

Krok 4: Integrujte hardware, abyste vypadali ostře

Integrujte hardware, abyste vypadali ostře
Integrujte hardware, abyste vypadali ostře
Integrujte hardware, abyste vypadali ostře
Integrujte hardware, abyste vypadali ostře
Integrujte hardware, abyste vypadali ostře
Integrujte hardware, abyste vypadali ostře

Nepřišel jsem na to, jak toho chci dosáhnout, a bude to jedinečné řešení pro každý používaný model televize. Musím o tom důkladně přemýšlet a zkoumat televizi, abych našel dobrý zdroj energie pro pí, jakmile nacpu počítač do obrovské přihrádky na baterie. Zvažoval jsem také použití hodinových tlačítek pro výběr kanálu, protože jsou již krásně umístěny v televizi a hodiny stejně nefungují. Více zveřejním, až najdu dobré řešení, ale právě zde se můj projekt bude výrazně lišit od všech ostatních. Užijte si integraci IPTV jako skutečnou televizi!

Krok 5: Pi Power

Pi Power
Pi Power

Pro model TV, který jsem našel, vyžaduje napájení 12 V. Probíral jsem kolem desky, ale neviděl jsem žádné zjevné regulátory napájení pro 5V, takže nejzjevnější místo pro získání stabilního napájení je na desce s obvody, kde vstupuje válcový konektor pro 12V. S tím je zjevný problém. nechceme smažit pí, takže budeme potřebovat regulátor výkonu. Vybral jsem MP2315 Step-Down Power Converter. Je to velmi levné a snadno se používá. Vstup 12 V DC z válcového konektoru na DPS připájíme na piny IN+ a GND převodníku a VO+ na pin 2 na Raspberry Pi a také GND.

NEŽ to provedete, nezapomeňte zapnout převodník a zajistit, aby z výstupu vycházelo správných 5V. Vybral jsem si nejjednodušší možnost s pevně nastavitelným napětím. Trimr upraví napětí, takže jsem sledoval napěťový výstup multimetrem, jak jsem trimr nastavoval šroubovákem.

Krok 6: Integrace napájení

Integrace síly
Integrace síly
Integrace síly
Integrace síly
Integrace síly
Integrace síly

Po kopání kolem televize bylo rozhodnuto, že nejlepším místem pro získání energie je záporný konektor hlavně a přepínač ON/OFF televize, což znamená, že můžeme pomocí televize zapínat a vypínat streamy. neustálé napájení pí tahem přímo z konektoru hlavně.

Dráty byly připájeny a vedeny po straně desky plošných spojů vedle pouzdra, dokud se nedostaly k zadní části jednotky, kde byly přiváděny otvorem, který byl v zadní části prostoru pro baterie. Jakmile jsou protaženy, můžeme připravit konce kabeláže a pájet je dolů k regulátoru výkonu. Vyladil jsem to na 5V pro napájení pí a připájel jsem k němu kolíkové kolíky, abychom mohli spouštět propojky mezi ženami a ženami z regulátoru výkonu přímo do sady GPIO záhlaví pí. To se obvykle nedoporučuje, protože pí obecně získává energii přes UBS, který má vložený regulátor pro úpravu 5V, ale protože výkon je již regulován, mělo by to být v pořádku.

Zvukové linky z toho dělají nějaký šum, protože v systému je zemní smyčka. Zkoušel jsem mnoho výkonových a pozemních bodů po celé desce v naději na snadnou odpověď, ale žádný jsem nenašel. Také jsem připájel kabel microUSB k regulátoru spínaného režimu, abych zjistil, zda by vynucování napájení přes interní regulátory pí vyřešilo problém. To ne. Řešení bude v některých transformátorech izolace zvukové země. Ty byly spíše objednány než postaveny, protože jsou levné a pěkně zabalené. Můžete si je vyzvednout ve většině obchodů nebo oddělení auto audio. To jsem si vybral.

Krok 7: Řešení dlouhodobého tlačítka

Řešení dlouhodobého tlačítka
Řešení dlouhodobého tlačítka
Řešení dlouhodobého tlačítka
Řešení dlouhodobého tlačítka

Bezpochyby tlačítka nezůstanou na prkénku, takže je třeba najít trvalejší řešení. Popadl jsem nějaký starý protoboard a hodil obvod společně s několika kolíky záhlaví, aby byl snadný přístup k signálům. Tady bude mít každý rozdílný názor na to, jak tlačítka připevnit nebo namontovat. Rozhodl jsem se je protoboardovat a jen je připevnit k podvozku tak, aby rukojeť, která se otáčí přes obrazovku, nepřekážela. Neváhejte a vylepšete design přidáním 3D tištěného pouzdra, které vyhladí montáž, použijte matice a šrouby, efektní lepidla, integrujte originální tlačítka, cokoli. Dokud to funguje, neexistují žádné špatné odpovědi.

Ty budou namontovány na vnější stranu pouzdra a Raspberry Pi bude zastrčeno uvnitř velmi prostorného prostoru pro baterie, takže bude třeba vyvrtat malý otvor, který umožní kabelům protáhnout prostor pro baterie.

Krok 8: Konečná kontrola vhodnosti

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

Veškeré vybavení musí být zkontrolováno naposledy, aby bylo přesně vidět, kde je třeba udělat všechny otvory na podvozku a jaké velikosti otvorů atd. Kromě toho by mělo být zváženo, kam umístit součásti, aby byla zajištěna optimální snadnost připojení a přístupu. Stručně řečeno, ujistěte se, že vše sedí tam, kde si myslíte, že ano, než nenapravitelně poškodíte svůj projekt a budete muset dostat pryč.

Krok 9: Konečná integrace

Konečná integrace
Konečná integrace
Konečná integrace
Konečná integrace
Konečná integrace
Konečná integrace

Nyní je veškerý hardware tam, kde má být, a vše sedí stejně pohodlně jako chyba v koberci. Pojďme věci řezat! V prostoru pro baterii jsem identifikoval místo, kam jsem mohl AV kabely vyvést ven pomocí malého zářezu v plastu. Brousil jsem to na lavičce. Dělalo to docela krátkou práci. Pomocí dremelu jsem rozdrtil více plastů, aby to bylo docela vhodné pro kabely.

Poslední komponentou je volič kanálu. Do prostoru pro baterii jsem vyvrtal malý otvor a vyvedl jsem z něj kabely záhlaví po jednom. Tlačítka byla připojena nahoru a protoboard jsem připevnil k plastovému šasi dvěma polovinami předem nalepeného suchého zipu. Chápu, že existovalo asi 1200 lepších způsobů, jak to udělat, ale toto fungovalo a měl jsem po ruce vše, co jsem potřeboval.

Krok 10: Užijte si svou Vintage IPTV

Užijte si svou Vintage IPTV
Užijte si svou Vintage IPTV
Užijte si svou Vintage IPTV
Užijte si svou Vintage IPTV
Užijte si svou Vintage IPTV
Užijte si svou Vintage IPTV

To asi shrnuje. Hledejte pořady a bavte se sledováním. Neseďte však příliš blízko. Zhniješ mozek!

Je tu velký prostor pro vylepšení tohoto projektu, takže si ho vezměte jakýmkoli směrem, kterým chcete, ale dostat se tak daleko bylo zábavné. Pokud jde o mě, spouštím to z cronjob při restartu, takže stdout nezachycuje zprávy ze skriptu python. Chtěl bych to opravit, abych věděl, na jakém kanálu jsem. Dalším dobrým doplňkem je bezdrátový klávesový klíč na Pi. To vám umožní změnit síť Wi -Fi, pokud opustíte dům s televizí. Bez ohledu na. byl to zábavný projekt a nemůžu se dočkat, až se pustím do dalšího.

Doporučuje: