विषयसूची:

रेट्रो इडियट बॉक्स: 10 कदम
रेट्रो इडियट बॉक्स: 10 कदम

वीडियो: रेट्रो इडियट बॉक्स: 10 कदम

वीडियो: रेट्रो इडियट बॉक्स: 10 कदम
वीडियो: Мало кто знает об этой функции БОЛГАРКИ !!! 2024, नवंबर
Anonim
रेट्रो इडियट बॉक्स
रेट्रो इडियट बॉक्स

मुझे अपने स्थानीय थ्रिफ्ट स्टोर में एक शेल्फ पर 1984 का एक पुराना मैग्नावॉक्स पोर्टेबल टेलीविजन मिला। मैंने मन ही मन सोचा, "ओह नीट!" आगे के निरीक्षण पर मैंने उस पर $15 मूल्य का टैग देखा, इसलिए मैंने इसे घर ले जाने और इसमें से कुछ अलग बनाने का फैसला किया। मुझे याद है कि शानदार ब्लैक एंड व्हाइट में सभी महान क्लासिक्स के बच्चे के रूप में फिर से दौड़ना, और इसे फिर से एक वास्तविकता बनाना चाहता था।

समस्या यह है कि वहाँ अब कोई एनालॉग स्टेशन नहीं हैं, और यह किसी भी एटीएससी डिकोडिंग, या किसी भी डिजिटल डिकोडिंग को करने में पूरी तरह से अक्षम है। मैंने किनारे पर एक एवी कनेक्शन की उपस्थिति को नोटिस किया था, और कुछ रास्पबेरी पाई के आसपास बिछा हुआ था, इसलिए मैंने यह पता लगाने के लिए एक साहसिक कार्य शुरू करने का फैसला किया कि मैं इस पर चैनल कैसे स्ट्रीम कर सकता हूं। मैं इसे भी तेज दिखाना चाहता हूं। मैं इसे 9 डी-सेल बैटरी पर नहीं चलाऊंगा, इसलिए मैं बैटरी डिब्बे में आरपीआई को कई अन्य उपहारों के साथ छुपा सकता हूं।

चरण 1: एक अच्छी आईपीटीवी सूची प्राप्त करें

एक अच्छी आईपीटीवी सूची प्राप्त करें
एक अच्छी आईपीटीवी सूची प्राप्त करें

दैनिक आईपीटीवी सूची में देश द्वारा आयोजित मुफ्त आईपीटीवी स्टेशनों का शानदार चयन है। पसंद का देश चुनें, और m3u फ़ाइल डाउनलोड करें।

इसमें मौजूद सॉफ़्टवेयर के लिए, m3u एक अपेक्षित प्रारूप है। आप यहां प्रारूप की बारीकियों के बारे में अधिक पढ़ सकते हैं।

चरण 2: प्रारंभिक कोड प्रयोग

हम जिस पायथन कोड को लिखने जा रहे हैं, वह m3u फ़ाइल को स्टेशनों की सूची में पार्स करता है।

#!/usr/bin/python3

sys आयात argv वर्ग स्टेशन से उपप्रक्रिया आयात करें: def _init_(self): self.channel = 0 self.name = '' self.address = '' channel_list = ओपन के साथ ('./us-m3uplaylist-2020-08- 17-1.m3u', 'r') m3u के रूप में: i = 0 m3u में लाइन के लिए: if line.startswith('#EXTINF'): this = Station() this.name = line.split(', ') [१] लाइन = नेक्स्ट (एम३यू) यह। पता = लाइन। स्ट्रिप () यह।, '--intf', 'dummy', '--fullscreen', channel_list[int(argv[1])].address])

आइए इसे तोड़ दें।

#!/usr/bin/python3

यह बैश को बताता है कि हम इस फ़ाइल की व्याख्या करने के लिए python3 का उपयोग करेंगे।

आयात उपप्रक्रियासे sys आयात argv

हमें अपना vlc इंस्टेंस लॉन्च करने के लिए सबप्रोसेस मॉड्यूल की आवश्यकता होगी, और हमें यह चुनने के लिए argv की आवश्यकता होगी कि हम किस चैनल में vlc लॉन्च करेंगे।

क्लास स्टेशन: def _init_(self): self.channel = 0 self.name = '' self.address = ''

यह स्टेशन नामक एक वर्ग को परिभाषित करता है। प्रत्येक चैनल में एक चैनल नंबर होगा, चैनल का नाम जैसा कि m3u फ़ाइल से लिया गया है, और एक पता होगा कि वह चैनल कहाँ से स्ट्रीमिंग कर रहा है।

channel_list =

यह एक सूची है जो m3u फ़ाइल से पार्स किए गए सभी चैनलों को संग्रहीत करेगी।

के साथ open('./us-m3uplaylist-2020-08-17-1.m3u', 'r') as m3u: i = 0 लाइन के लिए m3u में: if line.startswith('#EXTINF'): यह = स्टेशन () 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_list को स्टेशनों से भरता है।

प्रक्रिया = सबप्रोसेस। पॉपेन (['वीएलसी', '--लूप', '--इंटफ', 'डमी', '--फुलस्क्रीन', चैनल_लिस्ट [इंट (argv [1])]। पता])

सबप्रोसेस लाइब्रेरी पायथन को प्रक्रियाओं (कार्यक्रमों) को कॉल करने की अनुमति देती है और एक पीआईडी (प्रक्रिया आईडी) लौटाती है। यह पाइथन को इतिहास फ़ाइल को भरने के बिना "सही ढंग से" प्रोग्राम लॉन्च करने और बंद करने में सक्षम होने में सक्षम बनाता है, या सामान्य "सिस्टम" कॉल के साथ अधिक मनमानी कोड चलाने की इजाजत देता है। Popen के तर्क के रूप में उपयोग किए जाने वाले सरणी का प्रत्येक तत्व कमांड लाइन में टाइप किया गया है।

vlc --loop --intf dummy --fullscreen address

उपरोक्त कमांड वह है जिसे चलाने के लिए वांछित है, --loop विकल्प के साथ स्ट्रीम पॉज़िंग के साथ कुछ मुद्दों को ठीक करता है जबकि अगले भाग लोड (अजीब m3u8 मुद्दे), --intf डमी इंटरफ़ेस के बिना वीएलसी शुरू करता है, बस एक स्क्रीन, --फुलस्क्रीन वीडियो को फ़ुलस्क्रीन मोड में लॉन्च करता है (कोई रास्ता नहीं!), और पता स्ट्रीम का पता है। जैसा कि आप कोड में देख सकते हैं, हम सूची के चैनल नंबर से पता प्रदान कर रहे हैं, जो रनटाइम पर argv स्टेटमेंट के माध्यम से प्रदान किया जाता है। इस फ़ाइल को tv_channels.py के रूप में सहेजें, अपनी प्लेलिस्ट को इंगित करने के लिए पायथन फ़ाइल में प्लेलिस्ट स्थान बदलें, और आप निम्नानुसार कोड चला सकते हैं:

अजगर tv_channels.py

चरण 3: GPIO जोड़ें

जीपीआईओ जोड़ें
जीपीआईओ जोड़ें
जीपीआईओ जोड़ें
जीपीआईओ जोड़ें

योजनाबद्ध दो GPIO पिनों को बटन के लिए उपयोग में दिखाता है, और प्रत्येक में बटन दबाने के बाद GPIO पिन को उच्च खींचने के लिए एक पुल अप रेसिस्टर होता है। पहले से परिभाषित कोड को GPIO क्षमता जोड़कर ऑपरेशन को थोड़ा और सहज बनाने के लिए परिष्कृत किया जा सकता है। यह हमें वास्तविक टीवी के लिए कीबोर्ड और argv स्टेटमेंट के बजाय बटन के साथ चैनल बदलने की अनुमति देता है।

ध्यान देने वाली पहली बात यह है कि मेरे पास टेलीविजन को एक वर्ग के रूप में परिभाषित किया गया है। एक टेलीविजन होने के लिए, हमें एक मौजूदा चैनल पर होना चाहिए, संभावित चैनलों की एक सूची होनी चाहिए, और चैनलों को बदलने की क्षमता होनी चाहिए। इस उदाहरण में, चैनल बदलने का एकमात्र तरीका चैनल सूची को ऊपर ले जाना और चैनल सूची को नीचे ले जाना होगा। एक बार चैनल तय हो जाने के बाद, हमें उस चैनल पर वीएलसी शुरू करना होगा जिसे हम देखना चाहते हैं।

#!/usr/bin/python3

समय से आयात नींद आयात उपप्रक्रिया से sys आयात argv gpiozero आयात से बटन वर्ग स्टेशन: def _init_(self): self.channel = 0 self.name = '' self.address = '' self.process = '' क्लास टेलीविजन: def _init_(स्वयं, फ़ाइल नाम): self.current_channel = 0 self.channel_list = self.build_channel_list(filename) self.start_channel() def build_channel_list(self, filename): ओपन (फाइलनाम, 'r') के साथ m3u: i = 0 m3u में लाइन के लिए: if line.startswith('#EXTINF'): this = Station() this.name = line.split(', ')[1] line = next(m3u) this.address = line. स्ट्रिप () यह.चैनल = मैं सेल्फ.चैनल_लिस्ट.एपेंड (यह) i = i + 1 def channel_up(self): self.current_channel = self.current_channel + १ अगर 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(self): प्रयास करें: स्वयं प्रक्रिया। किल () को छोड़कर: पास प्रिंट ('स्टार्टिंग चैनल% d'% self.current_channel) self.process = subprocess. Popen(['vlc', '-q', '--loop', '--intf', ' dummy', '--fullscreen', self.channel_list[self.current_channel].address]) यह = टेलीविजन ('./us-m3uplaylist-2020-08-17-1.m3u') channel_UP = Button(18) channel_DN = बटन(२३) जबकि ट्रू: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

कोड के इस पुनरावृत्ति में कुछ सुधार हैं। यह अब gpiozero नामक एक मॉड्यूल का उपयोग करता है जो कि रास्पबेरी पाई द्वारा GPIO पिन की कार्यक्षमता तक आसानी से पहुंचने के लिए आवश्यक है।

sudo apt-get install python3-gpiozero

या

सुडो पाइप जीपीओजेरो स्थापित करें

जैसा कि मेरे कोड में देखा गया है, मैंने चैनल UP और चैनल DOWN के लिए क्रमशः GPIO 18 और GPIO 23 को चुना है। gpiozero लाइब्रेरी में जब_प्रेस, is_pressed, जब_हेल्ड, आदि के लिए बटन फ़ंक्शन के लिए एक अच्छा वर्ग है। इससे यह बहुत आसान हो जाता है। मैंने जब_प्रेस को चुना, जो इस सिग्नल का पता चलने पर चलने के लिए कॉलबैक फ़ंक्शन को संदर्भित करता है।

अंतिम बड़ा परिवर्तन VLC सबप्रोसेस कॉल में '-q' विकल्प को शामिल करना है। यह केवल टर्मिनल के सभी आउटपुट के बिना वीएलसी चलाता है ताकि इसे अव्यवस्था से मुक्त रखा जा सके ताकि हम कोड में सूचनात्मक प्रिंट स्टेटमेंट देख सकें।

चरण 4: तेज दिखने के लिए हार्डवेयर को एकीकृत करें

तेज दिखने के लिए हार्डवेयर को एकीकृत करें
तेज दिखने के लिए हार्डवेयर को एकीकृत करें
तेज दिखने के लिए हार्डवेयर को एकीकृत करें
तेज दिखने के लिए हार्डवेयर को एकीकृत करें
तेज दिखने के लिए हार्डवेयर को एकीकृत करें
तेज दिखने के लिए हार्डवेयर को एकीकृत करें

मुझे नहीं पता कि मैं इसे कैसे पूरा करना चाहता हूं, और यह उपयोग में आने वाले प्रत्येक मॉडल टीवी के लिए एक अनूठा समाधान होगा। एक बार जब मैं बड़े बैटरी डिब्बे के अंदर कंप्यूटर को रट लेता हूं तो मुझे पीआई के लिए एक अच्छा पावर स्रोत खोजने के लिए इस बारे में और टेलीविजन के चारों ओर जांच करने की आवश्यकता होती है। मैंने चैनल चयन के लिए क्लॉक बटन का उपयोग करने पर भी विचार किया है, क्योंकि वे पहले से ही टेलीविज़न पर खूबसूरती से रखे गए हैं, और घड़ी वैसे भी काम नहीं करती है। जब मैं एक अच्छा समाधान ढूंढूंगा तो मैं और पोस्ट करूंगा, लेकिन यह वह जगह है जहां मेरी परियोजना हर किसी से अलग हो जाएगी। वास्तविक टीवी जैसे आईपीटीवी एकीकरण का आनंद लें!

चरण 5: पाई पावर

पाई पावर
पाई पावर

मुझे मिले मॉडल टीवी के लिए, इसे 12V बिजली की आपूर्ति की आवश्यकता है। मैंने बोर्ड के चारों ओर जांच की, लेकिन 5V के लिए कोई स्पष्ट बिजली नियामक नहीं देखा, इसलिए स्थिर बिजली आपूर्ति प्राप्त करने के लिए सबसे स्पष्ट स्थान सर्किट बोर्ड पर है जहां 12V के लिए बैरल कनेक्टर आता है। इसके साथ एक स्पष्ट समस्या है. हम पाई को फ्राई नहीं करना चाहते हैं, इसलिए हमें एक पावर रेगुलेटर की आवश्यकता होगी। मैंने MP2315 स्टेप-डाउन पावर कन्वर्टर को चुना है। यह गंदगी सस्ती है, और उपयोग में आसान है। हम 12VDC इनपुट को PCB पर बैरल कनेक्टर से कनवर्टर के IN+ और GND पिन में, और VO+ को रास्पबेरी पाई पर 2 पिन करने के साथ-साथ GND में मिलाप करेंगे।

ऐसा करने से पहले, कनवर्टर को चालू करना सुनिश्चित करें और सुनिश्चित करें कि उचित 5V आउटपुट से बाहर आ रहा है। मैंने हार्डवार्ड एडजस्टेबल वोल्टेज के साथ सबसे सरल विकल्प चुना। ट्रिमर वोल्टेज को समायोजित करेगा, इसलिए मैंने एक मल्टीमीटर के साथ वोल्टेज आउटपुट को देखा क्योंकि मैंने ट्रिमर को एक पेचकश के साथ समायोजित किया था।

चरण 6: शक्ति को एकीकृत करना

एकीकृत शक्ति
एकीकृत शक्ति
एकीकृत शक्ति
एकीकृत शक्ति
एकीकृत शक्ति
एकीकृत शक्ति

टेलीविजन के चारों ओर खुदाई करने के बाद, यह निर्णय लिया गया कि बिजली को हथियाने के लिए सबसे अच्छी जगह बैरल कनेक्टर के नकारात्मक और टेलीविजन पर / बंद स्विच से थी, जिसका अर्थ है कि हम टेलीविजन के साथ धाराओं को चालू और बंद कर सकते हैं, बल्कि यह कि बैरल कनेक्टर से सीधे खींचकर लगातार पाई को पावर देना।

तारों को मामले के बगल में पीसीबी के किनारे में मिलाया गया और तब तक खिलाया गया जब तक कि वे यूनिट के पीछे नहीं पहुंच गए, जहां उन्हें बैटरी डिब्बे के पीछे एक छेद के माध्यम से खिलाया गया था। एक बार जब उन्हें खिलाया गया, तो हम केबल बिछाने के सिरों को तैयार कर सकते हैं और उन्हें बिजली नियामक में मिलाप कर सकते हैं। मैंने इसे 5V के लिए पीआई और सोल्डरेड हेडर पिन को पावर देने के लिए ट्यून किया ताकि हम पावर रेगुलेटर से सीधे पीआई के जीपीआईओ हेडर सेट पर मादा जंपर्स चला सकें। यह आमतौर पर सलाह नहीं दी जाती है, क्योंकि पीआई को आम तौर पर यूबीएस के माध्यम से बिजली मिलती है, जिसमें 5 वी की स्थिति के लिए एक नियामक इनलाइन होता है, लेकिन चूंकि बिजली पहले से ही विनियमित की जा रही है, यह ठीक होना चाहिए।

ऐसा करने से ऑडियो लाइनों पर कुछ शोर होता है, क्योंकि सिस्टम में ग्राउंड लूप होता है। मैंने एक आसान उत्तर की उम्मीद में पूरे बोर्ड में कई शक्ति और जमीनी बिंदुओं की कोशिश की, लेकिन कोई भी नहीं मिला। मैंने स्विच मोड रेगुलेटर में एक माइक्रोयूएसबी केबल भी मिलाया, यह देखने के लिए कि क्या पीआई के आंतरिक नियामकों के माध्यम से बिजली को मजबूर करने से समस्या हल हो जाएगी। यह नहीं किया। समाधान कुछ ऑडियो ग्राउंड आइसोलेशन ट्रांसफार्मर में होने वाला है। इन्हें निर्मित करने के बजाय ऑर्डर किया गया था, क्योंकि ये सस्ते और अच्छी तरह से पैक किए गए हैं। आप उन्हें अधिकांश ऑटो ऑडियो स्टोर या विभागों से प्राप्त कर सकते हैं। यही मैंने चुना है।

चरण 7: दीर्घकालिक बटन समाधान

लॉन्ग टर्म बटन सॉल्यूशन
लॉन्ग टर्म बटन सॉल्यूशन
लॉन्ग टर्म बटन सॉल्यूशन
लॉन्ग टर्म बटन सॉल्यूशन

निस्संदेह, बटन ब्रेडबोर्ड पर नहीं रहेंगे, इसलिए अधिक स्थायी समाधान की आवश्यकता है। मैंने कुछ पुराने प्रोटोबार्ड को पकड़ा और कुछ हेडर पिन के साथ सर्किट को एक साथ फेंक दिया ताकि सिग्नल तक पहुंचना आसान हो सके। यह वह जगह है जहां बटनों को कैसे संलग्न या माउंट किया जाए, इस पर सभी की राय अलग होगी। मैं उन्हें प्रोटोबार्ड करना चुन रहा हूं और बस उन्हें चेसिस से इस तरह जोड़ रहा हूं कि स्क्रीन पर ले जाने के लिए जो हैंडल झूलता है वह हस्तक्षेप नहीं करता है। एक 3 डी प्रिंटेड केस जोड़कर डिज़ाइन को चर्चित करने के लिए स्वतंत्र महसूस करें जो माउंटिंग को सुचारू करता है, नट और बोल्ट, फैंसी चिपकने का उपयोग करें, मूल बटन को एकीकृत करें, जो भी हो। जब तक यह काम करता है, कोई गलत उत्तर नहीं है।

इन्हें केस के बाहर की तरफ लगाया जाएगा, और रास्पबेरी पाई को बहुत कमरे वाले बैटरी डिब्बे के अंदर टक किया जाएगा, इसलिए केबल को बैटरी कम्पार्टमेंट से बाहर निकलने की अनुमति देने के लिए एक छोटा छेद ड्रिल करने की आवश्यकता होगी।

चरण 8: अंतिम फ़िट जाँच

फाइनल फिट चेक
फाइनल फिट चेक

सभी उपकरणों को एक आखिरी बार फिट होने की जरूरत है, यह देखने के लिए कि चेसिस में सभी छेदों को बनाने की आवश्यकता है, और किस आकार के छेद आदि बनाने की आवश्यकता है। इसके अतिरिक्त इस बात पर भी विचार किया जाना चाहिए कि कनेक्टिविटी और पहुंच की इष्टतम आसानी के लिए घटकों को कहां रखा जाए। लंबी कहानी छोटी, सुनिश्चित करें कि आपके प्रोजेक्ट को अपूरणीय क्षति पहुंचाने से पहले सब कुछ ठीक उसी तरह फिट बैठता है जहां आपको लगता है कि यह करता है।

चरण 9: अंतिम एकीकरण

अंतिम एकीकरण
अंतिम एकीकरण
अंतिम एकीकरण
अंतिम एकीकरण
अंतिम एकीकरण
अंतिम एकीकरण

अब सारा हार्डवेयर वह है जहां उसे होना चाहिए, और यह सब ठीक उसी तरह फिट बैठता है जैसे कि एक गलीचा में बग के रूप में। चलो चीजें काटते हैं! मैंने बैटरी डिब्बे पर एक जगह की पहचान की जहां मैं प्लास्टिक में एक छोटे से इंडेंटेशन का उपयोग करके एवी केबल्स को रूट कर सकता था। मैंने इसे बेंच ग्राइंडर से जमीन पर गिरा दिया। इसने इसका बहुत छोटा काम किया। मैंने अधिक प्लास्टिक को पीसने के लिए एक डरमेल का उपयोग किया ताकि इसे केबलों के लिए बहुत अच्छा बनाया जा सके।

अंतिम घटक चैनल चयनकर्ता है। मैंने बैटरी डिब्बे में एक छोटा सा छेद ड्रिल किया और हेडर केबल्स को एक-एक करके उसमें से बाहर निकाल दिया। बटन जुड़े हुए थे, और मैंने प्रोटोबार्ड को प्लास्टिक चेसिस से पूर्व-चिपकने वाले वेल्क्रो के दो हिस्सों के साथ जोड़ा। मुझे लगता है कि ऐसा करने के लगभग 1200 बेहतर तरीके थे, लेकिन यह काम कर गया, और मेरे पास वह सब कुछ था जो मुझे चाहिए था।

चरण 10: अपने पुराने आईपीटीवी का आनंद लें

अपने पुराने आईपीटीवी का आनंद लें
अपने पुराने आईपीटीवी का आनंद लें
अपने पुराने आईपीटीवी का आनंद लें
अपने पुराने आईपीटीवी का आनंद लें
अपने पुराने आईपीटीवी का आनंद लें
अपने पुराने आईपीटीवी का आनंद लें

यही इसका सारांश है। शो ढूंढें और देखने का मज़ा लें। हालांकि, बहुत करीब मत बैठो। तुम अपना दिमाग खराब करोगे!

इस प्रोजेक्ट को बेहतर बनाने के लिए बहुत जगह है, इसलिए इसे किसी भी दिशा में ले जाएं, लेकिन इस तक पहुंचने में मज़ा आया। मेरे लिए, मैं इसे रीबूट पर क्रोनजॉब से चलाता हूं, इसलिए स्टडआउट पाइथन लिपि से संदेशों को कैप्चर नहीं करता है। मैं इसे ठीक करना चाहता हूं, इसलिए मुझे पता है कि मैं किस चैनल पर हूं। एक और अच्छा जोड़ पीआई पर एक वायरलेस कीबोर्ड डोंगल है। यदि आप टीवी के साथ अपना घर छोड़ते हैं तो यह आपको वाईफाई नेटवर्क बदलने देगा। ध्यान दिए बगैर। यह एक मजेदार प्रोजेक्ट था, और मैं अगले प्रोजेक्ट को शुरू करने के लिए और इंतजार नहीं कर सकता।

सिफारिश की: