Mündəricat:
- Addım 1: Yaxşı bir IPTV Siyahısı alın
- Addım 2: İlkin Kod Təcrübəsi
- Addım 3: GPIO əlavə edin
- Addım 4: Kəskin Görünmək üçün Avadanlığı İnteqrasiya edin
- Addım 5: Pi Power
- Addım 6: Gücün inteqrasiyası
- Addım 7: Uzun müddətli düymə həlli
- Addım 8: Son uyğunluq yoxlanışı
- Addım 9: Son inteqrasiya
- Addım 10: Vintage IPTV -dən həzz alın
Video: Retro İdiot Qutu: 10 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:43
1984 -cü il istehsalı olan köhnə Magnavox portativ televizorunu yerli qənaət mağazamda rəfdə oturmuş halda tapdım. Öz -özümə düşündüm: "NEAT!" Əlavə müayinə etdikdən sonra üzərində 15 dollarlıq bir qiymət etiketi gördüm, buna görə də onu evə aparmağa və içindən dadlı bir şey hazırlamağa qərar verdim. Yadımdadır ki, bütün böyük klassiklərin şanlı qara -ağ rəngli uşaqlıq illərində təkrar oxuduğumu xatırlayıram və bunu yenidən gerçəkləşdirmək istəyirdim.
Problem ondadır ki, artıq orada heç bir analoq stansiya yoxdur və bu, heç bir ATSC kodlaşdırma və ya hər hansı bir rəqəmsal kod açma qabiliyyətinə malik deyil. Yan tərəfdə bir AV bağlantısı olduğunu gördüm və ətrafına bir neçə moruq pi qoydum, buna görə kanalları buna necə ötürə biləcəyimi başa düşmək üçün bir macəraya başlamağa qərar verdim. Mən də onu kəskin göstərmək istəyirəm. 9 D-hüceyrəli batareyada işləməyəcəyəm, buna görə də rpi-ni batareya bölməsində bir çox başqa gözəlliklə gizlədə bilərəm.
Addım 1: Yaxşı bir IPTV Siyahısı alın
Gündəlik IPTV Siyahısında ölkə tərəfindən təşkil edilən pulsuz iptv stansiyalarının fantastik bir seçimi var. Seçdiyiniz ölkəni seçin və m3u faylını yükləyin.
Bunun içərisində olan proqramlar üçün m3u lazımlı bir formatdır. Formatın xüsusiyyətləri haqqında daha çox məlumatı buradan oxuya bilərsiniz.
Addım 2: İlkin Kod Təcrübəsi
Yazacağımız python kodu m3u faylını stansiyalar siyahısına ayırır.
#!/usr/bin/python3
sys idxal argv sinifindən alt proses idxal edin Station: def _init _ (self): self.channel = 0 self.name = '' self.address = '' channel_list = with open ('./ us-m3uplaylist-2020-08- 17-1.m3u ',' r ') m3u olaraq: i = 0 m3u-dakı xətt üçün: if line.startswith ('#EXTINF '): this = Station () this.name = line.split (', ') [1] sətir = sonrakı (m3u) bu.address = line.strip () bu.kanal = i kanal_listi.əld edin (bu) i = i + 1 proses = alt proses. Açın (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. ünvan])
Gəlin bunu parçalayaq.
#!/usr/bin/python3
Bu, bash'a bu faylı şərh etmək üçün python3 istifadə edəcəyimizi bildirir.
sys idxal argv alt proqramını idxal edin
Vlc nümunəmizi işə salmaq üçün alt proses moduluna ehtiyacımız olacaq və vlc -ni hansı kanalda işə salacağımızı seçmək üçün argv -ə ehtiyacımız olacaq.
sinif Station: def _init _ (öz): self.channel = 0 self.name = '' self.address = ''
Bu, Station adlı bir sinfi təyin edir. Hər bir kanalın kanal nömrəsi, m3u faylından alınan kanalın adı və kanalın axdığı yerin ünvanı olacaq.
channel_list =
Bu m3u faylından ayrılan bütün kanalları saxlayacaq bir siyahıdır.
açıq ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') ilə m3u: i = 0 m3u-dakı xətt üçün: əgər line.startswith ('#EXTINF'): bu = Stansiya () this.name = line.split (',') [1] line = next (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1
Bu loop m3u çalğı siyahısını açır və məlumatları daxil edir. maraqlandığımız m3u fayl xətləri #EXTINF ilə başlayır, bu çalğı siyahısı faylına yeni bir giriş olduğunu göstərir. Növbəti faiz dəyəri #EXTINF ilə eyni sətirdə, lakin aralarında vergül qoyulan addır. Bu xüsusi m3u -nun aşağıdakı xətti axının ünvanıdır. Hansı kanalın olduğunu saymaq üçün istifadə olunan "i" iteratoru var. Bu döngü bütün m3u faylını təkrarlayır və channel_listi stansiyalarla doldurur.
proses = subprocess. Popen (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])] ünvan ünvanı))
alt proses kitabxanası, pythonun proseslərə (proqramlara) zəng etməsinə imkan verir və PID (Process ID) qaytarır. Bu, pythonun tarix faylını doldurmadan və ya daha çox ixtiyari kodun ümumi "sistem" zəngləri ilə işləməsinə icazə vermədən proqramların "düzgün" işə salınmasını və bağlanmasını idarə etməsinə imkan verir. Popen üçün bir arqument olaraq istifadə olunan hər bir element, əmr satırında yazıldığı kimidir.
vlc --loop --intf dummy --fullscreen ünvanları
Növbəti hissələr yüklənərkən (qəribə m3u8 problemləri), --intf dummy interfeys olmadan vlc -ə başlayır, sadəcə bir ekran, videonu tam ekran rejimində işə salır (YOL YOX!) və ünvan axının ünvanıdır. Kodda görə biləcəyiniz kimi, siyahıdakı kanal nömrəsindən ünvanı təmin edirik, bu da argv ifadəsi ilə iş vaxtı verilir. Bu faylı tv_channels.py olaraq qeyd edin, çalğı siyahınızı göstərmək üçün python faylındakı çalğı siyahısının yerini dəyişdirin və kodu aşağıdakı kimi işlədə bilərsiniz:
python tv_channels.py
Addım 3: GPIO əlavə edin
Şemada düymələr üçün istifadə olunan iki GPIO sancağı göstərilir və hər birinin düyməni basıldıqdan sonra GPIO pinini yuxarı çəkmək üçün çəkmə müqaviməti var. Daha əvvəl təyin edilmiş kod, GPIO qabiliyyəti əlavə edərək əməliyyatı bir az daha problemsiz etmək üçün təmizlənə bilər. Bu, kanalı klaviatura və argv ifadələri ilə deyil, düymələr ilə dəyişdirməyə imkan verir.
Diqqət etməli olduğunuz ilk şey, televizorun bir sinif olaraq təyin edilməsidir. Televiziya olmaq üçün cari bir kanalda olmalıyıq, mümkün kanalların siyahısına sahib olmalı və kanalları dəyişdirmə qabiliyyətinə malik olmalıyıq. Bu nümunədə, kanalları dəyişdirməyin yeganə yolu kanal siyahısını yuxarı qaldırmaq və kanal siyahısını aşağıya endirmək olacaq. Kanal qərar verildikdən sonra görmək istədiyimiz kanalda VLC -yə başlamalı olacağıq.
#!/usr/bin/python3
vaxtdan idxal yuxu idxal alt prosesi gpiozero idxalından sys idxal argv Button class Station: def _init _ (self): self.channel = 0 self.name = '' self.address = '' self.process = '' class Televiziya: def _init _ (özünü, fayl adı): self.current_channel = 0 self.channel_list = self.build_channel_list (fayl adı) self.start_channel () def build_channel_list (öz, fayl adı): açıq (fayl adı, 'r') ilə m3u: i M3u -dakı xətt üçün = 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 self.current_channel <0: self.current_channel = 0 self.start_channel () def start_channel (): cəhd edin: self.process. kill () istisna olmaqla: keçid çapı ('başlanğıc kanal % d' % özünü.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 = Düymə (23) Doğru olarkən: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down
Kodun bu iterasiyası kifayət qədər təkmilləşdirmələrə malikdir. indi GPIO pinlərinin funksionallığına asanlıqla daxil olmaq üçün moruq pi tərəfindən tələb olunan gpiozero adlı bir moduldan istifadə etdi.
sudo apt-get python3-gpiozero quraşdırın
və ya
sudo pip gpiozero quraşdırın
Kodumda göründüyü kimi, kanal UP və kanal DOWN üçün GPIO 18 və GPIO 23 seçdim. Gpiozero kitabxanasında düymələr funksiyaları üçün gözəl bir sinif var zaman_basın, is_pressed, saxlandıqda və s. Bu olduqca asanlaşdırır. Bu siqnal aşkar edildikdə işə salınacaq geri çağırma funksiyasına aid olan zaman_basın seçdim.
Son böyük dəyişiklik, VLC alt proses çağırışına '-q' seçiminin daxil edilməsidir. Bu, koddakı məlumatlı çap bəyanatlarını görə bilməyimiz üçün yığışdırılmaması üçün terminalın bütün çıxışı olmadan vlc işləyir.
Addım 4: Kəskin Görünmək üçün Avadanlığı İnteqrasiya edin
Bunu necə həyata keçirmək istədiyimi başa düşmədim və istifadə olunan hər bir televizor modeli üçün unikal bir həll olacaq. Bu barədə çox düşünməliyəm və kompüteri böyük bir batareya bölməsinin içinə sıxdıqdan sonra pi üçün yaxşı bir enerji mənbəyi tapmaq üçün televizor ətrafında araşdırma aparmalıyam. Kanal seçimi üçün saat düymələrindən istifadə etməyi də düşündüm, çünki onlar artıq televiziyada çox gözəl yerləşdirilib və onsuz da saat işləmir. Yaxşı bir həll tapdığımda daha çox şey yazacağam, amma burada mənim layihəm hər kəsdən çox fərqlənəcək. Real TV kimi IPTV inteqrasiyasından zövq alın!
Addım 5: Pi Power
Tapdığım model TV üçün 12V enerji təchizatı tələb olunur. Lövhədə gəzdim, amma 5V üçün açıq bir güc tənzimləyicisi görmədim, buna görə də sabit bir enerji təchizatı əldə etmək üçün ən açıq yer, 12V üçün lüləli konnektorun daxil olduğu dövrə lövhəsindədir. Bununla bağlı açıq bir problem var. pi qızartmaq istəmirik, buna görə güc tənzimləyicisinə ehtiyacımız olacaq. MP2315 Güc Dönüştürücüsünü seçdim. Kir ucuzdur və istifadəsi asandır. PCB üzərindəki barel konnektorundan 12VDC girişini çeviricinin IN+ və GND pinlərinə və VO+ -ı Raspberry Pi -də 2 -ə, eləcə də GND -ə lehimləyəcəyik.
Bunu etməzdən əvvəl, çeviricini işə saldığınızdan və düzgün 5V -nin çıxışdan çıxdığından əmin olun. Kablolu tənzimlənən gərginliklə ən sadə variantı seçdim. Trimmer gərginliyi tənzimləyəcək, buna görə də tornavida ilə düzəldicini tənzimlədiyim kimi bir multimetr ilə gərginliyin çıxışını izlədim.
Addım 6: Gücün inteqrasiyası
Televizorun ətrafında qazdıqdan sonra, elektrik enerjisini almaq üçün ən yaxşı yerin barel konnektoru və televizorun ON/OFF açarının mənfi tərəfi olduğuna qərar verildi. birbaşa barel bağlayıcısından çəkərək pi -yə güc verir.
Tellər, korpusun yanındakı PCB -nin yan tərəfinə vahidin arxasına çatana qədər, batareya bölməsinin arxasındakı bir çuxurdan qidalanaraq lehimlənmiş və qidalanmışdır. Qidalandıqdan sonra, kabelin uclarını hazırlayıb güc tənzimləyicisinə lehimləyə bilərik. Pi -ni və lehimlənmiş başlıq pinlərini gücləndirmək üçün 5V -ə uyğunlaşdırdım ki, güc tənzimləyicisindən dişi atlayıcılara birbaşa pi -nin GPIO başlıq dəstinə qaça bilək. Bu ümumiyyətlə tövsiyə edilmir, çünki pi ümumiyyətlə 5V -ni tənzimləmək üçün bir tənzimləyicisi olan UBS vasitəsi ilə güc alır, lakin güc artıq tənzimləndiyindən yaxşı olmalıdır.
Bunun nəticəsində səs xətlərində bəzi səs -küy var, çünki sistemdə bir torpaq döngəsi var. Lövhənin hər tərəfində asan cavab üçün bir çox güc və əsas nöqtəni sınadım, amma heç bir şey tapmadım. Pi -nin daxili tənzimləyiciləri vasitəsilə güc tətbiq etmənin problemi həll edəcəyini görmək üçün açar rejim tənzimləyicisinə bir microUSB kabelini də lehimlədim. Olmadı. Həll bəzi səs izolyasiya transformatorlarında olacaq. Ucuz və gözəl qablaşdırıldığı üçün bunlar tikilmək əvəzinə sifariş edildi. Onları əksər avtomobil audio mağazalarından və ya şöbələrindən ala bilərsiniz. Seçdiyim budur.
Addım 7: Uzun müddətli düymə həlli
Şübhəsiz ki, düymələr çörək taxtasında qalmayacaq, buna görə daha daimi bir həll olmalıdır. Siqnallara daxil olmağı asanlaşdırmaq üçün bir neçə köhnə protoboard tutdum və dövrəni başlıq pinləri ilə birlikdə atdım. Düymələri necə bağlamaq və ya bağlamaq barədə hər kəsin fikir ayrılığı olacaq. Onları protoboard etməyi və sadəcə şassiyə bağlamağı seçirəm ki, daşımaq üçün ekranın üstündən yellənən sap müdaxilə etməsin. Montajı hamarlaşdıran, qoz -fındıq və boltlardan, xülya yapışdırıcılardan istifadə edən, orijinal düymələri birləşdirən hər hansı bir 3D çap qutusu əlavə edərək dizaynı kilsəyə gətirməkdən çekinmeyin. İşlədiyi müddətcə heç bir yanlış cavab yoxdur.
Bunlar korpusun kənarına quraşdırılacaq və Raspberry Pi çox geniş batareya bölməsinin içərisinə yerləşdiriləcək, buna görə də kabellərin batareya bölməsinə çıxması üçün kiçik bir delik açılmalıdır.
Addım 8: Son uyğunluq yoxlanışı
Bütün deşiklərin şassidə harada edilməli olduğunu və hansı ölçüdə deşiklərin və s. Əlavə olaraq, əlaqənin və girişin optimal asanlığı üçün komponentlərin harada yerləşdiriləcəyi düşünülməlidir. Uzun sözün qısası, layihənizə düzəlməz bir şəkildə zərər verməzdən əvvəl hər şeyin düşündüyünüz yerə uyğun olduğundan əmin olun.
Addım 9: Son inteqrasiya
İndi bütün avadanlıqlar lazım olduğu yerdədir və hamısı bir xalçadakı bir böcək qədər rahatdır. Gəlin şeyləri kəsək! Batareya bölməsində, plastikdən kiçik bir girinti istifadə edərək AV kabellərini çıxara biləcəyim bir yer təyin etdim. Bir dəzgah öğütücü ilə yerə qoydum. Çox qısa bir iş etdi. Kabellərə olduqca uyğun olması üçün daha çox plastik parçalamaq üçün dremel istifadə etdim.
Son komponent kanal seçicisidir. Batareya bölməsində kiçik bir delik açdım və başlıq kabellərini bir -bir oradan çıxartdım. Düymələr bir-birinə bağlandı və protoboardı plastik şassiyə iki yarısı əvvəlcədən yapışdırılmış cırtdan ilə bağladım. Bunu etmək üçün təxminən 1200 daha yaxşı yol olduğunu başa düşdüm, amma bu işlədi və əlimdə lazım olan hər şey var idi.
Addım 10: Vintage IPTV -dən həzz alın
Bu barədə ümumiləşdirir. Şoular tapın və seyr etməkdən zövq alın. Ancaq çox yaxın oturmayın. Beyninizi çürütəcəksiniz!
Bu layihəni inkişaf etdirmək üçün çox yer var, buna görə istədiyiniz istiqamətə aparın, amma bu qədər irəliləmək çox əyləncəli idi. Mənə gəldikdə, bunu yenidən başladıqda bir cronjobdan idarə edirəm, buna görə stdout python skriptindən gələn mesajları tutmur. Hansı kanalda olduğumu bilmək üçün bunu düzəltmək istərdim. Başqa bir yaxşı əlavə Pi üzərindəki simsiz klaviatura kilididir. Bu, evinizdən televizorla çıxarsanız, wifi şəbəkəsini dəyişdirməyə imkan verəcək. Asılı olmayaraq. əyləncəli bir layihə idi və bir sonrakı işə başlamaq üçün səbirsizliklə gözləyirəm.
Tövsiyə:
Arduino Klaviatura Joystick Genişləndirici Qutu və Deej istifadə edən Səs Nəzarətçisi: 8 addım
Arduino Klaviatura Joystick Genişləndirici Qutu və Deej istifadə edən Səs Nəzarətçisi: Niyə Bir müddətdir ki, interfeys elementlərini və ya oyun və simulyatorlardakı digər kiçik tapşırıqları idarə etmək üçün klaviaturama kiçik bir joystick əlavə etmək istəyirəm (MS Flight Sim, Elite: Dangerous, Star Wars: Squadrons və s.) Ayrıca, Elit üçün: Təhlükəli, mən
Cib Yararsız Qutu (Şəxsiyyət ilə): 9 Addım (Şəkillərlə)
Cib Yararsız Qutusu (Şəxsiyyətlə birlikdə): Bir robot qiyamından xeyli uzaqda olsaq da, ən kiçik də olsa insanlarla ziddiyyət təşkil edən bir maşın var. İstər yararsız bir qutu, istərsə də tək bir maşın adlandırmaq istəsən də, bu cılız, hiyləgər robot
Preonic Rev 3 Klaviatura üçün qutu: 4 addım
Preonic Rev 3 Klaviatura Kılıfı: Bu yaxınlarda Drop.com -dan Preonic Rev. 3 aldım (Utanmaz fiş: https://drop.com/?referer=ZER4PR) və onu qurmaq üçün gözləyə bilmədim. Təəssüf ki, Rev. 3 PCB -nin Rev.2 hallarına uyğun gəlməyəcəyini öyrənmək üçün kifayət qədər araşdırma aparmamışam
CPU İstilik Göstəricisi olan Soyuducu FAN Raspberry Pi Qutu: 10 Addım (Şəkillərlə)
CPU İstilik Göstəricisi olan Soyuducu FAN Raspberry Pi Qutu: Əvvəlki layihədə moruq pi (bundan sonra RPI) CPU temperatur göstərici dövrə təqdim etmişdim. Dövrə sadəcə olaraq RPI 4 fərqli CPU temperatur səviyyəsini göstərir.- Yaşıl LED yandıqda CPU temperaturu 30 ~
Baxışsız Yararsız Qutu: 8 Addım (Şəkillərlə)
Yararsız bir qutu: Həqiqətən kim yararsız bir qutu istəyir? Heç kim. Əvvəlcə belə düşünürdüm, amma YouTube -da minlərlə yararsız qutu var .. Deməli onlar modaya uyğun olmalıdır..Bu təlimatda sizə işıqları olan bir az fərqli yararsız qutunun necə hazırlanacağını göstərəcəyəm