תוכן עניינים:

תיבת רטרו אידיוט: 10 שלבים
תיבת רטרו אידיוט: 10 שלבים

וִידֵאוֹ: תיבת רטרו אידיוט: 10 שלבים

וִידֵאוֹ: תיבת רטרו אידיוט: 10 שלבים
וִידֵאוֹ: פתיחת התיבה הכי גדולה בהיסטוריה של קלאש רויאל - 10 לג'נדרים ו-15,000 קלפים בתיבה אחת !! 2024, יולי
Anonim
תיבת רטרו אידיוט
תיבת רטרו אידיוט

מצאתי טלויזיה ניידת ישנה מ- Magnavox מ -1984 יושבת על מדף בחנות החפשות המקומית שלי. חשבתי לעצמי, "אוי לא!" לאחר בדיקה נוספת שמתי לב לתג מחיר של 15 $, אז החלטתי לקחת אותו הביתה ולהכין מזה משהו. אני זוכר שצפיתי בשידורים חוזרים כילד של כל הקלאסיקות הגדולות בשחור לבן מפואר, ורציתי להפוך את זה למציאות שוב.

הבעיה היא שכבר אין תחנות אנלוגיות בחוץ, וזה לגמרי לא מסוגל לבצע פענוח ATSC, או כל פענוח דיגיטלי. שמתי לב לנוכחות של חיבור AV בצד, והיו לי כמה פאי פטל, אז החלטתי לצאת להרפתקה כדי להבין איך אני יכול להזרים ערוצים לזה. אני רוצה לגרום לזה להיראות חד גם. אני לא אפעיל אותו על 9 סוללות D-cell, כך שאוכל להסתיר את ה- rpi בתא הסוללות עם שלל דברים טובים אחרים.

שלב 1: קבל רשימת IPTV טובה

קבל רשימת IPTV טובה
קבל רשימת IPTV טובה

לרשימת IPTV היומית יש מבחר פנטסטי של תחנות iptv בחינם המאורגנות לפי מדינה. בחר את המדינה שבחרת והורד את קובץ m3u.

עבור התוכנה שנמצאת בתוכנה זו, m3u הוא פורמט נדרש. תוכל לקרוא עוד על הפרטים של הפורמט כאן.

שלב 2: ניסוי קוד מקדים

קוד הפיתון שאנו הולכים לכתוב מנתח את קובץ m3u לרשימת תחנות.

#!/usr/bin/python3

ייבוא תת-תהליך מ- sys import argv class Station: def _init _ (self): self.channel = 0 self.name = '' self.address = '' channel_list = עם open ('./ us-m3uplaylist-2020-08- 17-1.m3u ',' r ') כ- m3u: i = 0 עבור שורה ב- m3u: אם line.startswith ('#EXTINF '): this = Station () this.name = line.split (', ') [1] שורה = הבא (m3u) this.address = line.strip () this.channel = i channel_list.append (זה) i = i + תהליך = subprocess. Popen (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. address])

בואו נפרק את זה.

#!/usr/bin/python3

זה אומר bash כי נשתמש python3 כדי לפרש קובץ זה.

ייבוא תת -תהליך מתוך sys ייבוא argv

נזדקק למודול תהליך התהליך כדי להפעיל את מופע ה- vlc שלנו, ונצטרך argv כדי לבחור לאיזה ערוץ נפעיל vlc.

תחנת כיתה: def _init _ (עצמי): self.channel = 0 self.name = "self.address ="

זה מגדיר מחלקה הנקראת Station. לכל ערוץ יהיה מספר ערוץ, שם הערוץ כפי שהוא לקוח מקובץ m3u וכתובת שממנה זורם הערוץ.

channel_list =

זוהי רשימה שתאחסן את כל הערוצים המנותקים מקובץ m3u.

עם פתוח ('./ us-m3uplaylist-2020-08-17-1.m3u', 'r') כ- m3u: i = 0 עבור שורה ב- m3u: אם line.startswith ('#EXTINF'): זה = תחנה () this.name = line.split (',') [1] line = next (m3u) this.address = line.strip () this.channel = i channel_list.append (זה) i = i + 1

לולאה זו פותחת את רשימת ההשמעה m3u ונבלעת הנתונים. שורות הקבצים m3u שאנו מעוניינים בהם מתחילות ב- #EXTINF, זה מציין ערך חדש לקובץ רשימת ההשמעה. ערך העניין הבא הוא השם, הנמצא על אותו קו כמו #EXTINF, אך עם פסיק ביניהם. השורה הבאה של m3u זה היא כתובת הזרם. יש איטרציה "i" בשימוש לספור איזה ערוץ הוא איזה. לולאה זו חוזרת על כל קובץ m3u וממלאת את רשימת הערוצים עם תחנות.

process = subprocess. Popen (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. כתובת])

ספריית התהליכים מאפשרת לפייתון לקרוא לתהליכים (תוכניות) ומחזירה PID (מזהה תהליך). זה מאפשר לפייתון להיות מסוגל לנהל הפעלה וסגירה של תוכניות "בצורה נכונה" מבלי למלא את קובץ ההיסטוריה, או לאפשר הפעלה של קוד שרירותי יותר עם שיחות "מערכת" כלליות. כל רכיב במערך המשמש כארגומנט ל- Popen הוא כפי שהוקלד בשורת הפקודה.

vlc --loop --intf dummy -כתובות מסך

הפקודה לעיל היא מה שרצוי להריץ, כאשר אפשרות -לולאה מתקנת כמה בעיות בהשהיית זרם בזמן טעינת הנתחים הבאים (בעיות מוזרות m3u8), --intf dummy מתחיל vlc ללא הממשק, רק מסך, -מסך מלא מפעיל את הסרטון במצב מסך מלא (אין דרך!), והכתובת היא כתובת הזרם. כפי שאתה יכול לראות בקוד, אנו מספקים את הכתובת ממספר הערוץ של הרשימה, המסופקת בזמן ריצה באמצעות הצהרת argv. שמור קובץ זה כ- tv_channels.py, שנה את מיקום רשימת ההשמעה בקובץ הפייתון כך שיצביע על רשימת ההשמעה שלך ותוכל להריץ את הקוד כדלקמן:

python tv_channels.py

שלב 3: הוסף GPIO

הוסף GPIO
הוסף GPIO
הוסף GPIO
הוסף GPIO

התרשים מציג את שני סיכות ה- GPIO המשמשות את הלחצנים, ולכל אחד יש נגד נגד למעלה כדי לשמור על סיכת ה- GPIO למשוך גבוה לאחר לחיצה על הכפתור. ניתן לשכלל את הקוד שהוגדר קודם לכן כדי להפוך את הפעולה לקצת יותר חלקה על ידי הוספת יכולת GPIO. זה מאפשר לנו לשנות את הערוץ עם כפתורים, במקום מקלדת והצהרות argv, ממש כמו טלוויזיה לריאליז.

הדבר הראשון שחשוב הוא שיש לי את הטלוויזיה מוגדרת כמעמד. כדי להיות טלוויזיה, עלינו להיות בערוץ הנוכחי, לקבל רשימת ערוצים אפשריים, ולהיות ביכולת לשנות את הערוצים. בדוגמה זו, השיטה היחידה לשינוי ערוצים תהיה לעלות למעלה ברשימת הערוצים ולרדת למטה ברשימת הערוצים. ברגע שהערוץ יוחלט, נצטרך להפעיל VLC בערוץ אותו אנו רוצים לראות.

#!/usr/bin/python3

מעת לעת ייבוא תת -תהליך ייבוא שינה מ- sys import argv מ- gpiozero Import Button Class Station: def _init _ (self): self.channel = 0 self.name = '' self.address = '' self.process = '' class טלוויזיה: def _init _ (עצמי, שם קובץ): self.current_channel = 0 self.channel_list = self.build_channel_list (שם קובץ) self.start_channel () def build_channel_list (עצמי, שם קובץ): עם פתוח (שם קובץ, 'r') בתור m3u: i = 0 עבור שורה ב- m3u: אם line.startswith ('#EXTINF'): this = Station () this.name = line.split (',') [1] שורה = הבא (m3u) this.address = שורה. 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 (עצמי): נסה: תהליך עצמי. kill () למעט: העבר הדפסה ('ערוץ התחל % 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 = לחצן (18) channel_DN = לחצן (23) בעוד נכון: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

לאיטרציה זו של קוד יש לא מעט שיפורים. כעת היא השתמשה במודול בשם gpiozero הנדרש על ידי פטל הפטל כדי לגשת בקלות לפונקציונליות של סיכות GPIO

sudo apt-get להתקין python3-gpiozero

אוֹ

sudo pip התקן gpiozero

כפי שניתן לראות בקוד שלי, בחרתי ב- GPIO 18 ו- GPIO 23 לערוץ UP ולערוץ למטה בהתאמה. לספריית gpiozero יש מחלקה נחמדה לפונקציות כפתורים עבור when_pressed, is_pressed, when_held וכו '. זה עושה את זה די קל. בחרתי ב- when_pressed, המתייחס לפונקציית שיחה חוזרת להפעלה כאשר אות זה מזוהה.

השינוי הגדול האחרון הוא הכללת האפשרות '-q' בשיחת תהליכי המשנה של VLC. זה פשוט מריץ vlc ללא כל הפלט למסוף כדי לשמור אותו ללא עומס, כך שנוכל לראות את הצהרות ההדפסה האינפורמטיביות בקוד.

שלב 4: שלב את החומרה למראה חד

שלב את החומרה כך שתראה חד
שלב את החומרה כך שתראה חד
שלב את החומרה כך שתראה חד
שלב את החומרה כך שתראה חד
שלב את החומרה כך שתראה חד
שלב את החומרה כך שתראה חד

לא הבנתי איך אני רוצה להשיג את זה, וזה יהיה פתרון ייחודי לכל דגם טלוויזיה בשימוש. אני צריך לחשוב על זה היטב ולחקור מסביב לטלוויזיה כדי למצוא מקור חשמל טוב לפאי ברגע שאדחס את המחשב בתוך תא הסוללות המסיבי. שקלתי גם להשתמש בכפתורי השעון לבחירת הערוץ, מכיוון שהם כבר ממוקמים יפה בטלוויזיה, והשעון ממילא לא עובד. אפרסם יותר כאשר אמצא פתרון טוב, אך כאן הפרויקט שלי יסטה במידה רבה מכולם. תהנה משילוב IPTV דמוי טלוויזיה אמיתית!

שלב 5: כוח פי

כוח פי
כוח פי

עבור דגם הטלוויזיה שמצאתי, הוא דורש ספק כוח של 12 וולט. חקרתי סביב הלוח, אך לא ראיתי רגולטורי כוח ברורים עבור 5V, כך שהמקום הברור ביותר להשיג ספק כוח יציב הוא בלוח המעגלים שבו נכנס מחבר החבית עבור 12V. יש בעיה ברורה עם זה. אנחנו לא רוצים לטגן את הפאי, אז נזדקק לווסת כוח. בחרתי בממיר החשמל Step-Down של MP2315. זה לכלוך זול, ופשוט לשימוש. נלחם את כניסת 12VDC ממחבר החבית על הלוח אל סיכות IN+ ו- GND של הממיר, ואת ה- VO+ לסיכה 2 ב- Raspberry Pi, וכן ל- GND.

לפני שזה נעשה, הקפד להפעיל את הממיר ולוודא כי 5V הנכון יוצא מהפלט. בחרתי באפשרות הפשוטה ביותר עם המתח המתכוונן הקשיח. הגוזם יתאים את המתח, אז צפיתי בפלט המתח במולטימטר כשהתכוונתי לגוזם בעזרת מברג.

שלב 6: שילוב כוח

שילוב כוח
שילוב כוח
שילוב כוח
שילוב כוח
שילוב כוח
שילוב כוח

לאחר שנחפר בטלוויזיה, הוחלט כי המקום הטוב ביותר לחלץ חשמל הוא מהשלילה של מחבר החבית ומתג ON/OFF לטלוויזיה, מה שאומר שנוכל להפעיל ולכבות את הזרמים עם הטלוויזיה, במקום זאת כל הזמן מפעיל את ה- pi על ידי משיכה ישירות ממחבר הקנה.

החוטים מולחמו והוזנו לאורך הצד של הלוח הקדמי ליד המארז עד שהגיעו לחלק האחורי של היחידה, שם הוזנו דרך חור שהיה בחלק האחורי של תא הסוללה. ברגע שהם הוזנו, נוכל להכין את קצות הכבלים ולהלחם אותם עד לווסת הכוח. כיוונתי אותו ל- 5V כדי להפעיל אליו את ה- pi וסיכות הכותרת המולחמות אליו, כך שנוכל להפעיל מגשרים נקבה לנקבה מהווסת הכוח ישירות לסט הכותרות של ה- GPIO של ה- pi. בדרך כלל זה לא מומלץ, מכיוון שה- pi בדרך כלל מקבל חשמל דרך ה- UBS, שיש לו רגולטור מוטבע להתנות את 5V, אך מכיוון שהכוח כבר מוסדר הוא אמור להיות בסדר.

יש קצת רעש בקווי השמע מהפעולה הזו, כי יש לולאת קרקע במערכת. ניסיתי הרבה נקודות כוח וקרקע בכל רחבי הלוח בתקווה לתשובה קלה, אך לא מצאתי. הלחמתי גם כבל microUSB לווסת המצב המוחלף בכדי לבדוק אם כוח כוח דרך הרגולטורים הפנימיים של ה- pi יפתור את הבעיה. זה לא קרה. הפתרון עומד להיות בכמה שנאי בידוד של קרקע אודיו. אלה הוזמנו ולא נבנו, מכיוון שהם זולים וארוזים יפה. אתה יכול לאסוף אותם מרוב חנויות אודיו או מחלקות האוטומטיות. זה מה שבחרתי.

שלב 7: פתרון לחצנים לטווח ארוך

פתרון לחצנים לטווח ארוך
פתרון לחצנים לטווח ארוך
פתרון לחצנים לטווח ארוך
פתרון לחצנים לטווח ארוך

אין ספק שהכפתורים לא יישארו על קרש לחם, ולכן צריך להיות פתרון קבוע יותר. תפסתי איזה לוח לוח ישן וזרקתי את המעגל יחד עם כמה סיכות כותרת כדי להקל על הגישה לאותות. כאן תהיה לכולם חילוקי דעות כיצד לחבר או להרכיב את הכפתורים. אני בוחר להגן עליהן ופשוט להצמיד אותן לשלדה כך שהידית המתנדנדת מעל המסך לנשיאה לא מפריעה. אל תהסס לחדש את העיצוב על ידי הוספת מארז מודפס בתלת מימד המחליק הרכבה, משתמש באומים ובברגים, דבקים מהודרים, שילוב כפתורים מקוריים, מה שלא יהיה. כל עוד זה עובד, אין תשובות שגויות.

אלה יותקנו בחלקו החיצוני של המארז, והפטל פי יהיה תחוב בתוך תא הסוללות המרווח מאוד, כך שיהיה צורך לקדוח חור קטן בכדי לאפשר לכבלים לצאת אל תא הסוללה.

שלב 8: בדיקת התאמה אחרונה

בדיקת התאמה סופית
בדיקת התאמה סופית

כל הציוד צריך להיבדק בפעם האחרונה כדי לראות בדיוק היכן צריך לבצע את כל החורים למארז, ואיזה גודל חורים וכו 'צריך לעשות. בנוסף יש לשקול היכן למקם את הרכיבים לנוחות אופטימלית של קישוריות וגישה. סיפור ארוך קצר, וודא שהכל מתאים למקום שאתה חושב שהוא עושה לפני שתפגע בפרוייקט שלך ללא תקנה ותצטרך להוציא את האשכול.

שלב 9: שילוב סופי

שילוב סופי
שילוב סופי
שילוב סופי
שילוב סופי
שילוב סופי
שילוב סופי

עכשיו כל החומרה היא המקום שבו היא צריכה להיות, והכול מתאים בדיוק כמו באג בשטיח. בואו נחתוך דברים! זיהיתי מקום בתא הסוללה שבו אוכל לנתב את כבלי ה- AV החוצה באמצעות הזחה קטנה בפלסטיק. טחנתי אותו בעזרת מטחנת ספסל. זה עשה מזה עבודה די קצרה. השתמשתי בדרמל כדי לטחון פלסטיק נוסף כדי שיתאים למדי לכבלים.

הרכיב האחרון הוא בורר הערוצים. קידחתי חור קטן בתא הסוללה והוצאתי את כל כבלי הכותרת אחד אחד. הכפתורים היו מחוברים, והצמדתי את הלוח למארז הפלסטיק עם שני חצאים של סקוטש דבק מראש. אני מבין שהיו כ- 1200 דרכים טובות יותר לעשות זאת, אבל זה עבד והיה לי כל מה שאני צריך בהישג יד.

שלב 10: תהנה מה- IPTV הבציר שלך

תהנה מה- IPTV הבציר שלך
תהנה מה- IPTV הבציר שלך
תהנה מה- IPTV הבציר שלך
תהנה מה- IPTV הבציר שלך
תהנה מה- IPTV הבציר שלך
תהנה מה- IPTV הבציר שלך

זה בערך מסכם את זה. מצא תוכניות ותהנה מהצפייה. עם זאת, אל תשב קרוב מדי. אתה תרקב את המוח שלך!

יש הרבה מקום לשפר את הפרויקט הזה, אז קח אותו לכל כיוון שאתה רוצה, אבל היה כיף להגיע עד לכאן. באשר לי, אני מפעיל את זה מ- cronjob בעת אתחול מחדש, כך שה- stdout לא תופס את ההודעות מתוך סקריפט ה- python. אני רוצה לתקן את זה כדי שאדע באיזה ערוץ אני נמצא. תוספת טובה נוספת היא דונגל מקלדת אלחוטי בפי. זה יאפשר לך לשנות את רשת ה- wifi אם תצא מהבית עם הטלוויזיה. ללא קשר. זה היה פרויקט מהנה, ואני לא יכול לחכות כדי להתחיל בפרויקט הבא.

מוּמלָץ: