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

Disco-pi: 8 βήματα (με εικόνες)
Disco-pi: 8 βήματα (με εικόνες)

Βίντεο: Disco-pi: 8 βήματα (με εικόνες)

Βίντεο: Disco-pi: 8 βήματα (με εικόνες)
Βίντεο: Χόκι Πόκι με εικόνες Pecs.wmv 2024, Ιούλιος
Anonim
Disco-pi
Disco-pi

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

Δείχνει πώς μπορείτε να δημιουργήσετε έναν βασικό ιστότοπο χρησιμοποιώντας το Node.js μέσω HTTPS και να χρησιμοποιήσετε το socket.io μέσω WSS (Ασφαλής Ιστοσελίδα).

Ο ιστότοπος έχει μια ενιαία σελίδα η οποία έχει μια πολύ βασική διάταξη. Η ιστοσελίδα συμπληρώνει μια αναπτυσσόμενη λίστα με αρχεία μουσικής, τα οποία βρίσκονται στον δημόσιο φάκελο/φάκελο ήχου του διακομιστή. Η επιλογή μιας επιλογής στη λίστα αναπαράγει το αρχείο μουσικής στην ιστοσελίδα χρησιμοποιώντας το ηχητικό στοιχείο HTML 5. Κατά την αναπαραγωγή του αρχείου μουσικής, η ιστοσελίδα χρησιμοποιεί τη διεπαφή AudioContext για να αναλύσει τη μουσική, η οποία στη συνέχεια αποστέλλεται στον διακομιστή μέσω μιας ασφαλούς σύνδεσης ιστού.

Ο διακομιστής που λειτουργεί σε Raspberry Pi χρησιμοποιεί τη βιβλιοθήκη Node RPI WS281x Native (περιτυλίγοντας τη βιβλιοθήκη του Jeremy Garff WS281X) για να αλλάξει τα χρώματα των LED σε μια λωρίδα LED WS2811, με βάση τα δεδομένα που αποστέλλονται μέσω της δικτυακής υποδοχής.

Το παράδειγμα του κώδικα μπορείτε να το βρείτε εδώ: disco-pi

Βήμα 1: Εξοπλισμός

  1. Raspberry Pi - Χρησιμοποίησα ένα Raspberry Pi 2B που είχα τοποθετήσει, αλλά μπορείτε να πάρετε ένα Raspberry Pi 3 Starter Kit για περίπου 100 CAD
  2. WS2811 LED Strip - Έπαιζα με το ALITOVE 16.4ft 150 Pixels WS2811. Έρχεται με έναν ελεγκτή και ένα τροφοδοτικό για περίπου 45-50 CAD
  3. Barrel Jack Connector - Αγόρασα ένα από το τοπικό μου κατάστημα ηλεκτρονικών ειδών, κάτι σαν αυτό. Απλά βεβαιωθείτε ότι ταιριάζει στο τροφοδοτικό σας
  4. Jumper Connectors / Wire - Είχα μερικά καλώδια θηλυκών σε αρσενικά και μερικά καλώδια 22 Gauge Solid που συνδέονται

Βήμα 2: Ρύθμιση του Raspberry Pi

Λειτουργικό σύστημα

Συνήθως χρησιμοποιώ την τελευταία έκδοση Raspbian. Κατεβάστε την εικόνα και γράψτε την στην κάρτα SD. Εάν χρησιμοποιείτε υπολογιστή Windows, μπορείτε να χρησιμοποιήσετε το Win32 Disk Imager για να γράψετε την εικόνα στην κάρτα SD.

Node.js

Εγκαταστήστε την τελευταία έκδοση του Node.js. Κατά τη στιγμή της σύνταξης, χρησιμοποιώ το 8.9.1

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

sudo apt-get install nodejs

Εγκαταστήστε το git

sudo apt-get install git

Βήμα 3: Ρύθμιση του παραδείγματος κώδικα

Κλωνοποίηση του παραδείγματος κώδικα

1. Ρυθμίστε έναν βασικό φάκελο για εγκατάσταση

cd /opt

sudo mkdir com.jonhaydock sudo chown pi: pi com.jonhaydockcd com.jonhaydock

2. Κλωνοποιήστε το παράδειγμα αποθετηρίου git

git clone https://github.com/haydockjp/disco-pi.git"

ή

git clone [email protected]: haydockjp/disco-pi.git

3. Εγκαταστήστε τις εξαρτήσεις

cd disco-pi

npm εγκατάσταση

Αυτό μπορεί να διαρκέσει 2-3 λεπτά

Βήμα 4: Δημιουργήστε ένα Self Signed Certificate SSL

1. Δημιουργήστε ένα αρχείο ιδιωτικού κλειδιού

cd /opt/com.jonhaydock/disco-pi/certs

openssl genrsa -out disco-pi-key.pem 2048

2. Δημιουργήστε ένα CSR (Αίτημα Υπογραφής Πιστοποιητικού)

openssl req -new -key disco-pi-key.pem -out disco-pi-csr.pem

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

Όνομα χώρας (κωδικός 2 γραμμάτων) [AU]: CA

Όνομα Πολιτείας ή Επαρχίας (πλήρες όνομα) [Ορισμένη Πολιτεία]: Όνομα Τοπικής Βρετανικής Κολούμπια (π.χ., πόλη) : Όνομα οργανισμού Βανκούβερ (π.χ., εταιρεία) [Internet Widgits Pty Ltd]: Όνομα οργανωτικής μονάδας Disco Pi (π.χ., ενότητα) : Κοινό όνομα (π.χ. διακομιστής FQDN ή το όνομά σας) : disco-pi Διεύθυνση ηλεκτρονικού ταχυδρομείου : [email protected] Κωδικός πρόκλησης : Προαιρετικό όνομα εταιρείας :

Σε αυτό το παράδειγμα, απλώς πατήστε επιστροφή για να αφήσετε κενό τον κωδικό πρόσβασης πρόκλησης

3. Δημιουργήστε το πιστοποιητικό

openssl x509 -req -days 1095 -in disco-pi-csr.pem -signkey disco-pi-key.pem -out disco-pi-cert.pem

4. Για επιπλέον ασφάλεια θα δημιουργήσουμε επίσης ένα αρχείο παραμέτρων Diffie Hellman

openssl dhparam -out dh_2048.pem 2048

Αυτό μπορεί να διαρκέσει 15-20 λεπτά

Βήμα 5: Σύνδεση του υλικού

Σύνδεση του υλικού
Σύνδεση του υλικού
Σύνδεση του υλικού
Σύνδεση του υλικού
Σύνδεση του υλικού
Σύνδεση του υλικού
Σύνδεση του υλικού
Σύνδεση του υλικού

Τροφοδοσία της λωρίδας LED

Η λωρίδα LED τροφοδοτείται από 12 βολτ. Το Raspberry Pi έχει ικανότητα εξόδου μόνο 3.3v ή 5v και δεν είναι ικανό να βγει οπουδήποτε κοντά στους ενισχυτές που απαιτούνται για την οδήγηση τόσων πολλών LED.

Είναι σημαντικό να μην συνδέσετε το τροφοδοτικό 12 volt στο Raspberry Pi.

Η λωρίδα μου είχε επιπλέον καλώδια τροφοδοσίας συνδεδεμένα στη λωρίδα σε κάθε άκρο. Προτείνω να τα κολλήσετε με ταινία για να μην έρθουν σε επαφή με κανένα άλλο εξοπλισμό σας.

Εκτελέστε τα επόμενα βήματα με δική σας ευθύνη. Δεν αναλαμβάνω καμία ευθύνη για οτιδήποτε μπορεί να πάει στραβά.

Λωρίδα LED

Η λωρίδα LED μου έχει τρία καλώδια:

ΚΟΚΚΙΝΟ - +12 Volt

ΜΑΥΡΟ - Έδαφος

ΠΡΑΣΙΝΟ - Δεδομένα

ΣΗΜΕΙΩΣΗ: υπάρχει Din και Dout - Data In and Data Out. Βεβαιωθείτε ότι εργάζεστε με το άκρο της λωρίδας LED που γράφει Din.

Βεβαιωθείτε ότι το Barrel Jack δεν είναι συνδεδεμένο στο τροφοδοτικό

1. Συνδέστε το κόκκινο καλώδιο από τη λωρίδα LED στην + πλευρά του βύσματος της κάννης.

Χρησιμοποίησα ένα λευκό καλώδιο σύνδεσης 22 gauge.

Τοποθετήστε το σύρμα στην υποδοχή + στην υποδοχή της κάννης και βιδώστε το στη θέση του.

Σπρώξτε το άλλο άκρο του καλωδίου στην πρίζα του LED. Βεβαιωθείτε ότι συνδέεστε με το κόκκινο καλώδιο.

2. Συνδέστε το μαύρο καλώδιο από τη λωρίδα LED στην - πλευρά της υποδοχής του βαρελιού.

Χρησιμοποίησα ένα μαύρο καλώδιο σύνδεσης 22 gauge.

Τοποθετήστε το σύρμα στην υποδοχή - στην υποδοχή της κάννης. Σε αυτό το σημείο τοποθετήστε επίσης το αρσενικό άκρο ενός από τα καλώδια σύνδεσης (καφέ σύρμα στη φωτογραφία) στην ίδια τρύπα και βιδώστε τα και τα δύο στη θέση τους.

Σπρώξτε το άλλο άκρο του μαύρου καλωδίου στην πρίζα του LED.

Βεβαιωθείτε ότι συνδέεστε με το μαύρο καλώδιο.

3. Συνδέστε το πράσινο καλώδιο από τη λωρίδα LED

Πάρτε ένα από τα θηλυκά προς τα αρσενικά καλώδια σύνδεσης. Στις φωτογραφίες μου αυτό είναι το πράσινο σύρμα.

Τοποθετήστε το αρσενικό άκρο στην υποδοχή LED με το πράσινο σύρμα.

Αυτό είναι το καλώδιο δεδομένων.

Raspberry Pi

1. Πάρτε το πράσινο καλώδιο σύνδεσης και συνδέστε το στο Raspberry Pi GPIO.

Πρέπει να το συνδέσετε στο PCM_CLK (Pin 12 / GPIO 18)

2. Πάρτε το μαύρο καλώδιο σύνδεσης και συνδέστε το στο Raspberry Pi GPIO.

Πρέπει να το συνδέσετε σε έναν από τους λόγους. Σας προτείνω να χρησιμοποιήσετε τον πείρο 14, αλλά μπορείτε επίσης να χρησιμοποιήσετε τον πείρο 6, 9, 20, 25, 30, 34 ή 39.

ΣΗΜΕΙΩΣΗ: για να λειτουργήσει αυτό, η πηγή ισχύος LED και το Raspberry Pi πρέπει να έχουν κοινό έδαφος. Σημειώστε επίσης ότι δεν πρέπει να συνδέσετε το 12 Volt + (Κόκκινο σύρμα) στο Raspberry Pi.

Ισχύς LED

Δεν θα πρέπει να μπορείτε να συνδέσετε την τροφοδοσία 12 βολτ σας στην υποδοχή της κάννης

Όλες οι λυχνίες LED στη λωρίδα LED θα πρέπει τώρα να ανάβουν ΛΕΥΚΗ

Βήμα 6: Κωδικός από τον διακομιστή

Εκτέλεση του κώδικα από την πλευρά του διακομιστή

cd /opt/com.jonhaydock/disco-pi

sudo npm εκκίνηση

Αυτό θα ξεκινήσει τον διακομιστή ιστού και θα ξεκινήσει την ακρόαση για αιτήματα HTTPS και WSS.

Η προεπιλεγμένη θύρα είναι 443, αλλά μπορείτε να την παρακάμψετε ορίζοντας μια μεταβλητή περιβάλλοντος πριν ξεκινήσετε τον κώδικα. Για παράδειγμα

εξαγωγή DISCO_PI_PORT = 1443

Η λωρίδα LED μου έχει 150 LED. Αυτά ελέγχονται σε ομάδες τριών. Αυτό σημαίνει ότι δεν μπορώ να ελέγξω κάθε LED ξεχωριστά και πρέπει να στείλω αρκετές πληροφορίες για τον έλεγχο 50.

Εάν το LED σας έχει περισσότερο ή λιγότερο, μπορείτε να παρακάμψετε τον αριθμό των LED που ελέγχετε περνώντας μια παράμετρο στην εκκίνηση. Για παράδειγμα, εάν μπορείτε να ελέγξετε μόνο 10 LED

sudo npm έναρξη 10

Ο κύριος κωδικός διακομιστή βρίσκεται στο αρχείο app.js. Αυτό το αρχείο ξεκινά τον διακομιστή ιστού HTTPS και προσθέτει επίσης στο socket.io για να ακούτε αιτήματα δικτυακής υποδοχής στην ίδια θύρα.

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

10.0.1.2/

Μπορείτε να μάθετε τη διεύθυνση IP σας από τη γραμμή εντολών Raspberry Pi.

ifconfig

Ο διακομιστής ιστού θα προβάλλει οποιοδήποτε περιεχόμενο στον δημόσιο φάκελο. Από προεπιλογή εμφανίζεται η σελίδα index.html.

Διαθέτει ένα τελικό σημείο API - /api /ήχο. Αυτό το τελικό σημείο αναζητά τυχόν αρχεία στον δημόσιο φάκελο/φάκελο ήχου και επιστρέφει τη λίστα. Για παράδειγμα

["" GYAKO.mp3 "," Havana (feat. Young Thug).mp3 "," Queen_Bohemian_Rhapsody.mp3 "," Set It All Free.mp3 "," This Is What You Came For (feat. Rihanna).mp3 "]

Για να προσθέσετε μουσική ως επιλογή, αντιγράψτε αρχεία σε αυτόν το φάκελο. Προσωπικά χρησιμοποιώ το Filezilla πάνω από το ssh. Ο φάκελος στον οποίο θέλετε να προσθέσετε αρχεία είναι /opt/com.jonhaydock/disco-pi/public/audio

Βήμα 7: Κώδικας ιστότοπου

Κώδικας Ιστοσελίδας
Κώδικας Ιστοσελίδας

Όταν φτάσετε στον ιστότοπο, θα πρέπει να δείτε κάτι τέτοιο.

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

Κατά την επιλογή ενός ονόματος αρχείου, η πηγή για το στοιχείο ήχου HTML 5. θα οριστεί σε αυτό το αρχείο. Μόλις είναι έτοιμη, η μουσική θα αρχίσει να παίζει. Μόλις τελειώσει το τραγούδι, η μουσική θα σταματήσει.

Εάν ορίσετε την επιλογή Κανένα, η μουσική θα σταματήσει να παίζει.

Κατά την αναπαραγωγή του αρχείου μουσικής, η ιστοσελίδα χρησιμοποιεί τη διεπαφή AudioContext για να αναλύσει τη μουσική, η οποία στη συνέχεια αποστέλλεται στον διακομιστή μέσω μιας ασφαλούς σύνδεσης ιστού.

Το μήνυμα είναι ο τύπος που το socket.io στον διακομιστή έχει ρυθμιστεί για να ακούει "ws2811". Περιέχει έναν πίνακα 50 στοιχείων, τα οποία είναι μεταξύ 0 και 255.

"ws2811", {"0": 251, "1": 252, "2": 241, "3": 217, "4": 193, "5": 164, "6": 148, "7": 139, "8": 110, "9": 96, "10": 81, "11": 67, "12": 72, "13": 66, "14": 60, "15": 60, "16": 63, "17": 54, "18": 37, "19": 30, "20": 31, "21": 26, "22": 13, "23": 3, " 24 ": 10," 25 ": 7," 26 ": 6," 27 ": 0," 28 ": 0," 29 ": 0," 30 ": 1," 31 ": 8," 32 ": 12, "33": 3, "34": 2, "35": 2, "36": 0, "37": 0, "38": 0, "39": 0, "40": 0, "41": 0, "42": 0, "43": 0, "44": 0, "45": 0, "46": 0, "47": 0, "48": 0, " 49 ": 0}

Ο διακομιστής χρησιμοποιεί τη βιβλιοθήκη Node RPI WS281x Native (περιτυλίγοντας τη βιβλιοθήκη του Jeremy Garff WS281X) για να αλλάξει τα χρώματα των LED σε μια λωρίδα LED WS2811, με βάση τα δεδομένα που αποστέλλονται μέσω της δικτυακής υποδοχής.

Βήμα 8: Τέλος

Image
Image

Θα πρέπει να δείτε τα LED της λωρίδας να αλλάζουν χρώμα με τη μουσική, με βάση την ανάλυση Fast Fourier Transform που γίνεται στην ιστοσελίδα.

Ελπίζω να το απολαύσετε αυτό. Πες μου τι κάνεις με αυτό!

ΣΗΜΕΙΩΣΗ: Εάν αντιμετωπίζετε προβλήματα

Δεδομένου ότι αυτή η βιβλιοθήκη και το ενσωματωμένο ακουστικό Raspberry Pi χρησιμοποιούν το PWM, δεν μπορούν να χρησιμοποιηθούν μαζί.

Σως χρειαστεί να καταχωρήσετε τη μαύρη λίστα της μονάδας πυρήνα ήχου Broadcom δημιουργώντας ένα αρχείο /etc/modprobe.d/snd-blacklist.conf με

μαύρη λίστα snd_bcm2835

Εάν η συσκευή ήχου εξακολουθεί να φορτώνεται μετά τη μαύρη λίστα, μπορεί επίσης να χρειαστεί να την σχολιάσετε στο αρχείο /etc /modules. Στα ακέφαλα συστήματα μπορεί επίσης να χρειαστεί να εξαναγκάσετε τον ήχο μέσω hdmi

Επεξεργαστείτε το config.txt και προσθέστε:

hdmi_force_hotplug = 1

hdmi_force_edid_audio = 1

Απαιτείται επανεκκίνηση για να εφαρμοστεί αυτή η αλλαγή

Συνιστάται: