Animez des NeoPixels en moins de 20 minutes : CMozGlow sur l'ESP32-S3 Mini
Si vous avez déjà fixé la fiche technique d'un WS2812B avant de fermer l'onglet en silence, ce tutoriel est pour vous. J'ai créé CMozGlow parce que j'en avais assez de réécrire le même code « faire en sorte que les LED fassent quelque chose de joli » pour chaque projet d'objet connecté.
CMozGlow est une bibliothèque gratuite pour Arduino et PlatformIO conçue pour la CMoz ESP32-S3 Mini. Elle fonctionne avec les NeoPixels de la famille WS2812B, y compris les anneaux, les rubans et les rectangles. Voici la version de 20 minutes pour la mettre en route.
Ce dont vous avez besoin
- Une carte basée sur ESP32-S3. J'utilise la CMoz ESP32-S3 Mini, mais n'importe quel ESP32 avec une broche GPIO libre fera l'affaire.
- Un module LED adressable WS2812B. Je fais la démonstration avec l'anneau de circuit LED RVB 16 LED. Le rectangle WS2812 8 bits ou le module d'anneau WS2812 8 bits fonctionnent de la même manière, avec moins de pixels.
- Des fils de connexion pour les données, l'alimentation et la terre (GND).
- PlatformIO.
Étape 1 : Câbler les NeoPixels
Effectuez trois connexions :
- 5V sur la borne d'alimentation de l'anneau
- GND sur la terre
- Une broche GPIO libre, telle que GPIO 2, sur la borne DIN de l'anneau
Conseil d'alimentation : Si vous utilisez plus de 8 à 10 pixels à pleine luminosité uniquement via l'USB, surveillez la consommation de courant. Un anneau de 16 LED en blanc pur peut approcher 1 A, ce qui est plus que ce que l'USB peut fournir confortablement. Réduisez la luminosité logiciellement plutôt que de lutter contre l'alimentation.
Étape 2 : Installer CMozGlow
Ajoutez CMozGlow à votre fichier platformio.ini en tant que dépendance de bibliothèque. Elle repose sur le pilote standard NeoPixel, de sorte que la gestion délicate du timing est déjà prise en charge pour vous.
Étape 3 : Ajouter le code essentiel
#include <CMozGlow.h>
CMozGlow ring(16, 2); // 16 pixels, GPIO 2
void setup() {
ring.begin();
ring.setBrightness(60);
}
void loop() {
ring.rainbowCycle(20);
}C'est un effet arc-en-ciel complet. Remplacez rainbowCycle() par breathe(color, speed) pour créer une pulsation lente, ou chase(color, tailLength) pour une traînée de type comète.
Étape 4 : Donner du sens à l'animation
L'animation est la partie facile. Un projet commence à sembler intentionnel lorsque vous connectez cette animation à un événement, tel qu'un seuil de capteur, une pression sur un bouton ou une connexion Wi-Fi réussie.
Dans mes montages, j'utilise souvent breathe() pour un état inactif ou d'attente et chase() lorsque le projet est en train de faire quelque chose. Cela donne à l'utilisateur une mise à jour rapide de l'état sans avoir besoin d'un écran.
Monter en échelle
La même approche fonctionne que vous pilotiez 8 ou 60 pixels. CMozGlow boucle sur le nombre de pixels fournis dans le constructeur. Si vous changez de module ou chaînez plus de pixels, mettez à jour ce nombre et votre câblage si nécessaire.
Dépannage des NeoPixels
Si les pixels affichent les mauvaises couleurs ou restent éteints, vérifiez d'abord ces deux causes fréquentes :
- Ordre des couleurs RVB ou GRB : Les produits WS2812B peuvent utiliser des ordres de canaux différents.
- DIN versus DOUT : Assurez-vous que votre fil de données est connecté à la borne d'entrée du module, et non à sa sortie.
Vérifiez les marquages sérigraphiés du module avant de supposer que le code est erroné.