Përmbajtje:

Kuti Retro Idiot: 10 Hapa
Kuti Retro Idiot: 10 Hapa

Video: Kuti Retro Idiot: 10 Hapa

Video: Kuti Retro Idiot: 10 Hapa
Video: 10 эффективных приемов самомассажа, которые помогут убрать живот и бока. Коррекция фигуры 2024, Korrik
Anonim
Kuti Retro Idiotike
Kuti Retro Idiotike

Gjeta një televizor të vjetër portativ Magnavox nga viti 1984 i ulur në një raft në dyqanin tim të mallrave. Mendova me vete, "o ZOT!" Pas inspektimit të mëtejshëm, vura re një çmim prej 15 dollarësh, kështu që vendosa ta çoja në shtëpi dhe të bëja diçka të ndyrë nga ajo. Mbaj mend që shikoja përsëritjet si fëmijë i të gjithë klasikëve të mëdhenj në bardh e zi, dhe doja ta bëja këtë përsëri realitet.

Problemi është se nuk ka më stacione analoge atje, dhe kjo është krejtësisht e paaftë për të bërë ndonjë deshifrim ATSC, ose ndonjë dekodim dixhital. Unë vërtet vura re praninë e një lidhjeje AV në anën tjetër, dhe kisha disa pi mjedër, kështu që vendosa të filloj një aventurë për të kuptuar se si mund t'i transmetoj kanalet për këtë. Unë gjithashtu dua ta bëj atë të duket e mprehtë. Unë nuk do ta përdor atë në bateritë me 9 qeliza D, kështu që mund ta fsheh rpi në ndarjen e baterisë me një mori të mirash të tjera.

Hapi 1: Merrni një listë të mirë IPTV

Merrni një listë të mirë IPTV
Merrni një listë të mirë IPTV

Lista e përditshme IPTV ka një përzgjedhje fantastike të stacioneve falas iptv të organizuara nga vendi. Zgjidhni vendin e zgjedhur dhe shkarkoni skedarin m3u.

Për softuerin që gjendet në këtë, m3u është një format i nevojshëm. Mund të lexoni më shumë rreth specifikave të formatit këtu.

Hapi 2: Eksperimenti i Kodit Preliminar

Kodi python që do të shkruajmë e analizon skedarin m3u në një listë stacionesh.

#!/usr/bin/python3

nënproces i importit nga sys import import argv class Stacioni: def _init _ (vet): self.channel = 0 self.name = '' self.address = '' channel_list = me hapur ('./ us-m3uplaylist-2020-08- 17-1.m3u ',' r ') si m3u: i = 0 për rreshtin në m3u: nëse linja. Fillon me ('#EXTINF '): this = Stacioni () this.name = line.split (', ') [1] rresht = tjetra (m3u) kjo.adresa = linja.strip () kjo.kanali = i lista_kanalet.append (kjo) i = i + 1 proces = nënproces. Hap ((['vlc', '--loop', '--intf', 'bedel', '-ekran i plotë', lista e kanaleve [int (argv [1])]. adresa])

Le ta zbërthejmë këtë.

#!/usr/bin/python3

Kjo tregon bash se ne do të përdorim python3 për të interpretuar këtë skedar.

importo nënproces nga sys import argv

Do të na duhet moduli i nënprocesit për të nisur shembullin tonë vlc, dhe do të na duhet argv për të zgjedhur në cilin kanal do të lançojmë vlc.

klasa Stacioni: def _init _ (vetja): self.channel = 0 veta.emri = "" vetë.adresa ="

Kjo përcakton një klasë të quajtur Station. Çdo kanal do të ketë një numër kanali, emrin e kanalit të marrë nga skedari m3u dhe një adresë se nga vjen ai kanal.

lista e kanaleve =

Kjo është një listë që do të ruajë të gjitha kanalet e analizuara nga skedari m3u.

me hapur ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') si m3u: i = 0 për linjën në 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

Ky lak hap listën e dëgjimit m3u dhe gëlltit të dhënat. linjat e skedarëve m3u që ne jemi të interesuar fillojnë me #EXTINF, Kjo tregon një hyrje të re në skedarin e listës së luajtjes. Vlera tjetër e interesit është emri, i cili është në të njëjtën linjë si #EXTINF, por me presje mes tyre. Linja e mëposhtme e këtij m3u të veçantë është adresa e rrjedhës. Ekziston një iterator "i" në përdorim për të llogaritur se cili kanal është cili. Ky lak përsëritet nëpër të gjithë skedarin m3u dhe mbush listën e kanaleve me stacione.

proces = nënproces. Hap (('' vlc ',' --loop ',' --intf ',' bedel ','-ekran i plotë ', lista e kanaleve [int (argv [1])]. adresa])

biblioteka e nënprocesit lejon python -in të thërrasë procese (programe) dhe kthen një PID (Process ID). Kjo i mundëson python të jetë në gjendje të menaxhojë nisjen dhe mbylljen e programeve "në mënyrë korrekte" pa mbushur skedarin e historisë, ose duke lejuar që kodi më arbitrar të ekzekutohet me thirrjet e përgjithshme "sistem". Çdo element i grupit të përdorur si argument për Popen është i shtypur në vijën e komandës.

vlc -loop --intf dummy -adresat e plota të ekranit

Komanda e mësipërme është ajo që dëshirohet të ekzekutohet, me opsionin --loop që rregullon disa çështje me pauzën e rrymës gjatë ngarkimit të pjesëve të tjera (çështje të çuditshme m3u8), nis videon në modalitetin e ekranit të plotë (JO RRUG!), dhe adresa është adresa e transmetimit. Siç mund ta shihni në kod, ne po japim adresën nga numri i kanalit të listës, i cili sigurohet në kohën e ekzekutimit nëpërmjet deklaratës argv. Ruajeni këtë skedar si tv_channels.py, ndryshoni vendndodhjen e listës së luajtjes në skedarin python për të treguar në listën tuaj të luajtjes dhe mund ta ekzekutoni kodin si më poshtë:

python tv_channels.py

Hapi 3: Shtoni GPIO

Shto GPIO
Shto GPIO
Shto GPIO
Shto GPIO

Skema tregon dy kunjat GPIO që përdoren për butonat, dhe secila ka një rezistencë tërheqëse për ta mbajtur pinin GPIO të tërhequr lart pas shtypjes së butonit. Kodi i përcaktuar më parë mund të rafinohet për ta bërë operacionin pak më të lehtë duke shtuar aftësinë GPIO. Kjo na lejon të ndryshojmë kanalin me butona, në vend të deklaratave të tastierës dhe argv, ashtu si një televizor për realitet.

Gjëja e parë që duhet vënë re është se kam televizorin të përcaktuar si klasë. Për të qenë një televizor, ne duhet të jemi në një kanal aktual, të kemi një listë të kanaleve të mundshme dhe të kemi aftësinë për të ndryshuar kanalet. Në këtë shembull, metoda e vetme e ndryshimit të kanaleve do të jetë lëvizja lart në listën e kanaleve dhe zhvendosja poshtë në listën e kanaleve. Pasi të vendoset kanali, do të duhet të fillojmë VLC në kanalin që duam të shohim.

#!/usr/bin/python3

nga koha importimi i nënprocesit të importit të gjumit nga sys import argv nga gpiozero import Button class Station _init _ (vetë, emri i skedarit): self.current_channel = 0 self.channel_list = self.build_channel_list (emri i skedarit) self.start_channel () def build_channel_list (vetja, emri i skedarit): me hapur (emri i skedarit, 'r') si m3u: i = 0 për rreshtin në m3u: nëse line.fillon me ('#EXTINF'): this = Stacioni () 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): vet. kanali aktual = len (vetë.kana_ lista) vet.fillo_kanalet () def channel_down (vetja): vetja.kryerja_kanaleti = vetja.kanalet e rrymës - 1 nëse vetë.kanalet e rrymës <0: vetë. kanali i rrjedhës = 0 veta: provo: vetë.proces. kill () përveç: kaloni printimin ('kanali fillestar % d' % self.current_channel) self.process = nënproces. Hapur (

Ky përsëritje e kodit ka mjaft përmirësime. tani përdori një modul të quajtur gpiozero që kërkohet nga mjedra pi për të hyrë lehtësisht në funksionalitetin e kunjave GPIO

sudo apt-get install python3-gpiozero

ose

sudo pip instaloni gpiozero

Siç shihet në kodin tim, unë kam zgjedhur GPIO 18 dhe GPIO 23 për kanalin UP respektivisht dhe kanalin DOWN. Biblioteka gpiozero ka një klasë të këndshme për funksionet e butonave kur shtypen, shtypen, kur mbahen, etj. Kjo e bën atë mjaft të lehtë. Zgjodha kur_pressed, i cili i referohet një funksioni të kthimit të thirrjes për t'u ekzekutuar kur ky sinjal të zbulohet.

Ndryshimi i fundit i madh është përfshirja e opsionit '-q' në thirrjen e nënprocesit VLC. Kjo thjesht ekzekuton vlc pa të gjithë daljen në terminal për ta mbajtur atë pa rrëmujë, në mënyrë që të shohim deklaratat e shtypura informative në kod.

Hapi 4: Integroni pajisjen për të parë të mprehtë

Integroni pajisjen për të parë të mprehtë
Integroni pajisjen për të parë të mprehtë
Integroni pajisjen për të parë të mprehtë
Integroni pajisjen për të parë të mprehtë
Integroni pajisjen për të parë të mprehtë
Integroni pajisjen për të parë të mprehtë

Unë nuk e kam kuptuar se si dua ta arrij këtë, dhe do të jetë një zgjidhje unike për secilin model televiziv në përdorim. Duhet të mendohem shumë për këtë dhe të hetoj rreth televizorit për të gjetur një burim të mirë energjie për pi sapo të mbush kompjuterin brenda ndarjes masive të baterisë. Kam marrë parasysh gjithashtu përdorimin e butonave të orës për përzgjedhjen e kanalit, pasi ato tashmë janë vendosur bukur në televizor, dhe ora nuk punon gjithsesi. Do të postoj më shumë kur të gjej një zgjidhje të mirë, por kjo është ajo ku projekti Im do të ndryshojë shumë nga ai i të tjerëve. Shijoni integrimin IPTV të ngjashëm me televizorin!

Hapi 5: Fuqia Pi

Pi Fuqia
Pi Fuqia

Për televizorin model që gjeta, kërkon një furnizim me energji 12V. Unë hetova rreth bordit, por nuk pashë ndonjë rregullator të dukshëm të energjisë për 5V, kështu që vendi më i dukshëm për të marrë një furnizim të qëndrueshëm me energji elektrike është në bordin e qarkut ku futet lidhësi i fuçisë për 12V. Ka një problem të dukshëm me këtë Me ne nuk duam të skuqim pi, kështu që do të kemi nevojë për një rregullator të energjisë. Unë kam zgjedhur MP2315 Step-Down Power Converter. Dirtshtë papastërti e lirë dhe e thjeshtë për t’u përdorur. Ne do të bashkojmë hyrjen 12VDC nga lidhësi i fuçisë në PCB në kunjat IN+ dhe GND të konvertuesit, dhe VO+ në pin 2 në Raspberry Pi, si dhe një GND.

PARA që të bëhet kjo, sigurohuni që të aktivizoni konvertuesin dhe të siguroheni që 5V e duhur të dalë nga dalja. Zgjodha opsionin më të thjeshtë me tension të rregullueshëm me tela të fortë. Prerësi do të rregullojë tensionin, kështu që unë pashë daljen e tensionit me një multimetër ndërsa rregulloja prerësin me një kaçavidë.

Hapi 6: Integrimi i Fuqisë

Fuqia Integruese
Fuqia Integruese
Fuqia Integruese
Fuqia Integruese
Fuqia Integruese
Fuqia Integruese

Pas gërmimit rreth televizorit, u vendos që vendi më i mirë për të marrë energji ishte nga negativi i lidhësit të tytës dhe çelësi i televizorit ON/OFF, që do të thotë se ne mund të ndezim dhe fikim rrymat me televizorin, më tepër se duke fuqizuar vazhdimisht pi duke u tërhequr drejtpërdrejt nga lidhësi i fuçisë.

Telat u ngjitën dhe u ushqyen përgjatë anës së PCB -ve pranë kasës derisa arritën në pjesën e pasme të njësisë, ku u ushqyen përmes një vrime që ishte në pjesën e pasme të ndarjes së baterisë. Pasi të jenë ushqyer, ne mund të përgatisim skajet e kabllove dhe t'i lidhim ato në rregullatorin e energjisë. Unë e akordova atë për 5V për të fuqizuar pi dhe lidhi kunjat e kokës në të, në mënyrë që të mund të kalojmë kërcyeset femra te femrat nga rregullatori i energjisë drejtpërdrejt në grupin e kokës së GPIO të pi. Kjo normalisht nuk këshillohet, pasi pi në përgjithësi merr energji përmes UBS, e cila ka një rregullator të brendshëm për të kushtëzuar 5V, por meqenëse fuqia tashmë është duke u rregulluar, duhet të jetë mirë.

Ka disa zhurma në linjat audio nga bërja e kësaj, sepse ka një lak tokësor në sistem. Provova shumë pika të fuqisë dhe tokësore në të gjithë tabelën duke shpresuar për një përgjigje të lehtë, por nuk gjeta asnjë. Unë bashkova gjithashtu një kabllo microUSB në rregullatorin e modalitetit të ndërruar për të parë nëse shtyrja e energjisë përmes rregullatorëve të brendshëm të pi do ta zgjidhë çështjen. Nuk e bëri. Zgjidhja do të jetë në disa transformatorë të izolimit të tokës audio. Këto u porositën më shumë sesa u ndërtuan, sepse ato janë të lira dhe të paketuara mirë. Ju mund t'i merrni ato nga shumica e dyqaneve audio ose departamenteve. Kjo është ajo që zgjodha.

Hapi 7: Zgjidhja e butonit afatgjatë

Zgjidhja e butonit afatgjatë
Zgjidhja e butonit afatgjatë
Zgjidhja e butonit afatgjatë
Zgjidhja e butonit afatgjatë

Pa dyshim, butonat nuk do të qëndrojnë në një pjatë, kështu që duhet të ketë një zgjidhje më të përhershme. Mora një protoboard të vjetër dhe hodha qarkun së bashku me disa kunja të kokës për ta bërë më të lehtë qasjen në sinjale. Kjo është ajo ku të gjithë do të kenë një ndryshim mendimi se si t'i bashkëngjitni ose montoni butonat. Unë jam duke zgjedhur t'i protoboardoj ato dhe thjesht t'i bashkoj në shasi në mënyrë që doreza që lëkundet mbi ekran për t'u mbajtur të mos ndërhyjë. Ndjehuni të lirë të ndërtoni modelin duke shtuar një kuti të printuar 3D që zbut montimin, përdorni arra dhe bulona, ngjitës të zbukuruar, integroni butonat origjinal, çfarëdo. Për sa kohë që funksionon, nuk ka përgjigje të gabuara.

Këto do të montohen në pjesën e jashtme të kutisë dhe Raspberry Pi do të futet brenda ndarjes së baterisë shumë të madhe, kështu që do të duhet të bëhet një vrimë e vogël për të lejuar që kabllot të dalin nga ndarja e baterisë.

Hapi 8: Kontrolli përfundimtar i përshtatshmërisë

Kontrolli përfundimtar i përshtatshmërisë
Kontrolli përfundimtar i përshtatshmërisë

Të gjitha pajisjet duhet të kontrollohen për herë të fundit për të parë saktësisht se ku duhet të bëhen të gjitha vrimat në shasi, dhe çfarë madhësie vrima, etj duhet të bëhen. Për më tepër, duhet të merret parasysh se ku të vendosen përbërësit për lehtësinë optimale të lidhjes dhe qasjes. Një histori e shkurtër, sigurohuni që gjithçka të përshtatet aty ku mendoni se bën para se të dëmtoni në mënyrë të pariparueshme projektin tuaj dhe duhet të hiqni kutinë.

Hapi 9: Integrimi Final

Integrimi Final
Integrimi Final
Integrimi Përfundimtar
Integrimi Përfundimtar
Integrimi Final
Integrimi Final

Tani i gjithë pajisja është aty ku duhet të jetë, dhe të gjitha përshtaten po aq mirë sa një defekt në një qilim. Le t’i presim gjërat! Unë identifikova një vend në ndarjen e baterisë ku mund të kaloja kabllot AV duke përdorur një gropë të vogël në plastikë. E bluaj atë me një mulli stol. Ai bëri një punë mjaft të shkurtër. Kam përdorur një dremel për të bluar më shumë plastikë për ta bërë atë një përshtatje mjaft të mirë për kabllot.

Komponenti i fundit është përzgjedhësi i kanalit. Unë shpova një vrimë të vogël në ndarjen e baterisë dhe nxorra kabllot e kokës nga ajo një nga një. Butonat u lidhën dhe unë e bashkova protobboardin në shasinë plastike me dy gjysma velkro të ngjitur paraprakisht. E kuptoj që kishte rreth 1200 mënyra më të mira për ta bërë këtë, por kjo funksionoi, dhe kisha gjithçka që më duhej në dorë.

Hapi 10: Shijoni IPTV -në tuaj të cilësisë së mirë

Shijoni IPTV -në tuaj të cilësisë së mirë
Shijoni IPTV -në tuaj të cilësisë së mirë
Shijoni IPTV -në tuaj të cilësisë së mirë
Shijoni IPTV -në tuaj të cilësisë së mirë
Shijoni IPTV -në tuaj të cilësisë së mirë
Shijoni IPTV -në tuaj të cilësisë së mirë

Kjo e përmbledh atë. Gjeni shfaqje dhe argëtohuni duke shikuar. Mos u ulni shumë afër, sidoqoftë. Do ta kalbni trurin!

Ka shumë hapësirë për të përmirësuar këtë projekt, kështu që merreni në çfarëdo drejtimi që dëshironi, por ishte kënaqësi të arrish deri këtu. Sa për mua, unë e drejtoj këtë nga një cronjob në rindezje, kështu që stdout nuk i kap mesazhet nga shkrimi python. Unë do të doja ta rregulloja këtë në mënyrë që të di se në cilin kanal jam. Një shtesë tjetër e mirë është një dongle pa tel e tastierës në Pi. Kjo do t'ju lejojë të ndryshoni rrjetin wifi nëse dilni nga shtëpia juaj me televizor. Pavarësisht. ishte një projekt argëtues, dhe mezi pres të filloj me projektin tjetër.

Recommended: