Բովանդակություն:
- Քայլ 1: Ստացեք լավ IPTV ցուցակ
- Քայլ 2. Նախնական օրենսգրքի փորձ
- Քայլ 3: Ավելացնել GPIO
- Քայլ 4: Ինտեգրեք սարքավորումները `ավելի սուր տեսք ունենալու համար
- Քայլ 5: Pi Power
- Քայլ 6: Ուժի ինտեգրում
- Քայլ 7: Երկարաժամկետ կոճակի լուծում
- Քայլ 8: Վերջնական համապատասխանության ստուգում
- Քայլ 9. Վերջնական ինտեգրում
- Քայլ 10: Վայելեք ձեր Vintage IPTV- ն
Video: Retro Idiot Box: 10 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:45
Ես գտա 1984 -ից մի հին Magnavox շարժական հեռուստատեսություն, որը նստած էր խանութի դարակների վրա `իմ տեղական մանրածախ խանութում: Ես ինքս ինձ մտածեցի. Հետագա ստուգումից հետո ես դրա վրա նկատեցի 15 դոլար գին, ուստի որոշեցի այն տուն տանել և դրանից ինչ -որ փխրուն բան պատրաստել: Հիշում եմ, թե ինչպես էի փառահեղ սև ու սպիտակի ոճով դիտում բոլոր մեծ դասականների երեխաները և ցանկանում էի դա նորից իրականություն դարձնել:
Խնդիրն այն է, որ այնտեղ այլևս անալոգային կայաններ չկան, և դա լիովին ի վիճակի չէ կատարել ցանկացած ATSC վերծանում կամ որևէ թվային վերծանում: Ես իսկապես նկատեցի կողային AV միացման առկայությունը և մի քանի ազնվամորու պի էր դրված, այնպես որ ես որոշեցի արկածախնդրության գնալ ՝ պարզելու, թե ինչպես կարող եմ ալիքներ ուղարկել դրան: Ես նույնպես ուզում եմ այն դարձնել սուր տեսք: Ես այն չեմ աշխատի 9-բջջային մարտկոցների վրա, այնպես որ կարող եմ թաքցնել rpi- ն մարտկոցի խցիկում ՝ բազմաթիվ այլ բարիքների հետ միասին:
Քայլ 1: Ստացեք լավ IPTV ցուցակ
IPTV Daily List- ն ունի անվճար iptv կայանների ֆանտաստիկ ընտրություն ՝ կազմակերպված ըստ երկրների: Ընտրեք ընտրված երկիրը և ներբեռնեք m3u ֆայլը:
Այս ծրագրաշարի համար m3u- ն անհրաժեշտ ձևաչափ է: Ձևաչափի առանձնահատկությունների մասին ավելին կարող եք կարդալ այստեղ:
Քայլ 2. Նախնական օրենսգրքի փորձ
Պիթոնի կոդը, որը մենք պատրաստվում ենք գրել, վերլուծում է m3u ֆայլը կայանների ցանկում:
#!/usr/bin/python3
ներմուծել ենթահամակարգ sys- ից import argv դասարան Կայան. def _init _ (self): self.channel = 0 self.name = "" self.address = "" channel_list = with open ('./ us-m3uplaylist-2020-08-) 17-1.m3u ',' r ') որպես m3u: i = 0 տողի համար m3u: if line.startswith ('#EXTINF '): this = Station () this.name = line.split (', ') [1] տող = հաջորդ (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1 process = subprocess. Penen (['vlc', '--loop', '--intf', 'dummy', '-ամբողջական էկրան', channel_list [int (argv [1])]. հասցեն])
Եկեք սա քանդենք:
#!/usr/bin/python3
Սա ասում է bash- ին, որ մենք կօգտագործենք python3- ը այս ֆայլը մեկնաբանելու համար:
ներմուծել ենթահամակարգ sys- ից import argv
Մեզ պետք կլինի ենթամշակման մոդուլը ՝ մեր vlc օրինակը գործարկելու համար, և մեզ անհրաժեշտ կլինի argv ՝ ընտրելու համար, թե որ ալիքով մենք vlc- ն գործարկելու ենք:
դասի կայարան ՝ def _init _ (self): self.channel = 0 self.name = "self.address ="
Սա սահմանում է դաս, որը կոչվում է Station: Յուրաքանչյուր ալիք կունենա ալիքի համար, ալիքի անունը վերցված է m3u ֆայլից և հասցե, որտեղից այդ ալիքը հոսում է:
ալիքների ցանկ =
Սա ցանկ է, որը կպահի m3u ֆայլից վերլուծված բոլոր ալիքները:
բաց ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') որպես m3u: i = 0 տողի համար 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
Այս հանգույցը բացում է m3u երգացանկը և կլանում տվյալները: մեզ հետաքրքրող m3u ֆայլի տողերը սկսվում են #EXTINF- ով, սա ցույց է տալիս երգացանկի ֆայլի նոր մուտք: Հետաքրքրության հաջորդ արժեքը անունն է, որը #EXTINF- ի նույն տողում է, բայց դրանց միջև ստորակետով: Այս կոնկրետ m3u- ի հետևյալ տողը հոսքի հասցեն է: Կիրառվող «i» - ն օգտագործվում է ՝ հաշվելու, թե որ ալիքն է: Այս հանգույցը կրկնում է m3u ամբողջ ֆայլը և լցնում ալիքների ցանկը կայաններով:
ընթացք = ենթապրոցես. Բացեք (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. հասցեն])
ենթամշակման գրադարանը թույլ է տալիս python- ին կանչել գործընթացներ (ծրագրեր) և վերադարձնում PID (Process ID): Սա պիթոնին հնարավորություն է տալիս կառավարել ծրագրերի գործարկումն ու փակումը «ճիշտ» ՝ առանց պատմության ֆայլը լրացնելու կամ թույլ տալու ավելի կամայական կոդի գործարկում ընդհանուր «համակարգային» զանգերով: Պոպենի համար որպես արգումենտ օգտագործվող զանգվածի յուրաքանչյուր տարր նույնքան մուտքագրված է հրամանի տողում:
vlc -loop --intf dummy -ամբողջական էկրանով հասցեներ
Վերոնշյալ հրամանը այն է, ինչ ցանկալի է գործարկել, -loop տարբերակով ՝ հոսքի դադարով որոշ խնդիրներ շտկելիս, երբ հաջորդ հատվածները բեռնվում են (տարօրինակ m3u8 խնդիրներ), - սկսում է տեսանյութը լրիվ էկրանի ռեժիմում (ՈՉ !ԱՆ!), իսկ հասցեն հոսքի հասցեն է: Ինչպես տեսնում եք ծածկագրում, մենք տրամադրում ենք հասցեն ցուցակի ալիքի համարից, որը տրամադրվում է գործարկման ժամանակ argv հայտարարության միջոցով: Պահպանեք այս ֆայլը որպես tv_channels.py, փոխեք պիթոնի ֆայլի տեսացանկի վայրը ՝ ձեր տեսացանկին մատնանշելու համար, և կարող եք գործարկել ծածկագիրը հետևյալ կերպ.
python tv_channels.py
Քայլ 3: Ավելացնել GPIO
Սխեմատիկ պատկերը ցույց է տալիս կոճակների համար օգտագործվող երկու GPIO կապում, և դրանցից յուրաքանչյուրն ունի ձգման դիմադրություն, որը կպահի GPIO- ի քորոցը կոճակը սեղմելուց հետո: Նախկինում սահմանված կոդը կարող է ճշգրտվել ՝ գործողությունը մի փոքր ավելի անթերի դարձնելու համար ՝ ավելացնելով GPIO հնարավորությունը: Սա թույլ է տալիս մեզ փոխել ալիքը կոճակներով, այլ ոչ թե ստեղնաշարի և argv հայտարարություններով, ինչպես իրական հեռուստատեսության համար:
Առաջին բանը, որ պետք է նշել, այն է, որ ես ունեմ հեռուստատեսություն `որպես դասարան: Հեռուստատեսություն լինելու համար մենք պետք է լինենք ընթացիկ ալիքում, ունենանք հնարավոր ալիքների ցանկ և ունենանք ալիքները փոխելու հնարավորություն: Այս օրինակում ալիքների փոփոխման միակ մեթոդը կլինի ալիքների ցանկը վերև տեղափոխելը և ալիքների ցանկը ներքև տեղափոխելը: Երբ ալիքը որոշվի, մենք ստիպված կլինենք VLC- ն սկսել այն ալիքով, որը ցանկանում ենք տեսնել:
#!/usr/bin/python3
ժամանակից ներմուծում քնի ներմուծման ենթամշակման sys ներմուծում argv gpiozero ներմուծման կոճակի դաս կայան. _init _ (self, filename): self.current_channel = 0 self.channel_list = self.build_channel_list (filename) self.start_channel () def build_channel_list (self, filename): with open (filenname, 'r') as m3u: i = 0 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 () բացառությամբ. dummy ',' --fullscreen ', self.channel_list [self.current_channel].հասցե]) սա = Հեռուստատեսություն ('./ us-m3uplaylist-2020-08-17-1.m3u ') channel_UP = Կոճակ (18) channel_DN = Button (23) while True: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down
Կոդի այս կրկնությունը բավականին բարելավումներ ունի: այն այժմ օգտագործում է gpiozero կոչվող մոդուլ, որը պահանջվում է ազնվամորու pi- ի կողմից ՝ GPIO կապում ֆունկցիոնալությունը հեշտությամբ մուտք գործելու համար
sudo apt-get տեղադրել python3-gpiozero
կամ
sudo pip տեղադրել gpiozero
Ինչպես երևում է իմ ծածկագրում, ես ընտրել եմ GPIO 18 և GPIO 23 համապատասխանաբար UP և DOWN ալիքների համար: Gpiozero գրադարանն ունի դասարան կոճակների գործառույթների համար, երբ այն սեղմված է, սեղմված է, երբ պահված է և այլն: Սա բավականին հեշտացնում է այն: Ընտրեցի երբ
Վերջին խոշոր փոփոխությունը «-q» տարբերակի ներառումն է VLC ենթածրագրի զանգում: Սա պարզապես գործարկում է vlc- ն ՝ առանց տերմինալի ամբողջ ելքի, որպեսզի այն պահի խառնաշփոթից, որպեսզի մենք կարողանանք տեսնել ծածկագրում տեղեկատվական տպագիր հայտարարությունները:
Քայլ 4: Ինտեգրեք սարքավորումները `ավելի սուր տեսք ունենալու համար
Ես չեմ հասկացել, թե ինչպես եմ ուզում դա անել, և դա յուրահատուկ լուծում կլինի օգտագործվող յուրաքանչյուր մոդելային հեռուստատեսության համար: Ես պետք է լավ մտածեմ այս մասին և հեռուստացույցի շուրջ փնտրեմ, որ պի համար լավ էներգիայի աղբյուր գտնեմ, երբ համակարգիչը սեղմեմ մարտկոցի հսկայական խցիկի ներսում: Ես նաև մտածեցի ալիքի ընտրության համար օգտագործել ժամացույցի կոճակները, քանի որ դրանք արդեն գեղեցիկ տեղադրված են հեռուստատեսության վրա, իսկ ժամացույցն ամեն դեպքում չի աշխատում: Երբ ես լավ լուծում գտնեմ, ավելի շատ կտեղադրեմ, բայց այստեղ իմ նախագիծը մեծապես կտարբերվի բոլորից: Վայելեք իրական հեռուստատեսության նման IPTV ինտեգրումը:
Քայլ 5: Pi Power
Իմ գտած մոդելային հեռուստատեսության համար այն պահանջում է 12 Վ էլեկտրամատակարարում: Ես զննեցի տախտակի շուրջը, բայց 5V- ի էներգիայի որևէ ակնհայտ կարգավորիչ չտեսա, այնպես որ կայուն էներգիա ստանալու ամենաակնհայտ վայրը տպատախտակն է, որտեղ 12 Վ -ի տակառի միակցիչը գալիս է: Դրա հետ կապված ակնհայտ խնդիր կա. մենք չենք ուզում տապակել pi- ն, ուստի մեզ էներգիայի կարգավորիչ է անհրաժեշտ: Ես ընտրել եմ MP2315 Step-Down Power Converter- ը: Այն կեղտոտ էժան է և օգտագործման համար պարզ: Մենք 12VDC մուտքագրումը կպչենք PCB- ի տակառի միակցիչից փոխարկիչի IN+ և GND կապանքներին, իսկ VO+ - ին ՝ Raspberry Pi- ի 2 -ին, ինչպես նաև GND- ին:
Դրանից առաջ, համոզվեք, որ միացրեք փոխարկիչը և համոզվեք, որ համապատասխան 5V- ը դուրս է գալիս ելքից: Ես ընտրեցի ամենապարզ տարբերակը `ամրացված կարգավորվող լարման հետ: Հարմարվողը կկարգավորի լարումը, այնպես որ ես դիտեցի լարման ելքը մուլտիմետրով, երբ հարմարվողը կարգավորեցի պտուտակահանով:
Քայլ 6: Ուժի ինտեգրում
Հեռուստացույցի շուրջը պտտվելուց հետո որոշվեց, որ էլեկտրաէներգիա խլելու լավագույն վայրը բարելի միակցիչի բացասականն է և հեռուստատեսության ON/OFF անջատիչը, ինչը նշանակում է, որ մենք կարող ենք միացնել և անջատել հոսքերը հեռուստատեսությամբ, այլ ոչ թե անընդհատ սնուցելով pi- ն ՝ ուղղակիորեն քաշելով տակառի միակցիչից:
Հաղորդալարերը կպցվեցին և սնուցվեցին պատյանի կողքին գտնվող PCB- ի կողքով, մինչև որ հասան սարքի հետևի մաս, որտեղ սնվեցին մարտկոցի խցիկի հետևի անցքից: Երբ նրանք սնվեն, մենք կարող ենք պատրաստել մալուխի ծայրերը և դրանք զոդել էներգիայի կարգավորիչին: Ես այն կարգաբերեցի 5 Վ լարման համար, որպեսզի սնուցի pi- ն և դրան ամրացնեմ վերնագրի քորոցները, որպեսզի մենք կարողանանք էգ կարգավորիչից իգական սեռի թռիչքներ կատարել անմիջապես pi- ի GPIO վերնագրերի հավաքածուի վրա: Սովորաբար դա խորհուրդ չի տրվում, քանի որ pi- ն, ընդհանուր առմամբ, էներգիա է ստանում UBS- ի միջոցով, որն ունի կարգավորիչ `5V- ը պայմանավորելու համար, բայց քանի որ հոսանքը արդեն կարգավորվում է, այն պետք է լավ լինի:
Աուդիո գծերի վրա որոշակի աղմուկ է բարձրանում, քանի որ համակարգում կա հիմքային հանգույց: Ես փորձեցի շատ ուժային և գրունտային կետեր ամբողջ տախտակի վրա ՝ հեշտ պատասխանի ակնկալիքով, բայց ոչ մեկը չգտա: Ես նաև միացրեցի microUSB մալուխը անջատված ռեժիմի կարգավորիչին ՝ տեսնելու, թե արդյոք pi- ի ներքին կարգավորիչների միջոցով հոսանքը ստիպելը կլուծի խնդիրը: Դա չեղավ: Լուծումը լինելու է ձայնային գրունտի մեկուսացման տրանսֆորմատորների մեջ: Սրանք ավելի շուտ պատվիրված էին, քան կառուցված, քանի որ դրանք էժան են և գեղեցիկ փաթեթավորված: Դուք կարող եք դրանք վերցնել ավտո աուդիո խանութների կամ բաժանմունքներից շատերից: Սա այն է, ինչ ես ընտրեցի:
Քայլ 7: Երկարաժամկետ կոճակի լուծում
Անկասկած, կոճակները չեն մնա սեղանի վրա, ուստի պետք է ավելի մշտական լուծում գտնել: Ես վերցրեցի մի հին նախատախտակ և միացանկը գցեցի վերնագրի որոշ կապերի հետ ՝ ազդանշաններին հասանելի դարձնելու համար: Այստեղ է, որ բոլորը տարբեր կարծիքներ կունենան կոճակները ամրացնելու կամ ամրացնելու վերաբերյալ: Ես ընտրում եմ դրանք նախատախտակի վրա դնել և ուղղակի ամրացնել դրանք շասսիին այնպես, որ բռնակը, որը պտտվում է էկրանի վրայով, չխանգարի: Ազատ զգալ դիզայնը `ավելացնելով 3d տպված պատյան, որը հարթեցնում է ամրացումը, օգտագործեք ընկույզներ և պտուտակներ, շքեղ սոսինձներ, ինտեգրված բնօրինակ կոճակներ, ինչ էլ որ լինի: Քանի դեռ այն աշխատում է, սխալ պատասխաններ չկան:
Դրանք կտեղադրվեն պատյանի արտաքին մասում, և Raspberry Pi- ն կպցվի մարտկոցների շատ ընդարձակ խցիկի ներսում, ուստի անհրաժեշտ կլինի մի փոքր անցք բացել, որը թույլ կտա մալուխներին դուրս գալ մարտկոցի խցիկից:
Քայլ 8: Վերջնական համապատասխանության ստուգում
Ամբողջ սարքավորումները պետք է ստուգվեն վերջին անգամ `ճշգրիտ տեսնելու համար, թե որտեղ են պետք անցքերը կատարել շասսիի վրա, և ինչ չափի անցքեր և այլն: Բացի այդ, պետք է հաշվի առնել, թե որտեղ տեղադրել բաղադրիչները `կապի և հասանելիության օպտիմալ հեշտության համար: Կարճ ասած, համոզվեք, որ ամեն ինչ տեղավորվում է այնտեղ, որտեղ կարծում եք, որ այն անուղղելիորեն վնասում է ձեր նախագիծը և ստիպված եք դուրս հանել բեկորը:
Քայլ 9. Վերջնական ինտեգրում
Այժմ ամբողջ սարքավորումն այնտեղ է, որտեղ անհրաժեշտ է, և ամեն ինչ նույնքան հարմար է, որքան գորգի սխալը: Եկեք կտրենք իրերը: Մարտկոցի խցիկի վրա ես գտա մի վայր, որտեղ ես կարող էի դուրս մղել AV մալուխները ՝ օգտագործելով պլաստիկի մեջ փոքր խորշ: Ես այն մանրացրեցի նստարանային սրիչով: Դա բավականին կարճ աշխատանք տվեց: Ես ավելի շատ պլաստմասսա մանրացնելու համար օգտագործեցի դրեմել, որպեսզի այն բավականին լավ տեղավորվի մալուխների համար:
Վերջին բաղադրիչը ալիքի ընտրիչն է: Ես մի փոքր անցք բացեցի մարտկոցի խցիկում և հեռացրի վերնագրի մալուխները դրանից մեկ առ մեկ: Կոճակները միացված էին իրար, և ես նախատախտակը ամրացրեցի պլաստիկ շասսիին ՝ երկու կիսավարտիքով սոսնձված թավշի երկու կեսով: Ես հասկանում եմ, որ դրա համար կար մոտ 1200 ավելի լավ եղանակ, բայց դա աշխատեց, և ես ունեի այն ամենը, ինչ ինձ պետք էր:
Քայլ 10: Վայելեք ձեր Vintage IPTV- ն
Դա մոտավորապես ամփոփում է: Գտեք շոուներ և զվարճացեք դիտելով: Այնուամենայնիվ, շատ մոտ մի նստեք: Ուղեղդ կփչացնես:
Այս նախագիծը բարելավելու շատ տեղ կա, այնպես որ այն տարեք այն ուղղությամբ, ինչ ցանկանում եք, բայց զվարճալի էր հասնել այստեղ: Ինչ վերաբերում է ինձ, ապա այն գործարկում եմ cronjob- ից reboot- ի ժամանակ, այնպես որ stdout- ը չի գրավում պիթոնի սցենարի հաղորդագրությունները: Ես կցանկանայի դա շտկել, որպեսզի իմանամ, թե որ ալիքում եմ: Մեկ այլ լավ հավելում է Pi- ի անլար ստեղնաշարի դոնգը: Սա թույլ կտա փոխել wifi ցանցը, եթե ձեր տնից հեռանաք հեռուստատեսությամբ: Անկախ նրանից: դա զվարճալի նախագիծ էր, և ես անհամբերությամբ սպասում եմ հաջորդի մեկնարկին:
Խորհուրդ ենք տալիս:
Retro Arcade - (Full Size Powered by Raspberry Pi) ՝ 8 քայլ
Retro Arcade - (Full Size Powered by Raspberry Pi). Սկզբում ուզում էի շնորհակալություն հայտնել ձեզ այս Retro Arcade համակարգի կառուցման ուղեցույցը դիտելու համար: Ես վերցնում եմ ավելի հին արկադային տուփ և տեղադրում այն առանձին կաբինետում ՝ 24 դյույմանոց լայն էկրանով մոնիտորով: Այս ուղեցույցի չափումները դժվար է տալ
Retro «Rayotron» գիշերային լույս (մաս 1) ՝ 16 քայլ
Retro «Rayotron» գիշերային լույս (մաս 1). Ներածություն 1956 թվականի դեկտեմբերին Atomic Laboratories– ը գովազդեց Rayotron– ը որպես «Առաջին ցածրարժեք էլեկտրաստատիկ գեներատոր և մասնիկների արագացուցիչ» ՝ բնագիտության ուսուցիչների և հոբբիստների համար [1]: Rayotron- ը գեր չափի, ռետինե ժապավենով լիցքավորված էր
Retro CP/M Stand Alone Emulator: 8 քայլ
Retro CP/M Stand Alone Emulator. Այս նախագիծը օգտագործում է VGA32 ESP v1.4 մոդուլը ՝ համակցություն գործարկելու համար, կամ RunCPM և FabGL ՝ առանձին համակարգիչ ՝ CP/M 2.2 համարժեք համակարգով ապահովելու համար: Հանրաճանաչ 1980 -ականներին որպես փոքր համակարգիչների օպերացիոն համակարգ: Կարող եք վերադառնալ
Ձայնային թռիչք Arduino Uno- ի հետ Քայլ առ քայլ (8 քայլ) `8 քայլ
Ձայնային թռիչք Arduino Uno- ի հետ Քայլ առ քայլ (8 քայլ). Ուլտրաձայնային ձայնային փոխարկիչներ L298N Dc կանացի ադապտեր էներգիայի մատակարարում արական dc pin Arduino UNOBreadboard և անալոգային նավահանգիստներ ՝ կոդը փոխարկելու համար (C ++)
Cedar (Cigar?) Box Բարձրախոս Box: 8 քայլ (նկարներով)
Cedar (Cigar?) Box Speaker Box: Ոգեշնչված Munny- ի բարձրախոսներից, բայց պատրաստ չլինելով ծախսել ավելի քան 10 դոլար, ահա իմ ուսուցումը `օգտագործելով հին համակարգչային բարձրախոսներ, փայտե տուփ տնտեսագիտության խանութից և շատ տաք սոսինձ: