Note

Bonjour, bienvenue dans la communauté des passionnés de SunFounder Raspberry Pi & Arduino & ESP32 sur Facebook ! Plongez plus profondément dans Raspberry Pi, Arduino et ESP32 avec d’autres passionnés.

Pourquoi nous rejoindre ?

  • Support d’experts : Résolvez les problèmes post-vente et les défis techniques grâce à l’aide de notre communauté et de notre équipe.

  • Apprendre et partager : Échangez des conseils et des tutoriels pour améliorer vos compétences.

  • Aperçus exclusifs : Bénéficiez d’un accès anticipé aux annonces de nouveaux produits et aux avant-premières.

  • Réductions spéciales : Profitez de réductions exclusives sur nos derniers produits.

  • Promotions festives et cadeaux : Participez à des concours et promotions de vacances.

👉 Prêt à explorer et créer avec nous ? Cliquez sur [Ici] et rejoignez-nous dès aujourd’hui !

2.7 Bande LED RGB

Dans ce projet, nous allons plonger dans le monde fascinant des bandes LED WS2812 et donner vie à un affichage vibrant de couleurs. Avec la capacité de contrôler individuellement chaque LED de la bande, nous pouvons créer des effets lumineux captivants qui éblouiront les sens.

De plus, nous avons inclus une extension passionnante à ce projet, où nous explorerons le domaine du hasard. En introduisant des couleurs aléatoires et en implémentant un effet de lumière fluide, nous pouvons créer une expérience visuelle envoûtante et captivante.

Composants requis

Pour ce projet, nous avons besoin des composants suivants.

Il est certainement pratique d’acheter un kit complet, voici le lien :

Nom

ARTICLES DANS CE KIT

LIEN

Kit de démarrage ESP32

320+

ESP32 Starter Kit

Vous pouvez également les acheter séparément à partir des liens ci-dessous.

INTRODUCTION DES COMPOSANTS

LIEN D’ACHAT

ESP32 carte

Acheter

Extension de caméra ESP32

ACHETER

Fils de connexion

Acheter

Bande LED RGB WS2812 8 LEDs

Acheter

Schéma

../../_images/circuit_2.7_ws2812.png

Pins disponibles

Voici une liste des pins disponibles sur la carte ESP32 pour ce projet.

Pins disponibles

IO13, IO12, IO14, IO27, IO26, IO25, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23

Note

IO33 n’est pas disponible pour ce projet.

La bande LED WS2812 est un type de bande LED qui nécessite un signal de modulation de largeur d’impulsion (PWM) précis. Le signal PWM a des exigences précises en termes de temps et de tension. Par exemple, un bit « 0 » pour le WS2812 correspond à une impulsion de niveau haut d’environ 0,4 microsecondes, tandis qu’un bit « 1 » correspond à une impulsion de niveau haut d’environ 0,8 microsecondes. Cela signifie que la bande doit recevoir des changements de tension à haute fréquence.

Cependant, avec une résistance pull-up de 4,7K et un condensateur pull-down de 100nF sur IO33, un simple filtre passe-bas est créé. Ce type de circuit « lisse » les signaux haute fréquence, car le condensateur a besoin de temps pour se charger et se décharger lorsqu’il reçoit des changements de tension. Par conséquent, si le signal change trop rapidement (c’est-à-dire à haute fréquence), le condensateur ne pourra pas suivre. Cela entraîne un flou du signal de sortie et le rend méconnaissable pour la bande.

Câblage

../../_images/2.7_rgb_strip_bb.png

Code

Note

  • Vous pouvez ouvrir le fichier 2.7_rgb_strip.ino sous le chemin esp32-starter-kit-main\c\codes\2.7_rgb_strip. Ou copiez ce code dans Arduino IDE.

  • Après avoir sélectionné la carte (ESP32 Dev Module) et le port approprié, cliquez sur le bouton Téléverser.

  • Toujours afficher « Unknown COMxx » ?

  • La bibliothèque Adafruit NeoPixel est utilisée ici, vous pouvez l’installer à partir du Gestionnaire de Bibliothèques.

    ../../_images/rgb_strip_lib.png

Lorsque le code est téléversé avec succès, les LED de la bande s’allumeront séquentiellement avec une couleur jaune puis s’éteindront, créant un simple effet de poursuite.

Comment ça marche ?

  1. Inclure la bibliothèque Adafruit NeoPixel : Cette ligne importe la bibliothèque Adafruit NeoPixel afin que le croquis puisse utiliser ses fonctions et classes pour contrôler la bande LED.

    #include <Adafruit_NeoPixel.h> // Inclure la bibliothèque Adafruit NeoPixel
    
  2. Définir les constantes pour la bande LED.

    #define LED_PIN 13 // Bande LED NeoPixel
    #define NUM_LEDS 8 // Nombre de LEDs
    
  3. Créer une instance de la classe Adafruit_NeoPixel.

    // Créer une instance de la classe Adafruit_NeoPixel
     Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
    

    Cette ligne crée une instance de la classe Adafruit_NeoPixel appelée strip et la configure avec le nombre de LEDs, la pin connectée à la bande LED et les paramètres du signal (ordre des couleurs GRB et fréquence de données de 800 kHz).

    • Adafruit_NeoPixel (uint16_t n, int16_t p = 6, neoPixelType t = NEO_GRB + NEO_KHZ800)

    Constructeur NeoPixel lorsque la longueur, la pin et le type de pixel sont connus au moment de la compilation. Retourne un objet Adafruit_NeoPixel. Appelez la fonction begin() avant utilisation.

    • n: Nombre de NeoPixels dans la bande.

    • p: Numéro de la pin Arduino qui pilotera les données NeoPixel.

    • t: Type de pixel - additionnez les constantes NEO_* définies dans Adafruit_NeoPixel.h, par exemple NEO_GRB+NEO_KHZ800 pour les NeoPixels nécessitant un flux de données de 800 KHz (vs 400 KHz) avec des octets de couleur exprimés dans l’ordre vert, rouge, bleu par pixel.

  4. Initialiser la bande RGB WS2812 et définir la couleur initiale de la bande sur noir (éteint).

    void setup() {
        strip.begin(); // Initialiser la bande NeoPixel
        strip.show(); // Définir la couleur initiale sur noir
    }
    
    • void begin (void): Configure la pin NeoPixel pour la sortie.

    • void show (void): Transmet les données des pixels en RAM aux NeoPixels.

  5. Dans la fonction loop(), les LED de la bande s’allumeront séquentiellement avec une couleur jaune puis s’éteindront, créant un simple effet de poursuite.

    void loop() {
    // Allumer les LEDs une par une
    for (int i = 0; i < NUM_LEDS; i++) {
        strip.setPixelColor(i, 100, 45, 0); // Définir la couleur de la ième LED en rouge
        strip.show(); // Mettre à jour la bande LED avec les nouvelles couleurs
        delay(100); // Attendre 100 millisecondes
    }
    
    // Éteindre les LEDs une par une
    for (int i = 0; i < NUM_LEDS; i++) {
        strip.setPixelColor(i, 0, 0, 0); // Définir la couleur de la ième LED en noir (éteindre)
        strip.show(); // Mettre à jour la bande LED avec les nouvelles couleurs
        delay(100); // Attendre 100 millisecondes
    }
    }
    
    • void setPixelColor (uint16_t n, uint8_t r, uint8_t g, uint8_t b)

    Définir la couleur d’un pixel en utilisant des composantes rouge, verte et bleue séparées. Si vous utilisez des pixels RGBW, le blanc sera défini sur 0.

    • n: Index du pixel, en commençant par 0.

    • r: Luminosité du rouge, 0 = minimum (éteint), 255 = maximum.

    • g: Luminosité du vert, 0 = minimum (éteint), 255 = maximum.

    • b: Luminosité du bleu, 0 = minimum (éteint), 255 = maximum.