Tartalomjegyzék:
- 1. lépés: Szerezzen be egy jó IPTV -listát
- 2. lépés: Előzetes kódkísérlet
- 3. lépés: GPIO hozzáadása
- 4. lépés: Integrálja a hardvert élesnek
- 5. lépés: Pi Power
- 6. lépés: A teljesítmény integrálása
- 7. lépés: Hosszú távú gombmegoldás
- 8. lépés: Végső illeszkedési ellenőrzés
- 9. lépés: Végső integráció
- 10. lépés: Élvezze a Vintage IPTV -t
Videó: Retro idióta doboz: 10 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:39
Találtam egy régi Magnavox hordozható televíziót 1984 -ből a polcomon ülve a helyi takarékos boltomban. Azt gondoltam magamban: "ó NEAT!" További vizsgálat után észrevettem rajta egy 15 dolláros árcédulát, ezért úgy döntöttem, hogy hazaviszem, és valami csípőset készítek belőle. Emlékszem, gyerekkoromban néztem az ismétléseket minden klasszikus dicsőséges fekete -fehérben, és szerettem volna ezt újra valósággá tenni.
A probléma az, hogy már nincsenek analóg állomások, és ez teljesen képtelen bármilyen ATSC dekódolásra vagy digitális dekódolásra. Észrevettem, hogy van egy AV -csatlakozás az oldalon, és néhány málna pi -t hevertek körül, ezért úgy döntöttem, hogy kalandba kezdek, hogy kitaláljam, hogyan tudnám ehhez csatornákat közvetíteni. Én is szeretném élesnek látszani. Nem fogom a 9 D-cellás akkumulátorokkal működtetni, így sok más finomsággal elrejthetem az akkumulátorrekeszben lévő rpi-t.
1. lépés: Szerezzen be egy jó IPTV -listát
A Daily IPTV List fantasztikus választékot kínál országonként szervezett ingyenes iptv állomásokról. Válassza ki a választott országot, és töltse le a m3u fájlt.
Az ebben a szoftverben az m3u szükséges formátum. A formátum sajátosságairól itt olvashat bővebben.
2. lépés: Előzetes kódkísérlet
A python kód, amelyet írni fogunk, elemzi az m3u fájlt az állomások listájába.
#!/usr/bin/python3
alfolyamat importálása a sys-ből 17-1.m3u ',' r ') mint m3u: i = 0 a m3u sorban: if line.startswith ('#EXTINF '): this = Station () this.name = line.split (', ') [1] sor = következő (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])]. cím])
Bontsuk le ezt.
#!/usr/bin/python3
Ez azt mondja a bash -nak, hogy a python3 -at fogjuk használni a fájl értelmezéséhez.
import alprocessfrom sys import argv
Szükségünk lesz az alfolyamat modulra, hogy elindítsuk a vlc példányunkat, és szükségünk lesz az argv -re, hogy kiválasszuk, melyik csatornára indítjuk a vlc -t.
osztály Állomás: def _init _ (self): self.channel = 0 self.name = "self.address ="
Ez határozza meg az Állomás nevű osztályt. Minden csatorna rendelkezik egy csatornaszámmal, a csatorna nevével, amelyet az m3u fájlból vett, és annak a címnek, ahonnan a csatorna folyik.
channel_list =
Ez a lista tartalmazza az m3u fájlból elemzett összes csatornát.
nyitva ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') mint m3u: i = 0 a m3u sorban: 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
Ez a ciklus megnyitja az m3u lejátszási listát, és befogadja az adatokat. a minket érdeklő m3u fájlsorok #EXTINF karakterrel kezdődnek, ez új bejegyzést jelez a lejátszási lista fájlban. A következő érdekes érték a név, amely ugyanazon a soron van, mint az #EXTINF, de vesszővel van közöttük. Ennek a m3u -nak a következő sora a patak címe. Van egy "i" iterátor, amely számolja, melyik csatorna melyik. Ez a ciklus végigmegy a teljes m3u fájlon, és megtölti a channel_list állomásokkal.
process = alfolyamat. Nyitott (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. cím])
az alfolyamat -könyvtár lehetővé teszi a python számára, hogy folyamatokat (programokat) hívjon meg, és PID -t (folyamatazonosítót) ad vissza. Ez lehetővé teszi a python számára, hogy "helyesen" tudja kezelni a programok indítását és bezárását anélkül, hogy kitöltené az előzményfájlt, vagy lehetővé tenné tetszőleges kód futtatását általános "rendszerhívásokkal". A Popen argumentumaként használt tömb minden eleme a parancssorban van megadva.
vlc --loop --intf dummy -teljes képernyős címek
A fenti parancsot kívánjuk futtatni, a --loop opcióval javíthatunk néhány problémát az adatfolyam szüneteltetésénél, miközben a következő darabok betöltődnek (furcsa m3u8 problémák), --intf dummy elindítja a vlc -t a felület nélkül, csak egy képernyő, -teljes képernyő elindítja a videót teljes képernyős módban (NINCS!), és a cím a stream címe. Amint az a kódban látható, a listából a csatorna számából adjuk meg a címet, amelyet futásidőben az argv utasításon keresztül adunk meg. Mentse el ezt a fájlt tv_channels.py néven, módosítsa a lejátszási lista helyét a python fájlban, hogy a lejátszási listára mutasson, és a következőképpen futtathatja a kódot:
python tv_channels.py
3. lépés: GPIO hozzáadása
A sematikus ábrán látható a gomboknál használt két GPIO -csap, és mindegyiknek van egy felhúzó ellenállása, amely a gomb megnyomása után magasra húzza a GPIO -tűt. A korábban definiált kód finomítható, hogy a művelet egy kicsit zökkenőmentesebb legyen GPIO képesség hozzáadásával. Ez lehetővé teszi számunkra, hogy gombokkal változtassuk a csatornát, nem pedig billentyűzettel és argv állításokkal, akárcsak a valós tv -hez.
Az első dolog, amit meg kell jegyeznem, hogy a televíziót osztályként határoztam meg. Ahhoz, hogy televízió lehessünk, egy aktuális csatornán kell szerepelnünk, rendelkeznünk kell a lehetséges csatornák listájával, és meg kell tudnunk változtatni a csatornákat. Ebben a példában az egyetlen módszer a csatornaváltásra az lesz, ha feljebb lép a csatornalistán, és lefelé. Miután eldöntöttük a csatornát, el kell indítanunk a VLC -t azon a csatornán, amelyet látni szeretnénk.
#!/usr/bin/python3
from time import alvó import alprocess from sys import argv from gpiozero import Button class Station: def _init _ (self): self.channel = 0 self.name = "self.address =" self.process = "class Television: def _init _ (én, fájlnév): self.current_channel = 0 self.channel_list = self.build_channel_list (fájlnév) self.start_channel () def build_channel_list (self, filename): with open (filename, 'r') as m3u: i = 0 a sorban m3u -ban: 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 () kivéve: pass print ('kezdőcsatorna % d' % self.current_channel) self.process = alfolyamat. Popen (['vlc', '-q', '--loop', '--intf', ' dummy ',' --fullscreen ', self.channel_list [self.current_channel].cím]) this = Television ('./ us-m3uplaylist-2020-08-17-1.m3u ') channel_UP = Button (18) channel_DN = Gomb (23), míg igaz: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down
A kód ezen iterációja jó néhány fejlesztéssel rendelkezik. most a gpiozero nevű modult használta, amelyre a málna pi -nek szüksége van ahhoz, hogy könnyen elérhesse a GPIO csapok funkcióit
sudo apt-get install python3-gpiozero
vagy
sudo pip telepítse a gpiozero programot
Amint a kódomban látható, a GPIO 18 és a GPIO 23 lehetőséget választottam az UP és DOWN csatornákhoz. A gpiozero könyvtárban van egy szép osztály a gombok funkcióihoz, amikor_nyomva, van_nyomva, mikor_tartva stb. Ez nagyon egyszerűvé teszi. Az if_pressed lehetőséget választottam, amely egy visszahívási funkcióra utal, amelyet akkor kell futtatni, amikor ezt a jelet észleli.
Az utolsó jelentős változás a „-q” opció beépítése a VLC alfolyamat -hívásba. Ez egyszerűen futtatja a vlc -t a terminál összes kimenete nélkül, hogy ne legyen rendetlenség, hogy láthassuk a kódban található információs nyomtatott utasításokat.
4. lépés: Integrálja a hardvert élesnek
Nem jöttem rá, hogyan szeretném ezt megvalósítani, és ez egy egyedi megoldás lesz minden használt TV -modell esetében. Erősen meg kell gondolnom ezt, és körül kell néznem a televíziót, hogy jó áramforrást találjak a pi -nek, amint betömöm a számítógépet a hatalmas elemtartóba. Gondolkodtam azon is, hogy a csatorna kiválasztásához az óra gombokat használom, mivel ezek már szépen vannak elhelyezve a televízión, és az óra egyébként sem működik. Ha jó megoldást találok, többet közzéteszek, de itt a projektem nagymértékben eltér majd másokétól. Élvezze az igazi TV-szerű IPTV integrációt!
5. lépés: Pi Power
Az általam talált TV -modellhez 12V -os tápegység szükséges. Körbejártam a táblát, de nem láttam nyilvánvaló teljesítményszabályozót 5V -ra, így a legnyilvánvalóbb hely az állandó áramellátáshoz az áramköri lap, ahol a 12V -os csőcsatlakozó jön be. Ezzel nyilvánvaló probléma van. nem akarjuk pirítani a pi -t, ezért szükségünk lesz teljesítményszabályozóra. Az MP2315 Step-Down Power Converter-t választottam. Piszkos olcsó, és egyszerűen használható. Forrasztjuk a 12 V egyenáramú bemenetet a NYÁK csőcsatlakozójából az átalakító IN+ és GND csapjaihoz, a VO+ -t pedig a Raspberry Pi 2 -es tűjéhez, valamint egy GND -t.
Mielőtt ezt megtenné, feltétlenül kapcsolja be az átalakítót, és győződjön meg arról, hogy a megfelelő 5 V feszültség jön ki a kimenetből. A legegyszerűbb opciót választottam a vezetékes állítható feszültséggel. A trimmer beállítja a feszültséget, ezért multiméterrel figyeltem a kimeneti feszültséget, miközben csavarhúzóval állítottam be a trimmert.
6. lépés: A teljesítmény integrálása
A televízió körül való ásás után úgy döntöttünk, hogy a legjobb hely az áramkivezetéshez a hordócsatlakozó negatívja és a televízió BE/KI kapcsolója, ami azt jelenti, hogy a televízióval be- és kikapcsolhatjuk az adatfolyamokat. folyamatosan táplálja a pi -t, közvetlenül a csőcsatlakozóból húzva.
A vezetékeket beforrasztották és a PCB oldalán a ház mellett etették, amíg el nem érték a készülék hátulját, ahol az elemtartó hátsó részén lévő lyukon keresztül táplálták őket. Miután betáplálták, előkészíthetjük a kábelezés végeit, és leforraszthatjuk a teljesítményszabályozóhoz. 5 V -ra hangoltam, hogy táplálja a pi -t, és forrasztottam hozzá fejléc -csapokat, hogy női és női ugrókat tudjunk futtatni a teljesítményszabályozóról közvetlenül a pi GPIO fejléckészletére. Ez általában nem tanácsos, mivel a pi általában az UBS -en keresztül kap áramot, amely rendelkezik egy szabályzóval az 5 V kondenzációjához, de mivel a teljesítmény már szabályozva van, rendben kell lennie.
Ennek hatására némi zaj hallható az audio vonalakon, mert van földelő hurok a rendszerben. Sok erő és földi pontot kipróbáltam az egész táblán, remélve a könnyű választ, de nem találtam. Én is forrasztottam egy microUSB kábelt a kapcsolt módú szabályozóhoz, hogy lássam, hogy a pi belső szabályozóin keresztül történő erőltetés megoldja -e a problémát. Nem. A megoldás néhány audio földi leválasztó transzformátorban lesz. Ezeket inkább megrendelték, mint építették, mert olcsók és szépen csomagoltak. A legtöbb automatikus audioáruházban vagy osztályon átveheti őket. Ezt választottam.
7. lépés: Hosszú távú gombmegoldás
Kétségtelen, hogy a gombok nem maradnak a kenyértáblán, ezért tartósabb megoldásra van szükség. Fogtam egy régi protoboard -ot, és néhány fejléccel összedobtam az áramkört, hogy megkönnyítsem a jelek elérését. Itt mindenki eltérő véleményen lesz a gombok rögzítéséről vagy rögzítéséről. Úgy döntök, hogy protoboardra helyezem őket, és csak úgy rögzítem őket az alvázhoz, hogy a képernyő fölé lendülő fogantyú ne zavarja. Nyugodtan feldobhatja a dizájnt egy 3D nyomtatott tok hozzáadásával, amely simítja a szerelést, használjon anyákat és csavarokat, díszes ragasztókat, integrálja az eredeti gombokat. Amíg működik, nincs rossz válasz.
Ezeket a tok külsejére szerelik fel, és a Raspberry Pi a nagyon tágas elemtartó rekeszbe kerül, így egy kis lyukat kell fúrni, hogy a kábelek kilépjenek az elemtartóból.
8. lépés: Végső illeszkedési ellenőrzés
Az összes berendezést utoljára ellenőrizni kell, hogy pontosan hol vannak az összes lyuk, amelyet az alvázhoz kell tenni, és milyen méretű lyukakat kell készíteni. Ezenkívül meg kell fontolni, hogy hová helyezze el az alkatrészeket az optimális csatlakoztathatóság és hozzáférés érdekében. Röviden, győződjön meg arról, hogy minden a helyére kerül, ahol gondolja, mielőtt helyrehozhatatlanul károsítja a projektet, és ki kell vennie a foltot.
9. lépés: Végső integráció
Most minden hardver ott van, ahol lennie kell, és mindez olyan jól illeszkedik, mint egy szőnyeghiba. Vágjuk le a dolgokat! Az elemtartón azonosítottam egy helyet, ahol az AV kábeleket kis műanyag mélyedéssel ki lehet vezetni. Egy paddarálóval köszörültem le. Elég rövid munkát végzett vele. Dremelt használtam több műanyag ledarálására, hogy nagyon jól illeszkedjen a kábelekhez.
Az utolsó komponens a csatornaválasztó. Fúrtam egy kis lyukat az elemtartóban, és egyenként kihúztam belőle a csatlakozó kábeleket. A gombok össze voltak kötve, és a protoboardot két fél előre ragasztott tépőzárral rögzítettem a műanyag alvázhoz. Úgy tudom, hogy körülbelül 1200 jobb módszer volt erre, de ez működött, és minden, amire szükségem volt, kéznél volt.
10. lépés: Élvezze a Vintage IPTV -t
Ez nagyjából összefoglalja. Találjon műsorokat és érezze jól magát. Azért ne üljön túl közel. Elforgatod az agyad!
Rengeteg lehetőség van a projekt fejlesztésére, ezért vigye a kívánt irányba, de szórakoztató volt idáig eljutni. Ami engem illet, ezt cronjob -ból futtatom újraindításkor, így az stdout nem rögzíti az üzeneteket a python parancsfájlból. Szeretném ezt kijavítani, hogy tudjam, melyik csatornán vagyok. Egy másik jó kiegészítés a vezeték nélküli billentyűzetkulcs a Pi -n. Ez lehetővé teszi a wifi hálózat megváltoztatását, ha elhagyja otthonát a TV -vel. Tekintet nélkül. szórakoztató projekt volt, és alig várom, hogy elkezdhessem a következőt.
Ajánlott:
Zoom vezérlő doboz: 5 lépés (képekkel)
Zoomvezérlő doboz: ÚJ HÍREK (2021. április): Régóta szerettem volna Bluetooth -változatot készíteni, és most megvan a technológia! Kövess engem, ha hallani akarsz róla, amikor megjelenik, remélhetőleg néhány hét múlva. Ugyanazt a dobozt és ugyanazt a feneket fogja használni
Arduino billentyűzet joystick bővítő doboz és hangvezérlő dolog a Deej használatával: 8 lépés
Az Arduino billentyűzet joystick bővítő doboza és hangvezérlője a Deej használatával: Miért Egy ideje szeretnék egy kis joystickot hozzáadni a billentyűzetemhez az interfész elemek vezérléséhez, vagy más kisebb feladatokat a játékokban és szimulátorokban (MS Flight Sim, Elite: Dangerous, Csillagok háborúja: századok stb.). Továbbá az Elite: Dangerous esetében voltam
Zseb haszontalan doboz (személyiséggel): 9 lépés (képekkel)
Zseb haszontalan doboz (személyiséggel): Bár messze vagyunk a robotfelkeléstől, van egy gép, amely már ellentmond az embereknek, bár a lehető legapróbb módon. Akár haszontalan doboznak, akár békén hagyható gépnek akarjuk nevezni, ez a szaggatott, pimasz robot
Raspberry Pi doboz hűtőventilátor CPU hőmérséklet kijelzővel: 10 lépés (képekkel)
Raspberry Pi doboz hűtőventilátor CPU hőmérséklet-jelzővel: Az előző projektben bemutattam a raspberry pi (a továbbiakban RPI) CPU hőmérséklet-jelző áramkört. Az áramkör egyszerűen az RPI 4 különböző CPU-hőmérsékleti szintjét mutatja az alábbiak szerint.- A zöld LED bekapcsol, amikor A CPU hőmérséklete 30 ~
Cédrus (szivar?) Doboz hangszóró doboz: 8 lépés (képekkel)
Cedar (szivar?) Doboz hangszóró doboz: A Munny hangszórók ihlette, de nem hajlandó többet költeni, mint 10 dollár, itt az én útmutatásom a régi számítógépes hangszórók, a fából készült doboz a takarékboltból és sok forró ragasztó segítségével