Mundarija:

Retro idiot qutisi: 10 qadam
Retro idiot qutisi: 10 qadam

Video: Retro idiot qutisi: 10 qadam

Video: Retro idiot qutisi: 10 qadam
Video: BUNDAY TEZLIKNI TASAVVUR QILISH QIYIN / TOP 10 AVTOMOBILLAR ENG ZO'RLARINING ZO'RLARI 2024, Iyul
Anonim
Retro idiot qutisi
Retro idiot qutisi

Men 1984 yildagi eski Magnavox ko'chma televizorini mahalliy do'kon do'konida tokchada o'tirganini topdim. Men o'zimcha: "Oh NEAT!" Tekshiruvdan so'ng, men uning narxi 15 dollarni ko'rdim, shuning uchun men uni uyga olib borib, undan biror narsa yasashga qaror qildim. Men eslayman, bolaligimda oq -qora rangdagi ulug'vor mumtozlarning takrorini ko'rdim va buni yana haqiqatga aylantirmoqchi edim.

Muammo shundaki, endi analog stantsiyalar yo'q va bu ATSC kodini yoki raqamli dekodlashni amalga oshira olmaydi. Men yon tomonda AV aloqasi borligini payqadim va bir nechta malina pi qo'ygan edim, shuning uchun men kanallarni qanday uzatishni bilish uchun sarguzashtni boshlashga qaror qildim. Men ham uni aniq qilib ko'rsatmoqchiman. Men uni 9 ta D-batareyali batareyalarda ishlatmayman, shuning uchun men rpi-ni batareya bo'linmasida boshqa ko'plab shirinliklar bilan yashira olaman.

1 -qadam: Yaxshi IPTV ro'yxatini oling

Yaxshi IPTV ro'yxatini oling
Yaxshi IPTV ro'yxatini oling

Kundalik IPTV ro'yxatida mamlakatlar tomonidan tashkil etilgan bepul iptv stantsiyalarining ajoyib tanlovi mavjud. Siz tanlagan mamlakatni tanlang va m3u faylini yuklab oling.

Bu erda mavjud bo'lgan dasturiy ta'minot uchun m3u - bu kerakli format. Bu erda formatning o'ziga xos xususiyatlari haqida ko'proq o'qishingiz mumkin.

2 -qadam: Kodning dastlabki tajribasi

Biz yozmoqchi bo'lgan python kodi m3u faylini bekatlar ro'yxatiga ajratadi.

#!/usr/bin/python3

sys import argv sinfidan pastki jarayonni import qilish Station: def _init _ (self): self.channel = 0 self.name = '' self.address = 'channel_list = with open ('./ us-m3uplaylist-2020-08-) 17-1.m3u ',' r ') sifatida m3u: i = 0 m3u satr uchun: agar line.startswith ('#EXTINF '): this = Station () this.name = line.split (', ') [1] qator = keyingi (m3u) bu.adress = line.strip () bu.kanal = i channel_list.append (bu) i = i + 1 jarayon = pastki jarayon. Ochiq (['vlc', '--loop'], '--intf', 'qo'g'irchoq', '-to'liq ekran', kanallar ro'yxati [int (argv [1])]. manzil])

Keling, buni buzib tashlaylik.

#!/usr/bin/python3

Bu bashga bu faylni talqin qilish uchun python3 ishlatilishini bildiradi.

sys import argv dan pastki jarayonni import qilish

Vlc misolini ishga tushirish uchun bizga subprocess moduli kerak bo'ladi va vlc -ni qaysi kanalga ishga tushirishni tanlash uchun argv kerak bo'ladi.

sinf bekati: def _init _ (self): self.channel = 0 self.name = "self.address ="

Bu Station deb nomlangan sinfni belgilaydi. Har bir kanalda kanal raqami, m3u faylidan olingan kanal nomi va kanal qayerdan oqayotgani ko'rsatiladi.

channel_list =

Bu m3u faylidan ajratilgan barcha kanallarni saqlaydigan ro'yxat.

ochiq ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') bilan m3u: i = 0 m3u satr uchun: agar line.startswith ('#EXTINF'): bu = bekat () this.name = line.split (',') [1] line = keyingi (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1

Bu tsikl m3u pleylistini ochadi va ma'lumotlarni o'z ichiga oladi. bizni qiziqtirgan m3u fayl satrlari #EXTINF bilan boshlanadi, bu pleylist fayliga yangi yozuvni ko'rsatadi. Qiziqishning keyingi qiymati - bu #EXTINF bilan bir qatorda, lekin ular orasida vergul qo'yilgan ism. Ushbu m3u -ning keyingi qatori oqimning manzili. Qaysi kanal ekanligini hisoblash uchun "i" iteratori ishlatiladi. Bu tsikl butun m3u fayli bo'ylab takrorlanadi va kanallar ro'yxatini stantsiyalar bilan to'ldiradi.

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

kichik jarayonlar kutubxonasi pythonga jarayonlarni (dasturlarni) chaqirishga imkon beradi va PID (Process ID) ni qaytaradi. Bu pythonga tarix faylini to'ldirmasdan yoki o'zboshimchalik bilan kodni umumiy "tizim" qo'ng'iroqlari bilan ishlatishga ruxsat bermasdan, dasturlarni "to'g'ri" ishga tushirish va yopishni boshqarish imkoniyatini beradi. Popenga argument sifatida ishlatiladigan qatorning har bir elementi buyruq satrida yozilgandek.

vlc --loop --intf qo'g'irchoqli -to'liq ekranli manzillar

Yuqoridagi buyruq bajarilishi kerak bo'lgan narsa, -Loop opsiyasi, keyingi qismlar yuklansa (g'alati m3u8 muammolari), --intf qo'g'irchoq vlcni interfeyssiz ishga tushiradi, faqat ekran, -to'liq ekran videoni to'liq ekran rejimida ishga tushiradi (YO'L YO'Q!), va manzil - oqim manzili. Kodda ko'rib turganingizdek, biz manzilni ro'yxatning kanal raqamidan beramiz, u argv operatori orqali ish vaqtida ko'rsatiladi. Bu faylni tv_channels.py sifatida saqlang, python faylidagi ijro ro'yxati o'rnini pleylistingizga ko'rsatish uchun o'zgartiring va siz kodni quyidagicha ishga tushirishingiz mumkin:

python tv_channels.py

3 -qadam: GPIO qo'shing

GPIO qo'shish
GPIO qo'shish
GPIO qo'shish
GPIO qo'shish

Sxemada tugmalar uchun ishlatilayotgan ikkita GPIO pimi ko'rsatilgan va ularning har birida tugma bosilgandan keyin GPIO pinini yuqori ushlab turish uchun tortish qarshiligi mavjud. GPIO imkoniyatlarini qo'shib, operatsiyani biroz uzluksiz qilish uchun oldindan belgilangan kodni takomillashtirish mumkin. Bu bizga kanalni klaviatura va argv so'zlari o'rniga tugmalar yordamida o'zgartirishga imkon beradi.

E'tibor beradigan birinchi narsa shundaki, menda televizor sinf sifatida belgilangan. Televizor bo'lish uchun biz hozirgi kanalda bo'lishimiz, mumkin bo'lgan kanallar ro'yxatiga ega bo'lishimiz va kanallarni o'zgartirish qobiliyatiga ega bo'lishimiz kerak. Bu misolda kanallarni o'zgartirishning yagona usuli kanallar ro'yxatini yuqoriga ko'tarish va kanallar ro'yxatini pastga siljitish bo'ladi. Kanal qaror chiqarilgandan so'ng, biz ko'rmoqchi bo'lgan kanalda VLC -ni ishga tushirishimiz kerak bo'ladi.

#!/usr/bin/python3

vaqtdan boshlab uyquni import qilishning pastki jarayonini sys importidan argv gpiozero importidan Button klassi Station: def _init _ (self): self.channel = 0 self.name = "self.address =" self.process = "class Television: def _init _ (o'zini, fayl nomi): self.current_channel = 0 self.channel_list = self.build_channel_list (fayl nomi) self.start_channel () def build_channel_list (o'zini, fayl nomi): ochiq (fayl nomi, 'r') bilan m3u: i M3u satr uchun = 0: 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 (): harakat qilib ko'ring: self.process. kill () tashqari: pass print ('boshlang'ich kanal % d' % self.current_channel) self.process = subprocess. Popen (['vlc', '-q', '--loop', '--intf', ' qo'g'irchoq ','-to'liq ekran ', self.channel_list [self.current_channel].adress]) this = Televidenie ('./ us-m3uplaylist-2020-08-17-1.m3u ') channel_UP = Button (18) channel_DN = Tugma (23) rost bo'lsa: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

Kodning bu iteratsiyasi bir qancha yaxshilanishlarga ega. endi u GPIO pinlarining ishlashiga oson kirish uchun malina pi talab qiladigan gpiozero modulidan foydalangan.

sudo apt-get install python3-gpiozero

yoki

sudo pip o'rnatish gpiozero

Mening kodimda ko'rinib turibdiki, men kanal UP va DOWN kanali uchun GPIO 18 va GPIO 23 ni tanladim. Gpiozero kutubxonasida tugmalar funktsiyalari uchun yaxshi sinf bor, qachon bosilsa, is_pressed bo'lsa, qachon saqlansa va hokazo. Bu ishni osonlashtiradi. When_pressed ni tanladim, bu signal aniqlanganda qayta ishlash funktsiyasini bildiradi.

Oxirgi katta o'zgarish -VLC subprocess chaqiruviga '-q' variantini kiritish. Bu vlc -ni terminalda hech qanday chiqishlarsiz ishlaydi, shunda biz koddagi ma'lumotli bosma bayonotlarni ko'rishimiz mumkin.

4 -qadam: O'tkir ko'rinish uchun uskunani birlashtiring

O'tkir ko'rinish uchun uskunani birlashtiring
O'tkir ko'rinish uchun uskunani birlashtiring
O'tkir ko'rinish uchun uskunani birlashtiring
O'tkir ko'rinish uchun uskunani birlashtiring
O'tkir ko'rinish uchun uskunani birlashtiring
O'tkir ko'rinish uchun uskunani birlashtiring

Men buni qanday amalga oshirishni xohlayotganimni tushunmadim va bu har bir televizor uchun o'ziga xos echim bo'ladi. Men bu haqda yaxshilab o'ylab ko'rishim va kompyuterni katta batareya bo'linmasiga siqib qo'yganimdan so'ng, pi uchun yaxshi quvvat manbasini topish uchun televizor atrofini tekshirishim kerak. Men kanal tanlash uchun soat tugmachalarini ishlatishni ham o'ylab qoldim, chunki ular televizorda juda chiroyli joylashtirilgan va baribir soat ishlamaydi. Men yaxshi echim topsam, ko'proq xabar yozaman, lekin bu erda mening loyiham boshqalardan farq qiladi. Haqiqiy televizorga o'xshash IPTV integratsiyasidan rohatlaning!

5 -qadam: Pi quvvati

Pi kuchi
Pi kuchi

Men topgan model televizor uchun 12V quvvat manbai kerak. Men taxtani sinab ko'rdim, lekin 5V uchun aniq quvvat regulyatorlarini ko'rmadim, shuning uchun barqaror quvvat manbaini olish uchun eng aniq joy - 12V uchun barrel ulagichi keladigan elektron platada. Bu erda aniq muammo bor.. biz pi qovurishni xohlamaymiz, shuning uchun bizga quvvat regulyatori kerak bo'ladi. Men MP2315 pastga tushadigan quvvat konvertorini tanladim. Bu axloqsizlik arzon va ulardan foydalanish oson. Biz 12VDC kirishini PCBdagi barrel ulagichidan konvertorning IN+ va GND pinlariga, VO+ ni esa Raspberry Pi -ga 2 -pinli, shuningdek GND -ga lehimlaymiz.

Buni amalga oshirishdan oldin, konvertorni yoqing va to'g'ri 5V chiqishidan chiqishiga ishonch hosil qiling. Men sozlanishi kuchlanishli sim bilan eng oddiy variantni tanladim. Trimmer kuchlanishni to'g'rilaydi, shuning uchun men tornavida bilan trimmerni sozlaganimdek, multimetr bilan kuchlanish chiqishini kuzatdim.

6 -qadam: quvvatni birlashtirish

Quvvatni birlashtirish
Quvvatni birlashtirish
Quvvatni birlashtirish
Quvvatni birlashtirish
Quvvatni birlashtirish
Quvvatni birlashtirish

Televizor atrofini o'rganib chiqqandan so'ng, elektr uzatish uchun eng yaxshi joy - bu barrel konnektori va televizorni yoqish/o'chirish manfiyidir, demak biz televizor orqali oqimlarni yoqish va o'chirishimiz mumkin. to'g'ridan -to'g'ri barrel ulagichidan tortib, pi -ni doimiy ravishda quvvatlantirish.

Simlar korpus yonidagi PCB yonbag'ri bo'ylab lehimlangan va oziqlangan, ular batareyaning bo'linmasining orqa qismidagi teshikdan uzatilgan. Ular oziqlantirilgandan so'ng, biz kabelning uchlarini tayyorlab, quvvat regulyatoriga lehimlashimiz mumkin. Men uni 5V ga sozladim va unga pinlarni lehimladim, shunda biz quvvat regulyatoridan urg'ochi -ayollarga to'g'ridan -to'g'ri pi -ning GPIO sarlavhasi to'plamiga o'tishimiz mumkin. Odatda bu tavsiya qilinmaydi, chunki pi odatda 5V kuchlanishli regulyatorga ega bo'lgan UBS orqali quvvat oladi, lekin quvvat allaqachon tartibga solinganligi uchun yaxshi bo'lishi kerak.

Ovoz liniyalarida shovqin bor, chunki tizimda tuproqli pastadir mavjud. Men osonlikcha javob berishni umid qilib, butun kuch -quvvat nuqtalarini sinab ko'rdim, lekin topmadim. Men, shuningdek, microUSB kabelini ulangan rejim regulyatoriga lehimlab, pi -ning ichki regulyatorlari orqali kuch ishlatish muammoni hal qilishini bilib oldim. Yo'q. Yechim ba'zi ovozli izolyatsiyali transformatorlarda bo'ladi. Bular qurishdan ko'ra buyurtma qilingan, chunki ular arzon va yaxshi qadoqlangan. Siz ularni ko'pgina audio audio do'konlar yoki bo'limlardan olishingiz mumkin. Bu men tanlagan narsa.

7 -qadam: Uzoq muddatli tugma echimi

Uzoq muddatli tugmachali yechim
Uzoq muddatli tugmachali yechim
Uzoq muddatli tugmachali yechim
Uzoq muddatli tugmachali yechim

Shubhasiz, tugmalar non taxtasida qolmaydi, shuning uchun doimiyroq echim bo'lishi kerak. Men eski protobardni oldim va signallarga kirishni osonlashtirish uchun sxemani bir nechta bosh pimlari bilan birga tashladim. Bu erda hamma tugmachalarni qanday ulash yoki o'rnatish haqida har xil fikrda bo'ladi. Men ularni protoboard qilishni tanlayman va ularni shassiga mahkamlayman, shunda ekranni aylanib o'tadigan dastasi xalaqit bermaydi. O'rnatishni yumshatadigan, yong'oq va murvatlardan, chiroyli yopishtiruvchi materiallardan, asl tugmachalarni birlashtiradigan 3D bosma qutini qo'shib, dizaynni bezatib qo'ying. Ishlayotgan ekan, hech qanday noto'g'ri javob yo'q.

Ular korpusning tashqarisiga o'rnatiladi va Raspberry Pi juda keng akkumulyator bo'linmasiga joylashtiriladi, shuning uchun kabellar batareyalar bo'linmasidan chiqib ketishi uchun kichik teshik ochilishi kerak.

8 -qadam: yakuniy moslikni tekshirish

Yakuniy tekshiruv
Yakuniy tekshiruv

Barcha asbob -uskunalar oxirgi marta tekshirilishi kerak, shassiga qanday teshiklar qo'yilishi kerakligini, qanday o'lchamdagi teshiklarni va hokazolarni aniq ko'rish kerak. Bundan tashqari, ulanish va kirishni optimallashtirish uchun komponentlarni qaerga joylashtirish kerakligini ko'rib chiqish kerak. Qisqacha aytganda, hamma narsa siz o'ylagan joyga mos kelishiga ishonch hosil qiling, shunda siz o'zingizning loyihangizga tuzatib bo'lmaydigan darajada zarar etkazasiz va uni olib tashlashingiz kerak bo'ladi.

9 -qadam: Yakuniy integratsiya

Yakuniy integratsiya
Yakuniy integratsiya
Yakuniy integratsiya
Yakuniy integratsiya
Yakuniy integratsiya
Yakuniy integratsiya

Endi barcha jihozlar kerak bo'ladigan joyda va hamma narsa gilamdagi xatoga o'xshaydi. Keling, narsalarni kesib tashlaylik! Men batareyaning bo'linmasidagi joyni aniqladim, u erda plastmassadagi kichik chiziq yordamida AV kabellarini yo'naltirishim mumkin. Men uni maydalagich bilan maydalab qo'ydim. Bu juda qisqa ish qildi. Kabellarga juda mos bo'lishi uchun men ko'proq plastmassani maydalash uchun dremel ishlatardim.

Oxirgi komponent - kanal tanlash. Men batareya bo'linmasida kichik bir teshik ochdim va sarlavha kabellarini birma -bir chiqarib oldim. Tugmalar bir-biriga ulangan va men protobardni plastik shassisga ikkita yarmini oldindan yopishtirilgan velkro bilan biriktirdim. Men shuni tushunamanki, buni qilishning 1200 ga yaqin yaxshiroq yo'li bor edi, lekin bu ishladi va menda hamma narsa kerak edi.

10 -qadam: Sizning vintage IPTV -dan rohatlaning

Vintage IPTV -dan rohatlaning
Vintage IPTV -dan rohatlaning
Vintage IPTV -dan rohatlaning
Vintage IPTV -dan rohatlaning
Vintage IPTV -dan rohatlaning
Vintage IPTV -dan rohatlaning

Xulosa qilib aytganda. Shoularni toping va tomosha qiling. Biroq, juda yaqin o'tirmang. Siz miyangizni chiritasiz!

Bu loyihani takomillashtirish uchun juda ko'p joy bor, shuning uchun uni xohlagan tomonga olib boring, lekin bu erga borish juda qiziq edi. Menga kelsak, men buni qayta ishga tushirishda cronjobdan ishga tushiraman, shuning uchun stdout python skriptidan xabarlarni olmaydi. Men buni tuzatmoqchiman, shuning uchun men qaysi kanalda ekanligimni bilaman. Yana bir yaxshi qo'shimcha - bu simsiz klaviatura qulfi. Agar siz uyingizni televizor bilan tark etsangiz, Wi -Fi tarmog'ini o'zgartirishingiz mumkin. Nima bo'lishidan qat'iy nazar. Bu qiziqarli loyiha edi va men keyingisini boshlashni sabrsizlik bilan kutaman.

Tavsiya: