فهرست مطالب:

جعبه احمقانه یکپارچهسازی با سیستمعامل: 10 مرحله
جعبه احمقانه یکپارچهسازی با سیستمعامل: 10 مرحله

تصویری: جعبه احمقانه یکپارچهسازی با سیستمعامل: 10 مرحله

تصویری: جعبه احمقانه یکپارچهسازی با سیستمعامل: 10 مرحله
تصویری: واقعا رفتم جزیره لختیها لخت مادرزاد شدم 2024, جولای
Anonim
جعبه احمقانه یکپارچهسازی با سیستمعامل
جعبه احمقانه یکپارچهسازی با سیستمعامل

من یک تلویزیون قابل حمل قدیمی Magnavox از سال 1984 پیدا کردم که در یک قفسه در فروشگاه لوازم خانگی من نشسته بود. با خودم فکر کردم: "اوه خوب!" با بازرسی بیشتر متوجه یک برچسب قیمت 15 دلار روی آن شدم ، بنابراین تصمیم گرفتم آن را به خانه ببرم و چیزی ترد از آن تهیه کنم. به یاد دارم که در کودکی همه فیلم های کلاسیک بزرگ را در سیاه و سفید باشکوه تماشا می کردم و می خواستم این را دوباره به واقعیت تبدیل کنم.

مشکل این است که دیگر هیچ ایستگاه آنالوگ در آنجا وجود ندارد ، و این به طور کلی قادر به انجام هرگونه رمزگشایی ATSC یا رمزگشایی دیجیتالی نیست. من متوجه وجود یک اتصال AV در کنار آن شدم و چند عدد تمشک pi در اطراف آن قرار داشت ، بنابراین تصمیم گرفتم یک ماجراجویی را آغاز کنم تا بفهمم چگونه می توانم کانال ها را به این طریق جریان دهم. من همچنین می خواهم ظاهر آن را تیز کنم. من آن را روی 9 باتری D-cell اجرا نمی کنم ، بنابراین می توانم rpi را در محفظه باتری با تعداد زیادی از خواص دیگر پنهان کنم.

مرحله 1: یک لیست IPTV خوب تهیه کنید

دریافت یک لیست IPTV خوب
دریافت یک لیست IPTV خوب

لیست IPTV روزانه دارای مجموعه ای فوق العاده از ایستگاه های iptv رایگان است که بر اساس کشور سازماندهی شده است. کشور مورد نظر را انتخاب کرده و فایل m3u را بارگیری کنید.

برای نرم افزاری که در این برنامه وجود دارد ، m3u یک قالب ضروری است. در اینجا می توانید جزئیات بیشتر درباره فرمت را بخوانید.

مرحله 2: آزمایش کد اولیه

کد پایتونی که قصد داریم بنویسیم فایل m3u را در لیست ایستگاه ها تجزیه می کند.

#!/usr/bin/python3

subprocess import from sys import argv class Station: 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] line = next (m3u) this.address = line.strip () this.channel = i channel_list.append (this) i = i + 1 process = subprocess. Popen (['vlc'، '--loop' ، '--intf'، 'dummy'، '--fullscreen'، channel_list [int (argv [1])]. آدرس])

بیایید این را تجزیه کنیم.

#!/usr/bin/python3

این به bash می گوید که ما از python3 برای تفسیر این فایل استفاده می کنیم.

وارد کردن فرایند از sys وارد کردن argv

ما برای راه اندازی نمونه vlc خود به ماژول فرعی نیاز داریم و برای انتخاب vlc در کدام کانال به argv نیاز داریم.

کلاس ایستگاه: 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 تکرار می شود و لیست channel_ را با ایستگاه ها پر می کند.

process = subprocess. Popen (['vlc'، '--loop'، '--intf'، 'dummy'، '--fullscreen'، channel_list [int (argv [1])]. آدرس])

کتابخانه subprocess به پایتون اجازه می دهد تا فرآیندها (برنامه ها) را فراخوانی کند و PID (Process ID) را برمی گرداند. این امر باعث می شود پایتون بتواند راه اندازی و بستن برنامه ها را "به درستی" بدون پر کردن پرونده تاریخچه مدیریت کند یا اجازه ندهد کد دلخواه بیشتری با فراخوانی های عمومی "سیستم" اجرا شود. هر عنصر آرایه ای که به عنوان آرگومان برای Popen استفاده می شود ، همانطور که در خط فرمان تایپ شده است.

vlc --loop --intf ساختگی -آدرسهای تمام صفحه

دستور بالا همان چیزی است که باید اجرا شود ، با گزینه --loop برخی از مشکلات مربوط به توقف جریان در حین بارگیری قطعات بعدی (مسائل عجیب m3u8) برطرف می شود ، ویدیو را در حالت تمام صفحه (NO WAY!) راه اندازی می کند ، و آدرس آدرس جریان است. همانطور که در کد مشاهده می کنید ، ما آدرس را از شماره کانال لیست ارائه می دهیم که در زمان اجرا از طریق عبارت argv ارائه می شود. این فایل را به عنوان tv_channels.py ذخیره کنید ، مکان لیست پخش در فایل پایتون را تغییر دهید تا به لیست پخش خود اشاره کنید و می توانید کد را به صورت زیر اجرا کنید:

پایتون tv_channels.py

مرحله 3: GPIO را اضافه کنید

GPIO را اضافه کنید
GPIO را اضافه کنید
GPIO را اضافه کنید
GPIO را اضافه کنید

شماتیک دو پین GPIO مورد استفاده برای دکمه ها را نشان می دهد و هر کدام دارای یک مقاومت کششی هستند تا پین GPIO را پس از فشار دادن دکمه بالا نگه دارد. کدی که قبلاً تعریف شده است را می توان تصحیح کرد تا با افزودن قابلیت GPIO عملیات را کمی یکپارچه کند. این به ما امکان می دهد کانال را با دکمه ها و نه دستورات صفحه کلید و argv تغییر دهیم ، درست مانند تلویزیون واقعی.

اولین نکته قابل توجه این است که من تلویزیون را به عنوان یک کلاس تعریف کرده ام. برای اینکه تلویزیون باشیم ، باید در یک کانال فعلی باشیم ، لیستی از کانال های احتمالی را داشته باشیم و توانایی تغییر کانال ها را داشته باشیم. در این مثال ، تنها روش تغییر کانال ها این است که لیست کانال ها را بالا ببرید و لیست کانال ها را پایین بیاورید. پس از تصمیم گیری در مورد کانال ، ما باید VLC را در کانالی که می خواهیم ببینیم شروع کنیم.

#!/usr/bin/python3

از زمان وارد کردن زیر پردازش واردات خواب از sys import argv از gpiozero import Button کلاس ایستگاه: def _init _ (self): self.channel = 0 self.name = "self.address =" "self.process =" class _init _ (خود ، نام فایل): self.current_channel = 0 self.channel_list = self.build_channel_list (نام فایل) self.start_channel () def build_channel_list (خود ، نام فایل): با باز (نام فایل ، '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 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 () به جز: pass print ('شروع کانال٪ d'٪ self.current_channel) self.process = subprocess. Popen (['vlc'، '-q'، '--loop'، '--intf'، ' ساختگی '،' --fullscreen '، self.channel_list [self.current_channel]. آدرس]) 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

این تکرار کد پیشرفت های چندانی ندارد. در حال حاضر از یک ماژول به نام gpiozero استفاده می کند که توسط Raspberry Pi برای دسترسی آسان به عملکرد پین های GPIO مورد نیاز است

sudo apt-get python3-gpiozero را نصب کنید

یا

sudo pip gpiozero را نصب کنید

همانطور که در کد من مشاهده می شود ، من به ترتیب GPIO 18 و GPIO 23 را برای کانال UP و DOWN پایین انتخاب کرده ام. کتابخانه gpiozero دارای کلاس مناسبی برای عملکردهای دکمه ها برای زمانی است که فشرده می شود ، فشرده می شود ، هنگامی که نگه داشته می شود و غیره. این کار را بسیار آسان می کند. من when_pressed را انتخاب کردم که به یک تابع بازگشت به تماس اشاره دارد تا هنگام تشخیص این سیگنال اجرا شود.

آخرین تغییر عمده گنجاندن گزینه '-q' در فراخوان فرعی VLC است. این به سادگی vlc را بدون خروجی به ترمینال اجرا می کند تا از بی نظمی جلوگیری شود تا بتوانیم دستورات چاپ اطلاعاتی را در کد مشاهده کنیم.

مرحله 4: سخت افزار را یکپارچه کنید تا تیز به نظر برسید

سخت افزار را یکپارچه کنید تا تیز به نظر برسید
سخت افزار را یکپارچه کنید تا تیز به نظر برسید
سخت افزار را یکپارچه کنید تا تیز به نظر برسید
سخت افزار را یکپارچه کنید تا تیز به نظر برسید
سخت افزار را یکپارچه کنید تا تیز به نظر برسید
سخت افزار را یکپارچه کنید تا تیز به نظر برسید

من متوجه نشدم که چگونه می خواهم این کار را انجام دهم ، و این یک راه حل منحصر به فرد برای هر مدل تلویزیون در حال استفاده خواهد بود. لازم است در این باره بسیار فکر کنم و در اطراف تلویزیون تحقیق کنم تا وقتی کامپیوتر را داخل محفظه بزرگ باتری قرار می دهم ، منبع تغذیه مناسبی برای pi پیدا کنم. من همچنین از دکمه های ساعت برای انتخاب کانال استفاده کرده ام ، زیرا آنها قبلاً به زیبایی روی تلویزیون قرار گرفته اند و به هر حال ساعت کار نمی کند. وقتی راه حل خوبی پیدا کردم ، پست های بیشتری خواهم گذاشت ، اما اینجاست که پروژه من از پروژه دیگران بسیار متفاوت خواهد شد. از ادغام IPTV شبیه تلویزیون واقعی لذت ببرید!

مرحله 5: قدرت Pi

قدرت پی
قدرت پی

برای مدل تلویزیونی که پیدا کردم ، به منبع تغذیه 12 ولت نیاز دارد. من در اطراف برد بررسی کردم ، اما هیچ تنظیم کننده قدرت مشخصی برای 5 ولت مشاهده نکردم ، بنابراین واضح ترین مکان برای دریافت منبع تغذیه ثابت روی برد مدار است که در آن کانکتور لوله 12 ولت وارد می شود. یک مشکل واضح در این مورد وجود دارد به ما نمی خواهیم پی را سرخ کنیم ، بنابراین به تنظیم کننده قدرت نیاز داریم. من MP2315 Power-Down Power Converter را انتخاب کرده ام. این کثیف ارزان است ، و استفاده از آن ساده است. ما ورودی 12VDC را از اتصال بشکه روی PCB به پین های IN+ و GND مبدل و VO+ را به پین 2 روی رزبری پای و همچنین GND می چسبانیم.

قبل از انجام این کار ، مطمئن شوید که مبدل را روشن کرده و مطمئن شوید که 5 ولت مناسب از خروجی خارج می شود. من ساده ترین گزینه را با ولتاژ قابل تنظیم با سیم سخت انتخاب کردم. تریمر ولتاژ را تنظیم می کند ، بنابراین من خروجی ولتاژ را با مولتی متر تماشا می کردم در حالی که تریمر را با پیچ گوشتی تنظیم می کردم.

مرحله 6: ادغام قدرت

قدرت یکپارچه سازی
قدرت یکپارچه سازی
قدرت یکپارچه سازی
قدرت یکپارچه سازی
قدرت یکپارچه سازی
قدرت یکپارچه سازی

پس از گشتن در اطراف تلویزیون ، تصمیم گرفته شد که بهترین مکان برای دریافت برق ، منفی اتصال لوله و کلید ON/OFF تلویزیون است ، به این معنی که ما می توانیم جریانها را با تلویزیون روشن یا خاموش کنیم ، نه اینکه پی را به طور مداوم با بیرون کشیدن مستقیم از کانکتور بشکه تغذیه می کند.

سیمها را در کنار PCB کنار قاب محافظ چسبانده و تغذیه کردند تا به پشت دستگاه رسیدند ، جایی که از طریق سوراخی که در قسمت پشتی باتری قرار داشت تغذیه شدند. پس از تغذیه آنها ، می توانیم انتهای کابل را آماده کرده و آنها را به تنظیم کننده قدرت لحیم کنیم. من آن را برای ولتاژ 5 ولت تنظیم کردم تا pi به آن وصل شود و پین های هدر را به آن لحیم کرد تا بتوانیم از تنظیم کننده قدرت مستقیماً به مجموعه سربرگ GPIO pi از جهنده زن تا زن بپردازیم. این معمولاً توصیه نمی شود ، زیرا pi به طور کلی از طریق UBS تغذیه می کند ، که دارای تنظیم کننده داخلی برای ولتاژ 5V است ، اما از آنجا که قدرت در حال حاضر تنظیم شده است ، باید خوب باشد.

از انجام این کار مقداری نویز روی خطوط صوتی ایجاد می شود ، زیرا یک حلقه زمین در سیستم وجود دارد. من بسیاری از نقاط قدرت و زمینی را در سراسر صفحه امتحان کردم به امید یک پاسخ آسان ، اما هیچ کدام را پیدا نکردم. من همچنین یک کابل microUSB را به تنظیم کننده حالت سوئیچ لحیم کردم تا ببینم آیا با استفاده از تنظیم کننده های داخلی pi مشکل برقرار می شود یا خیر. نشد. راه حل در برخی از ترانسفورماتورهای جداسازی زمین صوتی است. اینها به جای ساختن سفارش داده شدند ، زیرا ارزان و بسته بندی خوبی دارند. می توانید آنها را از اکثر فروشگاه ها یا بخش های صوتی خودکار تهیه کنید. این چیزی است که من انتخاب کردم.

مرحله 7: راه حل دکمه بلند مدت

راه حل دکمه بلند مدت
راه حل دکمه بلند مدت
راه حل دکمه بلند مدت
راه حل دکمه بلند مدت

بدون شک ، دکمه ها روی تخته نان باقی نمی مانند ، بنابراین باید راه حل دائمی تری وجود داشته باشد. چند تابلوی قدیمی را گرفتم و مدار را به همراه چند پین هدر انداختم تا دسترسی به سیگنالها آسان شود. اینجاست که همه در مورد نحوه اتصال یا نصب دکمه ها اختلاف نظر خواهند داشت. من انتخاب می کنم که آنها را روی صفحه اصلی نصب کنم و فقط آنها را به شاسی وصل کنم تا دسته ای که برای حمل روی صفحه تاب می خورد تداخلی ایجاد نکند. با افزودن یک قاب چاپی سه بعدی که نصب را صاف می کند ، از مهره و پیچ استفاده کنید ، از چسب های فانتزی ، یکپارچه سازی دکمه های اصلی ، هرچه دلتان بخواهد ، طرح خود را تغییر دهید. تا زمانی که کار می کند ، هیچ پاسخ اشتباهی وجود ندارد.

اینها در قسمت بیرونی قاب نصب می شوند و رزبری پای داخل محفظه باتری بسیار جادار قرار می گیرد ، بنابراین باید یک سوراخ کوچک ایجاد شود تا کابل ها بتوانند از قسمت باتری خارج شوند.

مرحله 8: بررسی نهایی تناسب اندام

بررسی نهایی تناسب اندام
بررسی نهایی تناسب اندام

همه تجهیزات باید برای آخرین بار به درستی بررسی شوند تا مشخص شود همه سوراخ ها در کجای شاسی ایجاد شده اند و سوراخ هایی با اندازه و غیره باید ایجاد شوند. علاوه بر این باید در نظر گرفت که اجزاء را برای سهولت اتصال و دسترسی کجا قرار دهید. به طور خلاصه ، قبل از اینکه به پروژه خود صدمه جبران ناپذیری وارد کنید و مجبور باشید قطعه قطعه را بیرون بیاورید ، مطمئن شوید که همه چیز در جایی قرار می گیرد که فکر می کنید.

مرحله 9: ادغام نهایی

ادغام نهایی
ادغام نهایی
ادغام نهایی
ادغام نهایی
ادغام نهایی
ادغام نهایی

در حال حاضر تمام سخت افزار در جایی است که باید باشد و همه به اندازه یک اشکال در یک فرش مناسب است. بیایید چیزها را برش دهیم! من مکانی را روی محفظه باتری مشخص کردم که در آن می توانم کابل های AV را با استفاده از یک تورفتگی کوچک در پلاستیک خارج کنم. با آسیاب نیمکت آن را زمین کردم. کار بسیار کوتاهی از آن انجام داد من از یک dremel برای خرد کردن پلاستیک بیشتر استفاده کردم تا کاملاً مناسب کابل ها باشد.

آخرین جزء انتخاب کننده کانال است. من یک سوراخ کوچک در محفظه باتری ایجاد کردم و کابل های سربرگ را یکی یکی بیرون آوردم. دکمه ها به هم متصل شده بودند و من صفحه اصلی را با دو نیمه مخمل چسب دار چسبی به شاسی پلاستیکی متصل کردم. دریافتم که حدود 1200 روش بهتر برای انجام این کار وجود داشت ، اما این کار کرد ، و من هر آنچه را که لازم داشتم در دست داشتم.

مرحله 10: از IPTV پرنعمت خود لذت ببرید

از IPTV پرنعمت خود لذت ببرید
از IPTV پرنعمت خود لذت ببرید
از IPTV پرنعمت خود لذت ببرید
از IPTV پرنعمت خود لذت ببرید
از IPTV پرنعمت خود لذت ببرید
از IPTV پرنعمت خود لذت ببرید

این تقریبا جمع بندیش میکنه. برنامه ها را بیابید و از تماشای آن لذت ببرید. هر چند زیاد نزدیک ننشینید. مغزت را پوسیده ای!

فضای زیادی برای بهبود این پروژه وجود دارد ، بنابراین آن را به هر سمتی که می خواهید ببرید ، اما رسیدن به این نقطه جالب بود. در مورد من ، من این را در هنگام راه اندازی مجدد از cronjob اجرا می کنم ، بنابراین stdout پیام های اسکریپت پایتون را ضبط نمی کند. من می خواهم این را اصلاح کنم تا بدانم در چه کانالی هستم. یک افزودنی خوب دیگر ، دانگل صفحه کلید بی سیم در Pi است. اگر خانه خود را با تلویزیون ترک کنید ، می توانید شبکه wifi را تغییر دهید. بدون در نظر گرفتن. این یک پروژه سرگرم کننده بود و من نمی توانم صبر کنم تا پروژه بعدی را شروع کنم.

توصیه شده: