Table des matières:

Disco-pi : 8 étapes (avec photos)
Disco-pi : 8 étapes (avec photos)

Vidéo: Disco-pi : 8 étapes (avec photos)

Vidéo: Disco-pi : 8 étapes (avec photos)
Vidéo: Аномально вкусно‼️ ЧЕХОСЛОВАЦКИЙ СУП ИЗ ФАРША. Жена Липована в шоке. 2024, Novembre
Anonim
Disco-pi
Disco-pi

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

  1. 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
  2. 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
  3. 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
  4. 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

Connexion du matériel
Connexion du matériel
Connexion du matériel
Connexion du matériel
Connexion du matériel
Connexion du matériel
Connexion du matériel
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

Code du site Web
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

Image
Image

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é: