Obsah:
- Krok 1: Získejte dobrý seznam IPTV
- Krok 2: Předběžný experiment s kódem
- Krok 3: Přidejte GPIO
- Krok 4: Integrujte hardware, abyste vypadali ostře
- Krok 5: Pi Power
- Krok 6: Integrace napájení
- Krok 7: Řešení dlouhodobého tlačítka
- Krok 8: Konečná kontrola vhodnosti
- Krok 9: Konečná integrace
- Krok 10: Užijte si svou Vintage IPTV
Video: Retro Idiot Box: 10 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:19
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
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
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
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
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í
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
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
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
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
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:
Retro noční světlo „Rayotron“(část 1): 16 kroků
Retro noční světlo „Rayotron“(část 1): Úvod V prosinci 1956 Atomic Laboratories inzerovalo Rayotron jako „první levný elektrostatický generátor a urychlovač částic“pro učitele přírodních věd a fandy [1]. Rayotron byl nadrozměrný, nabitý gumovým pásem
Samostatný emulátor Retro CP/M: 8 kroků
Retro CP/M Stand Alone Emulator: Tento projekt využívá modul VGA32 ESP v1.4 ke spuštění kombinace nebo RunCPM a FabGL k poskytnutí samostatného počítače s ekvivalentním systémem CP/M 2.2. Populární v 80. letech jako operační systém pro malé počítače. Můžete se vrátit v
Box Juke pro velmi mladé aka Raspi-Music-Box: 5 kroků
Box Juke pro velmi mladé … Aka Raspi-Music-Box: Inspirován instruktážním robotem „RFID-Music-Robot na bázi Raspberry-Pi-RFID“Když jsem popisoval stavbu hudebního přehrávače ROALDH pro jeho tříleté dítě, rozhodl jsem se postavit juke box pro mé ještě mladší děti. Je to v podstatě krabice se 16 tlačítky a Raspi 2 i
Box na 20 $ Cheer Box: 5 kroků (s obrázky)
20 $ Holiday Cheer Box: Tento projekt vám ukáže, jak postavit box, který po stisknutí tlačítka přehraje náhodný zvuk. V tomto případě jsem jej použil k vybudování krabice, kterou mohu o prázdninách strategicky rozmístit po kanceláři. Když lidé stisknou tlačítko, uslyší
The Barbie Box: a Camouflaged Case/ Boom Box for your Mp3 Player: 4 Steps (with Pictures)
Box Barbie: maskované pouzdro/ výložník pro váš přehrávač MP3: Toto je polstrované ochranné pouzdro pro váš přehrávač mp3, které také převádí konektor sluchátek na čtvrt palce, může fungovat jako výložník přepnutím vypínače a zamaskuje váš mp3 přehrávač jako kazetový přehrávač z počátku devadesátých let nebo podobné nízké krádeže i