Table des matières:
- Étape 1: Équipement
- Étape 2: Configuration du Raspberry Pi
- Étape 3: Configuration de l'exemple de code
- Étape 4: Créez un certificat SSL auto-signé
- Étape 5: connexion du matériel
- Étape 6: Code côté serveur
- Étape 7: Code du site Web
- Étape 8: Enfin
Vidéo: Disco-pi : 8 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:09
Cette instructable montre comment utiliser un Raspberry Pi pour contrôler une bande LED colorée, basée sur la musique jouée à partir d'un navigateur Web.
Il montre comment créer un site Web de base en utilisant Node.js sur HTTPS et utiliser socket.io sur WSS (Secure Websocket).
Le site Web a une seule page qui a une mise en page très basique. La page Web remplit une liste déroulante avec des fichiers musicaux, qui se trouvent dans le dossier public/audio sur le serveur. La sélection d'une option dans la liste lit le fichier musical dans la page Web à l'aide de l'élément audio HTML 5. Lors de la lecture du fichier musical, la page Web utilise l'interface AudioContext pour analyser la musique, qui est ensuite envoyée au serveur via une connexion Websocket sécurisée.
Le serveur fonctionnant sur un Raspberry Pi utilise la bibliothèque Node RPI WS281x Native (enveloppant la bibliothèque WS281X de Jeremy Garff) pour changer les couleurs des LED sur une bande LED WS2811, en fonction des données envoyées via le websocket.
L'exemple de code peut être trouvé ici: disco-pi
Étape 1: Équipement
- Raspberry Pi - J'ai utilisé un Raspberry Pi 2B que j'avais, mais vous pouvez obtenir un kit de démarrage Raspberry Pi 3 pour environ 100 CAD
- Bande LED WS2811 - Je jouais avec ALITOVE 16.4ft 150 Pixels WS2811. Cela vient avec un contrôleur et une alimentation pour environ CAD 45-50
- Connecteur Barrel Jack - J'en ai acheté un dans mon magasin d'électronique local, quelque chose comme ça. Assurez-vous simplement que cela correspond à votre alimentation
- Connecteurs/fils de cavalier - J'avais des câbles de connexion femelle à mâle et des fils de raccordement solides de calibre 22 qui traînaient
Étape 2: Configuration du Raspberry Pi
Système opérateur
J'utilise normalement la dernière version de Raspbian. Téléchargez l'image et écrivez-la sur la carte SD. Si vous utilisez un ordinateur Windows, vous pouvez utiliser Win32 Disk Imager pour écrire l'image sur la carte SD.
Node.js
Installez la dernière version de Node.js. Au moment de la rédaction, j'utilise 8.9.1
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install nodejs
Installer git
sudo apt-get install git
Étape 3: Configuration de l'exemple de code
Cloner l'exemple de code
1. Configurez un dossier de base dans lequel installer
cd/opt
sudo mkdir com.jonhaydock sudo chown pi:pi com.jonhaydockcd com.jonhaydock
2. Clonez l'exemple de dépôt git
git clone
ou
git clone [email protected]:haydockjp/disco-pi.git
3. Installer les dépendances
cd disco-pi
npm installer
Cela peut prendre 2-3 minutes
Étape 4: Créez un certificat SSL auto-signé
1. Créez un fichier de clé privée
cd /opt/com.jonhaydock/disco-pi/certs
openssl genrsa -out disco-pi-key.pem 2048
2. Créer un CSR (Certificate Signing Request)
openssl req -new -key disco-pi-key.pem -out disco-pi-csr.pem
À ce stade, vous serez invité à fournir des informations pour la demande de certificat. Comme il s'agit d'un certificat auto-signé, c'est à vous de décider avec quelle précision vous remplissez les détails. Voici un exemple
Nom du pays (code à 2 lettres) [AU]:CA
Nom de l'État ou de la province (nom complet) [un État]: Nom de la localité de la Colombie-Britannique (par exemple, la ville) : Nom de l'organisation de Vancouver (par exemple, la société) [Internet Widgits Pty Ltd]: Nom de l'unité organisationnelle Disco Pi (par exemple, la section) : Nom commun (par exemple, FQDN du serveur ou VOTRE nom) :disco-pi Adresse e-mail :[email protected] Un mot de passe de défi : Un nom de société facultatif :
Dans cet exemple, appuyez simplement sur Entrée pour laisser le mot de passe de défi vide
3. Générez le certificat
openssl x509 -req -days 1095 -in disco-pi-csr.pem -signkey disco-pi-key.pem -out disco-pi-cert.pem
4. Pour plus de sécurité, nous allons également créer un fichier de paramètres Diffie Hellman
openssl dhparam -out dh_2048.pem 2048
Cela peut prendre 15-20 minutes
Étape 5: connexion du matériel
Alimentation de la bande LED
La bande LED est alimentée en 12 volts. Le Raspberry Pi n'est capable de produire que 3,3 V ou 5 V et n'est pas capable de produire à proximité des amplis nécessaires pour piloter autant de LED.
Il est important de ne pas connecter l'alimentation 12 volts au Raspberry Pi.
Ma bande avait également des fils d'alimentation supplémentaires connectés à la bande à chaque extrémité. Je vous suggère de les scotcher pour qu'ils n'entrent en contact avec aucun de vos autres équipements.
Effectuez les étapes suivantes à vos risques et périls. Je ne prends aucune responsabilité pour tout ce qui pourrait mal tourner.
Bande LED
Ma bande LED a trois fils:
ROUGE - +12 Volts
NOIR - Terre
VERT - Données
REMARQUE: il y a un Din et un Dout - Data In et Data Out. Assurez-vous que vous travaillez avec l'extrémité de la bande LED qui indique Din.
S'assurer que le Barrel Jack n'est pas connecté à l'alimentation
1. Connectez le fil rouge de la bande LED au côté + de la prise Barrel.
J'ai utilisé un fil de branchement blanc de calibre 22.
Placez le fil dans la fente + de la prise cylindrique et vissez-le en place.
Poussez l'autre extrémité du fil dans la prise sur la LED. Assurez-vous que vous vous connectez avec le fil rouge.
2. Connectez le fil noir de la bande LED au côté - de la prise Barrel.
J'ai utilisé un fil de branchement noir de calibre 22.
Placez le fil dans la fente - de la prise cylindrique. À ce stade, placez également l'extrémité mâle de l'un des câbles de connexion (fil marron sur la photo) dans le même trou et vissez-les tous les deux en place.
Poussez l'autre extrémité du fil noir dans la prise de la LED.
Assurez-vous que vous vous connectez avec le fil noir.
3. Connectez le fil vert de la bande LED
Prenez l'un des câbles de connexion femelle à mâle. Sur mes photos, c'est le fil vert.
Placez l'extrémité mâle dans la prise LED avec le fil vert.
C'est le câble de données.
Tarte aux framboises
1. Prenez le câble du connecteur vert et connectez-le au GPIO Raspberry Pi.
Vous devez le connecter au PCM_CLK (Broche 12 / GPIO 18)
2. Prenez le câble du connecteur noir et connectez-le au GPIO Raspberry Pi.
Vous devez le connecter à l'un des motifs. Je vous suggère d'utiliser la broche 14, mais vous pouvez également utiliser les broches 6, 9, 20, 25, 30, 34 ou 39.
REMARQUE: pour que cela fonctionne, la source d'alimentation LED et le Raspberry Pi doivent avoir une masse commune. Notez également qu'il ne faut pas connecter le 12 Volt + (fil rouge) au Raspberry Pi.
Alimentation LED
Vous ne devriez pas pouvoir connecter votre alimentation 12 volts à la prise barillet
Toutes les LED de votre bande LED devraient maintenant s'allumer en BLANC
Étape 6: Code côté serveur
Exécuter le code côté serveur
cd /opt/com.jonhaydock/disco-pi
démarrage sudo npm
Cela démarrera le serveur Web et commencera à écouter les requêtes HTTPS et WSS.
Le port par défaut est 443, mais vous pouvez le remplacer en définissant une variable d'environnement avant de démarrer le code. Par exemple
exporter DISCO_PI_PORT=1443
Ma bande LED a 150 LED. Ceux-ci sont contrôlés par groupes de trois. Cela signifie que je ne peux pas contrôler chaque LED individuellement et que je dois envoyer suffisamment d'informations pour en contrôler 50.
Si votre LED a plus ou moins, vous pouvez remplacer le nombre de LED que vous contrôlez en passant un paramètre au démarrage. Par exemple, si vous ne pouvez contrôler que 10 LED
sudo npm démarrer 10
Le code du serveur principal se trouve dans le fichier app.js. Ce fichier démarre le serveur Web HTTPS et ajoute également socket.io pour écouter les requêtes Websocket sur le même port.
Pour accéder au site Web, vous devez ouvrir un navigateur Web sur votre ordinateur principal (je ne l'ai testé que dans Chrome) et utiliser l'adresse IP du Raspberry Pi, par ex.
10.0.1.2/
Vous pouvez trouver votre adresse IP à partir de la ligne de commande Raspberry Pi.
ifconfig
Le serveur Web servira tout contenu sous le dossier public. Il affiche par défaut la page index.html.
Il a un point de terminaison d'API - /api/audio. Ce point de terminaison recherche tous les fichiers dans le dossier public/audio et renvoie la liste. Par exemple
["GYAKO.mp3", "La Havane (feat. Young Thug).mp3", "Queen_Bohemian_Rhapsody.mp3", "Set It All Free.mp3", "This Is What You Came For (feat. Rihanna).mp3"]
Pour ajouter de la musique en option, copiez les fichiers dans ce dossier. Personnellement, j'utilise Filezilla sur ssh. Le dossier dans lequel vous souhaitez ajouter des fichiers est /opt/com.jonhaydock/disco-pi/public/audio
Étape 7: Code du site Web
Lorsque vous visitez le site Web, vous devriez voir quelque chose comme ceci.
Si vous voyez un avertissement de sécurité, c'est parce que nous utilisons un certificat SSL auto-signé. Vous pouvez l'ignorer ou l'ajouter en tant qu'exception.
Lors de la sélection d'un nom de fichier, la source de l'élément audio HTML 5. sera défini sur ce fichier. Une fois prêt, la musique commencera à jouer. Une fois la chanson terminée, la musique s'arrêtera.
Si vous sélectionnez l'option Aucun, la musique s'arrêtera.
Lors de la lecture du fichier musical, la page Web utilise l'interface AudioContext pour analyser la musique, qui est ensuite envoyée au serveur via une connexion Websocket sécurisée.
Le message est le type que le socket.io sur le serveur a été configuré pour écouter "ws2811". Il contient un tableau de 50 éléments, compris entre 0 et 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}
Le serveur utilise la bibliothèque Node RPI WS281x Native (enveloppant la bibliothèque WS281X de Jeremy Garff) pour modifier les couleurs des LED sur une bande LED WS2811, en fonction des données envoyées via le websocket.
Étape 8: Enfin
Vous devriez voir les LED sur la bande changer de couleur avec la musique, sur la base de l'analyse de la transformation de Fourier rapide effectuée dans la page Web.
J'espère que cela vous plaira. Dites moi ce que vous en faites !
REMARQUE: si vous rencontrez des problèmes
Étant donné que cette bibliothèque et l'audio Raspberry Pi embarqué utilisent toutes deux le PWM, elles ne peuvent pas être utilisées ensemble.
Vous devrez peut-être mettre sur liste noire le module du noyau audio Broadcom en créant un fichier /etc/modprobe.d/snd-blacklist.conf avec
liste noire snd_bcm2835
Si le périphérique audio est toujours en cours de chargement après la mise sur liste noire, vous devrez peut-être également le commenter dans le fichier /etc/modules. Sur les systèmes sans tête, vous devrez peut-être également forcer l'audio via HDMI
Modifiez le fichier config.txt et ajoutez:
hdmi_force_hotplug=1
hdmi_force_edid_audio=1
Un redémarrage est nécessaire pour que cette modification prenne effet
Conseillé:
Casque Disco imprimable en 3D ! : 11 étapes (avec photos)
Casque Disco imprimable en 3D ! : Inspiré du casque classique « Thomas » de Daft Punk. Illuminez la pièce et faites l'envie de tous vos amis avec cet incroyable casque disco alimenté par Arduino ! Vous aurez besoin d'avoir accès à une imprimante 3D et à un fer à souder pour réaliser ce projet. Si vous voulez
Disco portable V2 - LED à contrôle sonore : 11 étapes (avec photos)
Disco portable V2 - LED à contrôle sonore : J'ai parcouru un long chemin dans mon parcours électronique depuis que j'ai créé ma première discothèque portable. Dans la construction originale, j'ai piraté un circuit sur une carte prototype et j'ai réussi à construire une petite discothèque de poche soignée. Cette fois-ci, j'ai conçu mon propre PCB et
Led Disco Box : 7 étapes (avec photos)
Led Disco Box : Comment faire votre propre Led Disco Box
Organiseur de bureau Disco : 8 étapes (avec photos)
Organiseur de bureau Disco : Matériaux : triplex, épaisseur : 3 mm Le nombre de plaques de bois dépend de la taille de votre découpeuse laser… ajustez le fichier sur votre plaque de bois de taille maximale… peut-être avez-vous besoin de plus d'une plaque (gardez cela à l'esprit). 6 x leds flash (j'ai utilisé des leds flash 7 couleurs) ava
Infinite Disco : 6 étapes (avec photos)
Infinite Disco : Dans ce projet, j'ai réalisé un miroir infini basé sur un dodécaèdre qui réagit au son