Πίνακας περιεχομένων:

Retro Idiot Box: 10 Βήματα
Retro Idiot Box: 10 Βήματα

Βίντεο: Retro Idiot Box: 10 Βήματα

Βίντεο: Retro Idiot Box: 10 Βήματα
Βίντεο: 10 Винтажных пожизненных хаков, которые на самом деле все еще работают... 2024, Ιούλιος
Anonim
Ρετρό κουτί ηλίθιων
Ρετρό κουτί ηλίθιων

Βρήκα μια παλιά φορητή τηλεόραση Magnavox από το 1984 που καθόταν σε ένα ράφι στο τοπικό μου κατάστημα. Σκέφτηκα μέσα μου, "Ω ΩΡΑΙΑ!" Μετά από περαιτέρω έλεγχο, παρατήρησα μια τιμή 15 $ σε αυτό, έτσι αποφάσισα να το πάρω σπίτι και να φτιάξω κάτι πικάντικο από αυτό. Θυμάμαι ότι έβλεπα επαναλήψεις ως παιδί όλων των σπουδαίων κλασικών σε ένδοξο ασπρόμαυρο και ήθελα να το κάνω ξανά πραγματικότητα.

Το πρόβλημα είναι ότι δεν υπάρχουν πλέον αναλογικοί σταθμοί εκεί έξω, και αυτό είναι εντελώς ανίκανο να κάνει οποιαδήποτε αποκωδικοποίηση ATSC ή οποιαδήποτε ψηφιακή αποκωδικοποίηση. Παρατήρησα την παρουσία μιας σύνδεσης AV στο πλάι και είχα μερικά βατόμουρα pi, έτσι αποφάσισα να ξεκινήσω μια περιπέτεια για να καταλάβω πώς θα μπορούσα να μεταδώσω κανάλια σε αυτό. Θέλω επίσης να το κάνω να μοιάζει κοφτερό. Δεν θα το χρησιμοποιώ με τις 9 μπαταρίες D-cell, ώστε να μπορώ να κρύψω το rpi στο διαμέρισμα της μπαταρίας με μια σειρά από άλλα καλούδια.

Βήμα 1: Αποκτήστε μια καλή λίστα IPTV

Αποκτήστε μια καλή λίστα IPTV
Αποκτήστε μια καλή λίστα IPTV

Η Daily IPTV List διαθέτει μια φανταστική επιλογή δωρεάν iptv σταθμών που οργανώνονται ανά χώρα. Επιλέξτε τη χώρα επιλογής και κάντε λήψη του αρχείου m3u.

Για το λογισμικό που υπάρχει σε αυτό, το m3u είναι μια απαραίτητη μορφή. Μπορείτε να διαβάσετε περισσότερα για τις ιδιαιτερότητες της μορφής εδώ.

Βήμα 2: Πείραμα προκαταρκτικού κώδικα

Ο κώδικας python που πρόκειται να γράψουμε αναλύει το αρχείο m3u σε μια λίστα σταθμών.

#!/usr/bin/python3

εισαγωγή υποεπεξεργασίας από 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 και θα χρειαστούμε το argv για να επιλέξουμε σε ποιο κανάλι θα ξεκινήσουμε το vlc.

class Station: 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 και γεμίζει τη λίστα καναλιών με σταθμούς.

process = subprocess. Popen (['vlc', '--loop', '--intf', 'dummy', '--fullscreen', channel_list [int (argv [1])]. διεύθυνση])

η βιβλιοθήκη υποεπεξεργασίας επιτρέπει στην python να καλεί διαδικασίες (προγράμματα) και επιστρέφει ένα PID (Process ID). Αυτό επιτρέπει στην python να μπορεί να διαχειρίζεται την εκκίνηση και το κλείσιμο προγραμμάτων "σωστά" χωρίς να συμπληρώνει το αρχείο ιστορικού ή να επιτρέπει την εκτέλεση περισσότερων αυθαίρετων κώδικων με γενικές κλήσεις "συστήματος". Κάθε στοιχείο του πίνακα που χρησιμοποιείται ως όρισμα στο Popen είναι όπως πληκτρολογείται στη γραμμή εντολών.

vlc --loop --intf εικονικές -πλήρεις διευθύνσεις οθόνης

Η παραπάνω εντολή είναι η επιθυμητή εκτέλεση, με την επιλογή -loop να διορθώνει ορισμένα προβλήματα με παύση ροής ενώ τα επόμενα κομμάτια φορτώνουν (περίεργα ζητήματα m3u8), ξεκινά το βίντεο σε λειτουργία πλήρους οθόνης (ΟΧΙ!) και η διεύθυνση είναι η διεύθυνση της ροής. Όπως μπορείτε να δείτε στον κώδικα, παρέχουμε τη διεύθυνση από τον αριθμό καναλιού της λίστας, ο οποίος παρέχεται κατά την εκτέλεση μέσω της δήλωσης argv. Αποθηκεύστε αυτό το αρχείο ως tv_channels.py, αλλάξτε τη θέση της λίστας αναπαραγωγής στο αρχείο python για να τον δείξετε στη λίστα αναπαραγωγής σας και μπορείτε να εκτελέσετε τον κώδικα ως εξής:

python tv_channels.py

Βήμα 3: Προσθέστε GPIO

Προσθήκη GPIO
Προσθήκη GPIO
Προσθήκη GPIO
Προσθήκη GPIO

Το σχήμα δείχνει τις δύο καρφίτσες GPIO που χρησιμοποιούνται για τα κουμπιά, και κάθε μία έχει αντίσταση έλξης για να κρατήσει την καρφίτσα GPIO τραβηγμένη ψηλά μετά το πάτημα του κουμπιού. Ο κωδικός που ορίστηκε προηγουμένως μπορεί να βελτιωθεί για να κάνει τη λειτουργία λίγο πιο απρόσκοπτη προσθέτοντας δυνατότητα GPIO. Αυτό μας επιτρέπει να αλλάξουμε το κανάλι με κουμπιά, αντί για δηλώσεις πληκτρολογίου και argv, όπως ακριβώς για μια τηλεόραση πραγματικής πραγματικότητας.

Το πρώτο πράγμα που πρέπει να σημειωθεί είναι ότι έχω την τηλεόραση ως κατηγορία. Για να είμαστε τηλεόραση, πρέπει να είμαστε σε ένα τρέχον κανάλι, να έχουμε μια λίστα με πιθανά κανάλια και να έχουμε τη δυνατότητα να αλλάξουμε κανάλια. Σε αυτό το παράδειγμα, η μόνη μέθοδος αλλαγής καναλιών θα είναι η μετακίνηση προς τα πάνω στη λίστα καναλιών και η μετακίνηση προς τα κάτω στη λίστα καναλιών. Μόλις αποφασιστεί το κανάλι, θα πρέπει να ξεκινήσουμε το VLC στο κανάλι που θέλουμε να δούμε.

#!/usr/bin/python3

από το χρόνο εισαγωγή υπέρ -διαδικασία εισαγωγής ύπνου από sys εισαγωγή argv από gpiozero εισαγωγή Κουμπί κλάσης Σταθμός: def _init _ (self): self.channel = 0 self.name = "" self.address = "" self.process = "" class Τηλεόραση: def _init _ (self, όνομα αρχείου): self.current_channel = 0 self.channel_list = self.build_channel_list (όνομα αρχείου) self.start_channel () def build_channel_list (self, όνομα αρχείου): με ανοιχτό (όνομα αρχείου, '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 () εκτός από: περάστε την εκτύπωση ("κανάλι εκκίνησης % d ' % self.current_channel) self.process = subprocess. Popen ([' vlc ',' -q ',' --loop ',' --intf ',' ομοίωμα ',' --fullscreen ', self.channel_list [self.current_channel].address]) this = Τηλεόραση ('./ us-m3uplaylist-2020-08-17-1.m3u ') channel_UP = Κουμπί (18) channel_DN = Κουμπί (23) ενώ είναι True: channel_UP.when_pressed = this.channel_up channel_DN.when_pressed = this.channel_down

Αυτή η επανάληψη κώδικα έχει αρκετές βελτιώσεις. χρησιμοποίησε τώρα μια μονάδα που ονομάζεται gpiozero που απαιτείται από το raspberry pi για να έχει εύκολη πρόσβαση στη λειτουργικότητα των ακίδων GPIO

sudo apt-get install python3-gpiozero

ή

sudo pip εγκατάσταση gpiozero

Όπως φαίνεται στον κωδικό μου, επέλεξα το GPIO 18 και το GPIO 23 για το κανάλι UP και το κανάλι DOWN αντίστοιχα. Η βιβλιοθήκη gpiozero διαθέτει μια ωραία τάξη για λειτουργίες κουμπιών όταν είναι πατημένο, πατημένο, όταν κρατηθεί κλπ. Αυτό το καθιστά αρκετά εύκολο. Επέλεξα το when_pressed, το οποίο αναφέρεται σε μια λειτουργία επανάκλησης για εκτέλεση όταν ανιχνεύεται αυτό το σήμα.

Η τελευταία σημαντική αλλαγή είναι η συμπερίληψη της επιλογής '-q' στην κλήση υποεπεξεργασίας VLC. Αυτό απλώς εκτελεί vlc χωρίς όλη την έξοδο στο τερματικό για να διατηρείται χωρίς ακαταστασία, ώστε να βλέπουμε τις ενημερωτικές δηλώσεις εκτύπωσης στον κώδικα.

Βήμα 4: Ενσωματώστε το υλικό για να φαίνεται πιο ευκρινές

Ενσωματώστε το υλικό για να φαίνεται σαφές
Ενσωματώστε το υλικό για να φαίνεται σαφές
Ενσωματώστε το υλικό για να φαίνεστε ευκρινές
Ενσωματώστε το υλικό για να φαίνεστε ευκρινές
Ενσωματώστε το υλικό για να φαίνεστε ευκρινές
Ενσωματώστε το υλικό για να φαίνεστε ευκρινές

Δεν έχω καταλάβει πώς θέλω να το πετύχω αυτό και θα είναι μια μοναδική λύση για κάθε μοντέλο τηλεόρασης που χρησιμοποιείται. Πρέπει να το σκεφτώ πολύ και να ψάξω γύρω από την τηλεόραση για να βρω μια καλή πηγή ενέργειας για το pi μόλις στριμώξω τον υπολογιστή μέσα στο τεράστιο διαμέρισμα μπαταριών. Έχω σκεφτεί επίσης να χρησιμοποιήσω τα κουμπιά ρολογιού για την επιλογή καναλιού, καθώς είναι ήδη όμορφα τοποθετημένα στην τηλεόραση και το ρολόι δεν λειτουργεί ούτως ή άλλως. Θα αναρτήσω περισσότερα όταν βρω μια καλή λύση, αλλά εδώ το έργο μου θα διαφοροποιηθεί πολύ από αυτό των άλλων. Απολαύστε την ενσωμάτωση IPTV που μοιάζει με πραγματική τηλεόραση!

Βήμα 5: Pi Power

Pi Power
Pi Power

Για το μοντέλο τηλεόρασης που βρήκα, απαιτεί τροφοδοτικό 12V. Έψαξα γύρω από την πλακέτα, αλλά δεν είδα κανέναν προφανή ρυθμιστή ισχύος για 5V, οπότε το πιο προφανές μέρος για να έχετε σταθερή τροφοδοσία είναι στην πλακέτα κυκλώματος όπου μπαίνει ο συνδετήρας κάννης για τα 12V. Υπάρχει ένα προφανές πρόβλημα με αυτό Το δεν θέλουμε να τηγανίσουμε το πι, οπότε θα χρειαστούμε έναν ρυθμιστή ισχύος. Έχω επιλέξει το MP2315 Step-Down Power Converter. Είναι βρώμικο φθηνό και απλό στη χρήση. Θα κολλήσουμε την είσοδο 12VDC από τον σύνδεσμο βαρελιού στο PCB στις ακίδες IN+ και GND του μετατροπέα και το VO+ στο pin 2 στο Raspberry Pi, καθώς και ένα GND.

ΠΡΙΝ γίνει αυτό, βεβαιωθείτε ότι έχετε ενεργοποιήσει τον μετατροπέα και βεβαιωθείτε ότι το κατάλληλο 5V βγαίνει από την έξοδο. Επέλεξα την πιο απλή επιλογή με τη σταθερή καλώδιο ρυθμιζόμενης τάσης. Το τρίμερ θα ρυθμίσει την τάση, οπότε παρακολούθησα την έξοδο τάσης με ένα πολύμετρο καθώς ρύθμισα το τρίμερ με ένα κατσαβίδι.

Βήμα 6: Ενσωμάτωση ισχύος

Ενσωμάτωση ισχύος
Ενσωμάτωση ισχύος
Ενσωμάτωση ισχύος
Ενσωμάτωση ισχύος
Ενσωμάτωση ισχύος
Ενσωμάτωση ισχύος

Αφού σκάψαμε γύρω από την τηλεόραση, αποφασίστηκε ότι το καλύτερο μέρος για να πάρεις ενέργεια ήταν το αρνητικό του συνδετήρα κάννης και του διακόπτη ON/OFF της τηλεόρασης, πράγμα που σημαίνει ότι μπορούμε να ενεργοποιούμε και να απενεργοποιούμε τα ρεύματα με την τηλεόραση, μάλλον συνεχώς τροφοδοτώντας το pi τραβώντας απευθείας από τον σύνδεσμο της κάννης.

Τα καλώδια συγκολλήθηκαν και τροφοδοτήθηκαν κατά μήκος της πλευράς του PCB δίπλα στη θήκη μέχρι να φτάσουν στο πίσω μέρος της μονάδας, όπου τροφοδοτήθηκαν από μια τρύπα που ήταν στο πίσω μέρος του χώρου μπαταριών. Μόλις τροφοδοτηθούν, μπορούμε να προετοιμάσουμε τα άκρα της καλωδίωσης και να τα κολλήσουμε στον ρυθμιστή ισχύος. Το συντονισα για 5V για να τροφοδοτησω το pi και συγκολλησα καρφιτσες κεφαλιας σε αυτο, οπως μπορουμε να κανουμε τρεξιμο γυναικων προς γυναικων jumper απο τον ρυθμιστη δυναμης απευθείας στο σετ κεφαλιων GPIO του pi. Αυτό συνήθως δεν συνιστάται, καθώς το pi γενικά τροφοδοτείται μέσω του UBS, το οποίο διαθέτει ρυθμιστή για να ρυθμίζει τα 5V, αλλά δεδομένου ότι η ισχύς ρυθμίζεται ήδη, θα πρέπει να είναι εντάξει.

Υπάρχει κάποιος θόρυβος στις γραμμές ήχου από αυτό, επειδή υπάρχει ένας βρόχος γείωσης στο σύστημα. Δοκίμασα πολλά σημεία ισχύος και εδάφους σε όλο τον πίνακα ελπίζοντας σε μια εύκολη απάντηση, αλλά δεν βρήκα κανένα. Συγκόλλησα επίσης ένα καλώδιο microUSB στον ρυθμιστή αλλαγής λειτουργίας για να δω εάν η αναγκαστική τροφοδοσία μέσω των εσωτερικών ρυθμιστών του pi θα ταξινομήσει το ζήτημα. Δεν το έκανε. Η λύση θα βρεθεί σε μερικούς μετασχηματιστές ηχομόνωσης γείωσης. Αυτά παραγγέλθηκαν παρά κατασκευάστηκαν, επειδή είναι φθηνά και όμορφα συσκευασμένα. Μπορείτε να τα παραλάβετε από τα περισσότερα καταστήματα ή τμήματα αυτόματου ήχου. Αυτό επέλεξα.

Βήμα 7: Λύση μακροπρόθεσμου κουμπιού

Μακροπρόθεσμη λύση κουμπιού
Μακροπρόθεσμη λύση κουμπιού
Μακροπρόθεσμη λύση κουμπιού
Μακροπρόθεσμη λύση κουμπιού

Αναμφίβολα, τα κουμπιά δεν θα παραμείνουν σε ένα breadboard, οπότε πρέπει να υπάρχει μια πιο μόνιμη λύση. Πήρα λίγο παλιό protoboard και έριξα το κύκλωμα μαζί με μερικές καρφίτσες κεφαλίδας για να είναι εύκολη η πρόσβαση στα σήματα. Αυτό είναι όπου όλοι θα έχουν διαφορετική άποψη σχετικά με τον τρόπο σύνδεσης ή τοποθέτησης των κουμπιών. Επιλέγω να τα πρωτοπλάρω και απλά να τα συνδέσω στο πλαίσιο έτσι ώστε να μην παρεμβαίνει η λαβή που περιστρέφεται πάνω από την οθόνη για μεταφορά. Μη διστάσετε να εκτυπώσετε το σχέδιο προσθέτοντας μια τρισδιάστατη θήκη εκτύπωσης που εξομαλύνει την τοποθέτηση, χρησιμοποιήστε παξιμάδια και μπουλόνια, φανταχτερά συγκολλητικά, ενσωματώστε αυθεντικά κουμπιά, οτιδήποτε. Όσο λειτουργεί, δεν υπάρχουν λάθος απαντήσεις.

Αυτά θα τοποθετηθούν στο εξωτερικό της θήκης και το Raspberry Pi θα τοποθετηθεί μέσα στο πολύ ευρύχωρο χώρο της μπαταρίας, οπότε θα πρέπει να ανοίξει μια μικρή τρύπα για να επιτρέψει στα καλώδια να βγουν από τη θήκη της μπαταρίας.

Βήμα 8: Τελικός έλεγχος προσαρμογής

Τελικός έλεγχος προσαρμογής
Τελικός έλεγχος προσαρμογής

Όλος ο εξοπλισμός πρέπει να ελεγχθεί για τελευταία φορά για να διαπιστωθεί πού ακριβώς πρέπει να γίνουν όλες οι τρύπες στο πλαίσιο και τι μέγεθος οπών κ.λπ. πρέπει να γίνουν. Επιπλέον, θα πρέπει να εξεταστεί πού να τοποθετηθούν τα εξαρτήματα για βέλτιστη ευκολία σύνδεσης και πρόσβασης. Με λίγα λόγια, βεβαιωθείτε ότι όλα ταιριάζουν εκεί που νομίζετε ότι προτού βλάψετε ανεπανόρθωτα το έργο σας και πρέπει να αφαιρέσετε το spackle.

Βήμα 9: Τελική ενσωμάτωση

Τελική ενσωμάτωση
Τελική ενσωμάτωση
Τελική ενσωμάτωση
Τελική ενσωμάτωση
Τελική ενσωμάτωση
Τελική ενσωμάτωση

Τώρα όλο το υλικό είναι εκεί που πρέπει να είναι και όλα ταιριάζουν εξίσου καλά με ένα σφάλμα σε ένα χαλί. Ας κόψουμε τα πράγματα! Εντόπισα ένα μέρος στο διαμέρισμα μπαταριών όπου θα μπορούσα να δρομολογήσω τα καλώδια AV έξω χρησιμοποιώντας μια μικρή εσοχή στο πλαστικό. Το γείωσα με ένα μύλο πάγκου. Το έκανε πολύ σύντομο έργο. Χρησιμοποίησα ένα dremel για να αλέσω περισσότερο πλαστικό για να ταιριάξει αρκετά για τα καλώδια.

Το τελευταίο στοιχείο είναι ο επιλογέας καναλιού. Άνοιξα μια μικρή τρύπα στο διαμέρισμα της μπαταρίας και έβγαλα τα καλώδια κεφαλίδας από αυτό ένα κάθε φορά. Τα κουμπιά συνδέθηκαν και έβαλα το πρωτόπλακο στο πλαστικό σασί με δύο μισά προκολλητικά velcro. Καταλαβαίνω ότι υπήρχαν περίπου 1200 καλύτεροι τρόποι για να γίνει αυτό, αλλά αυτό λειτούργησε και είχα όλα όσα χρειαζόμουν στο χέρι.

Βήμα 10: Απολαύστε το Vintage IPTV σας

Απολαύστε το Vintage IPTV σας
Απολαύστε το Vintage IPTV σας
Απολαύστε το Vintage IPTV σας
Απολαύστε το Vintage IPTV σας
Απολαύστε το Vintage IPTV σας
Απολαύστε το Vintage IPTV σας

Αυτό συνοψίζει. Βρείτε εκπομπές και διασκεδάστε παρακολουθώντας. Μην κάθεστε όμως πολύ κοντά. Θα σαπίσετε τον εγκέφαλό σας!

Υπάρχουν πολλά περιθώρια βελτίωσης αυτού του έργου, οπότε πάρτε το προς όποια κατεύθυνση θέλετε, αλλά ήταν διασκεδαστικό να φτάσετε μέχρι εδώ. Όσο για μένα, το τρέχω από cronjob κατά την επανεκκίνηση, έτσι ώστε το stdout να μην καταγράφει τα μηνύματα από το σενάριο python. Θα ήθελα να το διορθώσω για να ξέρω σε ποιο κανάλι είμαι. Μια άλλη καλή προσθήκη είναι ένα ασύρματο dongle πληκτρολογίου στο Pi. Αυτό θα σας επιτρέψει να αλλάξετε το δίκτυο wifi εάν φύγετε από το σπίτι σας με την τηλεόραση. Ανεξάρτητα. ήταν ένα διασκεδαστικό έργο και ανυπομονώ να ξεκινήσω το επόμενο.

Συνιστάται: