Daftar Isi:

Kotak Idiot Retro: 10 Langkah
Kotak Idiot Retro: 10 Langkah

Video: Kotak Idiot Retro: 10 Langkah

Video: Kotak Idiot Retro: 10 Langkah
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, November
Anonim
Kotak Idiot Retro
Kotak Idiot Retro

Saya menemukan televisi portabel Magnavox tua dari tahun 1984 duduk di rak di toko barang bekas lokal saya. Saya berpikir, "oh NEAT!" Setelah diperiksa lebih lanjut, saya melihat label harga $15 di atasnya, jadi saya memutuskan untuk membawanya pulang dan membuat sesuatu yang keren darinya. Saya ingat menonton tayangan ulang sebagai anak dari semua film klasik hebat dalam warna hitam dan putih yang megah, dan ingin membuat ini menjadi kenyataan lagi.

Masalahnya adalah tidak ada lagi stasiun analog di luar sana, dan ini sama sekali tidak mampu melakukan decoding ATSC, atau decoding digital apa pun. Saya memang memperhatikan adanya koneksi AV di samping, dan memiliki beberapa raspberry pi, jadi saya memutuskan untuk memulai petualangan untuk mencari tahu bagaimana saya bisa mengalirkan saluran ke sini. Saya ingin membuatnya terlihat tajam juga. Saya tidak akan menjalankannya pada baterai sel 9 D, jadi saya dapat menyembunyikan rpi di kompartemen baterai dengan sejumlah barang lainnya.

Langkah 1: Dapatkan Daftar IPTV yang Bagus

Dapatkan Daftar IPTV yang Bagus
Dapatkan Daftar IPTV yang Bagus

Daftar IPTV Harian memiliki pilihan stasiun IPTV gratis yang fantastis yang diselenggarakan oleh negara. Pilih negara pilihan, dan unduh file m3u.

Untuk perangkat lunak yang ada di dalamnya, m3u adalah format yang diperlukan. Anda dapat membaca lebih lanjut tentang spesifikasi format di sini.

Langkah 2: Eksperimen Kode Awal

Kode python yang akan kita tulis mem-parsing file m3u ke dalam daftar stasiun.

#!/usr/bin/python3

subproses impor dari sys import argv class Station: def _init_(self): self.channel = 0 self.name = '' self.address = '' channel_list = dengan open('./us-m3uplaylist-2020-08- 17-1.m3u', 'r') as m3u: i = 0 untuk baris di m3u: if line.startswith('#EXTINF'): this = Station() this.name = line.split(', ') [1] baris = next(m3u) this.address = line.strip() this.channel = i channel_list.append(this) i = i + 1 process = subprocess. Popen(['vlc', '--loop', '--intf', 'dummy', '--layar penuh', channel_list[int(argv[1])].address])

Mari kita hancurkan ini.

#!/usr/bin/python3

Ini memberitahu bash bahwa kita akan menggunakan python3 untuk menginterpretasikan file ini.

impor subprosesdari sys import argv

Kami akan membutuhkan modul subproses untuk meluncurkan instance vlc kami, dan kami akan membutuhkan argv untuk memilih saluran mana kami akan meluncurkan vlc.

class Station: def _init_(self): self.channel = 0 self.name = '' self.address = ''

Ini mendefinisikan kelas yang disebut Station. Setiap saluran akan memiliki nomor saluran, nama saluran yang diambil dari file m3u, dan alamat dari mana saluran itu mengalir.

saluran_daftar =

Ini adalah daftar yang akan menyimpan semua saluran yang diurai dari file m3u.

dengan open('./us-m3uplaylist-2020-08-17-1.m3u', 'r') sebagai m3u: i = 0 untuk baris di 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

Loop ini membuka daftar putar m3u, dan menyerap data. baris file m3u yang kami minati dimulai dengan #EXTINF, Ini menunjukkan entri baru ke file daftar putar. Nilai minat berikutnya adalah nama, yang berada di baris yang sama dengan #EXTINF, tetapi dengan koma di antara keduanya. Baris berikut dari m3u khusus ini adalah alamat aliran. Ada iterator "i" yang digunakan untuk menghitung saluran mana. Loop ini mengulangi seluruh file m3u dan mengisi channel_list dengan stasiun.

proses = subproses. Popen(['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list[int(argv[1])].address])

pustaka subproses memungkinkan python untuk memanggil proses (program) dan mengembalikan PID (ID Proses). Ini memungkinkan python untuk dapat mengelola peluncuran dan penutupan program "dengan benar" tanpa mengisi file riwayat, atau mengizinkan lebih banyak kode arbitrer dijalankan dengan panggilan "sistem" generik. Setiap elemen array yang digunakan sebagai argumen untuk Popen adalah seperti yang diketik di baris perintah.

vlc --loop --intf dummy --alamat layar penuh

Perintah di atas adalah apa yang ingin dijalankan, dengan opsi --loop memperbaiki beberapa masalah dengan jeda aliran saat potongan berikutnya dimuat (masalah m3u8 yang aneh), --intf dummy memulai vlc tanpa antarmuka, hanya layar, --layar penuh meluncurkan video dalam mode layar penuh (NO WAY!), dan alamatnya adalah alamat streaming. Seperti yang Anda lihat dalam kode, kami memberikan alamat dari nomor saluran daftar, yang diberikan saat runtime melalui pernyataan argv. Simpan file ini sebagai tv_channels.py, ubah lokasi daftar putar di file python untuk menunjuk ke daftar putar Anda, dan Anda dapat menjalankan kode sebagai berikut:

python tv_channels.py

Langkah 3: Tambahkan GPIO

Tambahkan GPIO
Tambahkan GPIO
Tambahkan GPIO
Tambahkan GPIO

Skema menunjukkan dua pin GPIO yang digunakan untuk tombol, dan masing-masing memiliki resistor pull-up untuk menjaga agar pin GPIO tetap tinggi setelah tombol ditekan. Kode yang didefinisikan sebelumnya dapat disempurnakan untuk membuat operasi sedikit lebih mulus dengan menambahkan kemampuan GPIO. Hal ini memungkinkan kita untuk mengubah saluran dengan tombol, bukan keyboard dan pernyataan argv, seperti untuk tv nyata.

Hal pertama yang perlu diperhatikan adalah saya menetapkan televisi sebagai kelas. Untuk menjadi televisi, kita harus berada di saluran saat ini, memiliki daftar saluran yang memungkinkan, dan memiliki kemampuan untuk mengubah saluran. Dalam contoh ini, satu-satunya metode untuk mengubah saluran adalah dengan menaikkan daftar saluran, dan menurunkan daftar saluran. Setelah saluran diputuskan, kita harus memulai VLC di saluran yang ingin kita lihat.

#!/usr/bin/python3

dari waktu import sleep subproses impor dari sys import argv dari gpiozero import Button class Station: def _init_(self): self.channel = 0 self.name = '' self.address = '' self.process = '' class Televisi: def _init_(self, filename): self.current_channel = 0 self.channel_list = self.build_channel_list(filename) self.start_channel() def build_channel_list(self, filename): dengan open(filename, 'r') sebagai m3u: i = 0 untuk baris dalam 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 jika 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 jika self.current_channel < 0: self.current_channel = 0 self.start_channel() def start_channel(self): coba: self.process. kill() kecuali: lulus print('starting channel %d' % self.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 = Button(23) while True: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

Iterasi kode ini memiliki beberapa peningkatan. sekarang menggunakan modul yang disebut gpiozero yang diperlukan oleh raspberry pi untuk mengakses fungsionalitas pin GPIO dengan mudah

sudo apt-get install python3-gpiozero

atau

sudo pip instal gpiozero

Seperti yang terlihat dalam kode saya, saya telah memilih GPIO 18 dan GPIO 23 untuk saluran UP dan saluran DOWN. Pustaka gpiozero memiliki kelas yang bagus untuk fungsi tombol untuk when_pressed, is_pressed, when_held, dll. Ini membuatnya cukup mudah. Saya memilih when_pressed, yang mengacu pada fungsi panggilan balik untuk dijalankan ketika sinyal ini terdeteksi.

Perubahan besar terakhir adalah penyertaan opsi ' -q ' dalam panggilan subproses VLC. Ini hanya menjalankan vlc tanpa semua output ke terminal agar tetap bebas dari kekacauan sehingga kita dapat melihat pernyataan cetak informasi dalam kode.

Langkah 4: Integrasikan Perangkat Keras agar Terlihat Tajam

Integrasikan Perangkat Keras agar Terlihat Tajam
Integrasikan Perangkat Keras agar Terlihat Tajam
Integrasikan Perangkat Keras agar Terlihat Tajam
Integrasikan Perangkat Keras agar Terlihat Tajam
Integrasikan Perangkat Keras agar Terlihat Tajam
Integrasikan Perangkat Keras agar Terlihat Tajam

Saya belum tahu bagaimana saya ingin mencapai ini, dan itu akan menjadi solusi unik untuk setiap model tv yang digunakan. Saya perlu berpikir keras tentang hal ini dan menyelidiki di sekitar televisi untuk menemukan sumber daya yang baik untuk pi begitu saya menjejalkan komputer di dalam kompartemen baterai yang besar. Saya juga mempertimbangkan untuk menggunakan tombol jam untuk pemilihan saluran, karena sudah ditempatkan dengan indah di televisi, dan jam tetap tidak berfungsi. Saya akan memposting lebih banyak ketika saya menemukan solusi yang baik, tetapi di sinilah proyek saya akan sangat berbeda dari proyek orang lain. Nikmati integrasi IPTV seperti TV nyata!

Langkah 5: Kekuatan Pi

Kekuatan Pi
Kekuatan Pi

Untuk model TV yang saya temukan, membutuhkan catu daya 12V. Saya memeriksa di sekitar papan, tetapi tidak melihat regulator daya yang jelas untuk 5V, jadi tempat yang paling jelas untuk mendapatkan catu daya yang stabil adalah di papan sirkuit di mana konektor barel untuk 12V masuk. Ada masalah yang jelas dengan ini. kami tidak ingin menggoreng pi, jadi kami membutuhkan pengatur daya. Saya telah memilih MP2315 Step-Down Power Converter. Ini sangat murah, dan mudah digunakan. Kami akan menyolder input 12VDC dari konektor barel pada PCB ke pin IN+ dan GND konverter, dan VO+ ke pin 2 pada Raspberry Pi, serta GND.

SEBELUM ini dilakukan, pastikan untuk menyalakan konverter dan memastikan bahwa 5V yang tepat keluar dari output. Saya memilih opsi paling sederhana dengan voltase yang dapat disesuaikan. Pemangkas akan menyesuaikan tegangan, jadi saya melihat output tegangan dengan multimeter saat saya menyesuaikan pemangkas dengan obeng.

Langkah 6: Mengintegrasikan Kekuatan

Mengintegrasikan Kekuatan
Mengintegrasikan Kekuatan
Mengintegrasikan Kekuatan
Mengintegrasikan Kekuatan
Mengintegrasikan Kekuatan
Mengintegrasikan Kekuatan

Setelah menggali di sekitar televisi, diputuskan bahwa tempat terbaik untuk mengambil daya adalah dari negatif konektor barel dan sakelar ON/OFF televisi, yang berarti bahwa kita dapat menghidupkan dan mematikan aliran dengan televisi, bukan terus menyalakan pi dengan menarik langsung dari konektor barel.

Kabel disolder dan dimasukkan di sepanjang sisi PCB di sebelah kasing sampai mencapai bagian belakang unit, di mana kabel dimasukkan melalui lubang yang ada di bagian belakang kompartemen baterai. Setelah dimasukkan, kami dapat menyiapkan ujung kabel dan menyoldernya ke pengatur daya. Saya menyetelnya untuk 5V untuk memberi daya pada pi dan menyolder pin header ke sana sehingga kita dapat menjalankan jumper female ke female dari regulator daya langsung ke set header GPIO pi. Ini biasanya tidak disarankan, karena pi umumnya mendapat daya melalui UBS, yang memiliki regulator inline untuk mengkondisikan 5V, tetapi karena daya sudah diatur, itu akan baik-baik saja.

Ada beberapa gangguan pada saluran audio dari melakukan ini, karena ada loop tanah dalam sistem. Saya mencoba banyak poin kekuatan dan ground di seluruh papan dengan harapan mendapatkan jawaban yang mudah, tetapi tidak menemukannya. Saya juga menyolder kabel microUSB ke pengatur mode yang diaktifkan untuk melihat apakah memaksa daya melalui regulator internal pi akan menyelesaikan masalah. Tidak. Solusinya akan ada di beberapa transformator isolasi ground audio. Ini dipesan daripada dibuat, karena murah dan dikemas dengan baik. Anda dapat mengambilnya dari sebagian besar toko atau departemen audio otomatis. Inilah yang saya pilih.

Langkah 7: Solusi Tombol Jangka Panjang

Solusi Tombol Jangka Panjang
Solusi Tombol Jangka Panjang
Solusi Tombol Jangka Panjang
Solusi Tombol Jangka Panjang

Tidak diragukan lagi, tombol-tombolnya tidak akan menempel di papan tempat memotong roti, jadi perlu ada solusi yang lebih permanen. Saya mengambil beberapa protoboard lama dan menggabungkan sirkuit dengan beberapa pin header untuk memudahkan mengakses sinyal. Di sinilah setiap orang akan memiliki perbedaan pendapat tentang cara memasang atau memasang tombol. Saya memilih untuk membuat protoboard mereka dan hanya memasangnya ke sasis sehingga pegangan yang berayun di atas layar untuk dibawa tidak mengganggu. Jangan ragu untuk menyempurnakan desain dengan menambahkan kasing cetak 3d yang menghaluskan pemasangan, menggunakan mur dan baut, perekat mewah, mengintegrasikan tombol asli, apa pun. Selama itu berhasil, tidak ada jawaban yang salah.

Ini akan dipasang ke bagian luar kasing, dan Raspberry Pi akan dimasukkan ke dalam kompartemen baterai yang sangat lapang, jadi perlu ada lubang kecil yang dibor untuk memungkinkan kabel keluar dari kompartemen baterai.

Langkah 8: Pemeriksaan Kecocokan Akhir

Pemeriksaan Kecocokan Akhir
Pemeriksaan Kecocokan Akhir

Semua peralatan harus diperiksa untuk terakhir kalinya untuk melihat dengan tepat di mana semua lubang perlu dibuat pada sasis, dan ukuran lubang apa, dll. yang perlu dibuat. Selain itu harus dipertimbangkan di mana menempatkan komponen untuk kemudahan konektivitas dan akses yang optimal. Singkat cerita, pastikan semuanya sesuai dengan yang Anda pikirkan sebelum Anda merusak proyek Anda dan harus mengeluarkan spackle.

Langkah 9: Integrasi Akhir

Integrasi Akhir
Integrasi Akhir
Integrasi Akhir
Integrasi Akhir
Integrasi Akhir
Integrasi Akhir

Sekarang semua perangkat keras berada di tempat yang seharusnya, dan semuanya pas seperti serangga di permadani. Mari kita memotong sesuatu! Saya mengidentifikasi tempat di kompartemen baterai di mana saya bisa mengarahkan kabel AV keluar menggunakan lekukan kecil di plastik. Saya menggilingnya dengan penggiling bangku. Itu membuat pekerjaan yang cukup singkat. Saya menggunakan dremel untuk menggiling lebih banyak plastik agar cukup pas untuk kabel.

Komponen terakhir adalah pemilih saluran. Saya mengebor lubang kecil di kompartemen baterai dan mengarahkan kabel header keluar satu per satu. Tombol-tombolnya terhubung, dan saya memasang protoboard ke sasis plastik dengan dua bagian velcro pra-perekat. Saya mengerti bahwa ada sekitar 1200 cara yang lebih baik untuk melakukan ini, tetapi ini berhasil, dan saya memiliki semua yang saya butuhkan.

Langkah 10: Nikmati IPTV Vintage Anda

Nikmati IPTV Vintage Anda
Nikmati IPTV Vintage Anda
Nikmati IPTV Vintage Anda
Nikmati IPTV Vintage Anda
Nikmati IPTV Vintage Anda
Nikmati IPTV Vintage Anda

Itu tentang meringkasnya. Temukan acara dan bersenang-senang menonton. Namun, jangan duduk terlalu dekat. Anda akan membusuk otak Anda!

Ada banyak ruang untuk meningkatkan proyek ini, jadi bawalah ke arah mana pun yang Anda inginkan, tetapi sejauh ini menyenangkan. Bagi saya, saya menjalankan ini dari cronjob saat reboot, jadi stdout tidak menangkap pesan dari skrip python. Saya ingin memperbaiki ini sehingga saya tahu di saluran mana saya berada. Tambahan bagus lainnya adalah dongle keyboard nirkabel di Pi. Ini akan memungkinkan Anda mengubah jaringan wifi jika Anda meninggalkan rumah dengan tv. Tanpa memedulikan. itu adalah proyek yang menyenangkan, dan saya tidak sabar untuk memulai yang berikutnya.

Direkomendasikan: