ESP32 : LED RVB adressables WS2812B (Neopixels) – Arduino IDE

ESP32 : LED RVB adressables WS2812B (Neopixels) - Arduino IDE

Ce guide montre comment contrôler les LED RVB adressables WS2812B (également connues sous le nom de Neopixels) avec l’ESP32 à l’aide de l’IDE Arduino. Vous apprendrez comment câbler les LED WS2812B à l’ESP32 et comment les contrôler à l’aide de la bibliothèque FastLED.

LED RVB adressables ESP32 WS2812B Neopixels Arduino IDE

Dans ce didacticiel, nous contrôlerons une bande de LED RVB (néopixels) adressables WS2812B, mais elle fonctionne avec n’importe quelle bande ou carte PCB dotée de LED WS2812B :

Bandes LED RVB adressables WS2812B, anneaux, bâtonnets PCB

Lisez notre guide MicroPython : LED RVB adressables WS2812B avec ESP32 et ESP8266

Table des matières

Dans ce guide, nous aborderons les sujets suivants :

Conditions préalables

Avant de continuer, assurez-vous que l’IDE Arduino et les cartes ESP32 sont installés. Suivez le tutoriel suivant si ce n’est pas déjà fait :

Présentation des LED RVB WS2812B (Neopixels)

Les LED WS2812B sont des LED RVB adressables qui peuvent être connectées en série et individuellement à l’aide d’une seule broche numérique d’un microcontrôleur. Ces LED ont un IC intégré directement dans la LED qui rend tout cela possible. Cela signifie que vous pouvez contrôler de nombreuses LED en utilisant une seule broche numérique de votre ESP32.

Dans la figure suivante, vous pouvez voir la puce à l’intérieur de la LED. La LED est une LED RVB et fonctionne ainsi.

néopixel led adressable ws2812 RVB

Alimenter la bande LED WS2812B

La bande LED doit être alimentée à l’aide d’une source d’alimentation de 5 V. À 5 V, chaque LED consomme environ 50 mA lorsqu’elle est réglée à sa pleine luminosité. Cela signifie que pour 30 LED, la bande peut consommer jusqu’à 1,5 A. Assurez-vous de sélectionner une source d’alimentation qui correspond aux besoins de la bande. Un adaptateur secteur CA vers CC fournissant 5 V et 2 A devrait faire l’affaire :

Si vous utilisez une source d’alimentation externe, n’oubliez pas de connecter la masse de la source d’alimentation à la broche ESP32 GND.

Dans ce tutoriel, nous allons contrôler une ligne de 8 LED, nous n’avons donc pas besoin d’une source d’alimentation externe. Nous utiliserons la broche VIN ESP32.

Pièces requises

Pour ce projet, vous avez besoin des pièces suivantes :

Vous pouvez utiliser les liens précédents ou vous rendre directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

1784838665 311 ESP32 LED RVB adressables WS2812B Neopixels Arduino IDE

Câblage du WS2812B (Neopixels) à l’ESP32

Le câblage du WS2812B à l’ESP32 est assez simple, car il ne nécessite qu’une seule broche numérique (DIN).

WS2812B ESP32
GND GND
VACARME N’importe quelle broche numérique (par exemple : GPIO 2)*
4-7 VCC NIV 5V

* vous pouvez utiliser n’importe quel autre GPIO approprié. Consultez le guide de brochage ESP32 :

Le câblage de la bande LED RVB à l’ESP32 est très simple. Vous devez appliquer 5 V à la broche VDC, GND à GND et connecter un GPIO à la broche DIN (données). Nous allons connecter la broche de données au GPIO 2.

Schéma de câblage schématique ESP32 WS2812B Neopixels

Vous pouvez souder plusieurs anneaux, bâtons ou bandes LED, et ils se comporteront comme une seule pièce. Chaque PCB possède des broches DIN et DOUT qui rendent le câblage très simple :

ws2812b neopixel câblé en série

Dans notre exemple, nous utiliserons un stick avec 8 LED comme indiqué dans l’image ci-dessous.

Pièces Neopixels ESP32 WS2812B requises

Installation de la bibliothèque FastLED

Il existe plusieurs bibliothèques pour interfacer les LED WS2812B avec l’ESP32. Nous utiliserons la bibliothèque FastLED. Vous pouvez l’installer rapidement en suivant ces étapes :

  • Ouvrez le gestionnaire de bibliothèque Arduino IDE
  • Rechercher FastLED
  • Installez la bibliothèque FastLED de Daniel Garcia
Installation de la bibliothèque Neopixel FastLED LED RVB adressable WS2812B Arduino IDE

Exemple n ° 1 – ESP32 contrôle les LED RVB WS2812B individuellement

Le code suivant définit une couleur différente pour chaque LED RVB WS2812B. Téléchargez le code suivant sur votre tableau et cela fonctionnera immédiatement

/*
  Rui Santos & Sara Santos - Raspberryme.com
  Complete project details at https://Raspberryme.com/esp32-ws2812b-neopixels-arduino/
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.  
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include 

#define NUM_LEDS     8
#define DIN_PIN      2
#define BRIGHTNESS   80   // Brightness (0-255)
#define DELAY_MS     500

CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds(leds, NUM_LEDS);
  FastLED.setBrightness(BRIGHTNESS);   
  FastLED.clear();
}

void loop() {
  leds[0] = CRGB(255, 0, 0);     // Red » (R=255, G=0, B=0)
  FastLED.show();
  delay(DELAY_MS);

  leds[1] = CRGB(0, 255, 0);     // Green » (R=0, G=255, B=0)
  FastLED.show();
  delay(DELAY_MS);

  leds[2] = CRGB(0, 0, 255);     // Blue » (R=0, G=0, B=255)
  FastLED.show();
  delay(DELAY_MS);

  leds[3] = CRGB(255, 165, 0);   // Orange » (R=255, G=165, B=0)
  FastLED.show();
  delay(DELAY_MS);

  leds[4] = CRGB(128, 0, 128);   // Purple » (R=128, G=0, B=128)
  FastLED.show();
  delay(DELAY_MS);

  leds[5] = CRGB(255, 255, 0);   // Yellow » (R=255, G=255, B=0)
  FastLED.show();
  delay(DELAY_MS);
  
  leds[6] = CRGB(255, 255, 255); // White » (R=255, G=255, B=255)
  FastLED.show();
  delay(DELAY_MS);

  leds[7] = CRGB(0, 0, 0);       // Off/Black » (R=0, G=0, B=0)
  FastLED.show();
  delay(DELAY_MS);

  FastLED.clear();
  delay(DELAY_MS);
}

Afficher le code brut

Comment fonctionne le code ?

Jetons un coup d’œil rapide au code pour voir comment fonctionne ce premier exemple.

Y compris la bibliothèque

Tout d’abord, vous devez inclure la bibliothèque FastLED.h, nécessaire pour contrôler les LED WS2812B.

#include 

Variables globales

Définit le nombre total de LED dans votre bande ou anneau.

#define NUM_LEDS   8

Les données de la bande LED dans la broche (DIN_PIN) sont connectées à l’ESP32 GPIO 2.

#define DIN_PIN   2

Réglez la luminosité de toutes les LED (la plage est de 0 à 255).

#define BRIGHTNESS   80

Temps de retard de l’animation en millisecondes (500 ms = 0,5 s).

#define DELAY_MS   500

Créez un tableau appelé LEDs contenant toutes les couleurs des 8 LED. CRGB est la définition du type de couleur de FastLED (Rouge, Vert, Bleu).

CRGB leds[NUM_LEDS];

installation()

Dans le setup(), commencez par initialiser la bande ou l’anneau LED à l’aide de la bibliothèque FastLED. Vous devez passer les arguments :

  • Type de LED = WS2812B
  • Broche de données = DIN_PIN
  • Ordre des couleurs = GRB (la plupart des LED WS2812B utilisent l’ordre GRB, pas RVB)
FastLED.addLeds(leds, NUM_LEDS);

Réglez le niveau de luminosité global et éteignez toutes les LED au début.

FastLED.setBrightness(BRIGHTNESS);   
FastLED.clear();

boucle()

La boucle() s’exécute en continu. Il règle d’abord la première LED (d’indice 0) à la couleur Rouge (R=255, V=0, B=0).

leds[0] = CRGB(255, 0, 0);

La ligne précédente définit uniquement la couleur. Pour changer réellement la couleur des LED physiques, vous devez appeler la méthode show().

FastLED.show();

Ajoutez un délai de 500 millisecondes :

delay(DELAY_MS);

Ensuite on contrôle les autres LED, une à une, dans des couleurs différentes.

leds[1] = CRGB(0, 255, 0);     // Green » (R=0, G=255, B=0)
FastLED.show();
delay(DELAY_MS);

leds[2] = CRGB(0, 0, 255);     // Blue » (R=0, G=0, B=255)
FastLED.show();
delay(DELAY_MS);

leds[3] = CRGB(255, 165, 0);   // Orange » (R=255, G=165, B=0)
FastLED.show();
delay(DELAY_MS);

leds[4] = CRGB(128, 0, 128);   // Purple » (R=128, G=0, B=128)
FastLED.show();
delay(DELAY_MS);

leds[5] = CRGB(255, 255, 0);   // Yellow » (R=255, G=255, B=0)
FastLED.show();
delay(DELAY_MS);

leds[6] = CRGB(255, 255, 255); // White » (R=255, G=255, B=255)
FastLED.show();
delay(DELAY_MS);

leds[7] = CRGB(0, 0, 0);       // Off/Black » (R=0, G=0, B=0)
FastLED.show();
delay(DELAY_MS);

Enfin, nous éteignons toutes les LED en appelant la méthode clear().

FastLED.clear();
delay(DELAY_MS);

Démonstration

Voici une illustration de l’exemple exécuté :

LED RVB adressables ESP32 WS2812B Neopixels définis individuellement
Les LED RVB adressables ESP32 WS2812B Neopixels définissent les couleurs individuellement

Exemple n ° 2 – ESP32 contrôle toutes les LED RVB WS2812B

Le code suivant applique la même couleur à toutes les LED RVB WS2812B avec une seule commande. Vous pouvez télécharger le code suivant sur votre carte ESP32.

/*
  Rui Santos & Sara Santos - Raspberryme.com
  Complete project details at https://Raspberryme.com/esp32-ws2812b-neopixels-arduino/
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.  
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include 

#define NUM_LEDS     8
#define DIN_PIN      2
#define BRIGHTNESS   80   // Brightness (0-255)
#define DELAY_MS     500

CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds(leds, NUM_LEDS);
  FastLED.setBrightness(BRIGHTNESS);
  FastLED.clear();
}

void loop() {
  fill_solid(leds, NUM_LEDS, CRGB(255, 0, 0));     // Color » Red
  FastLED.show();
  delay(DELAY_MS);

  fill_solid(leds, NUM_LEDS, CRGB(0, 255, 0));     // Color » Green
  FastLED.show();
  delay(DELAY_MS);

  fill_solid(leds, NUM_LEDS, CRGB(0, 0, 255));     // Color » Blue
  FastLED.show();
  delay(DELAY_MS);

  fill_solid(leds, NUM_LEDS, CRGB(255, 255, 255)); // Color » White
  FastLED.show();
  delay(DELAY_MS);
}

Afficher le code brut

Présentation du code

Jetons maintenant un coup d’œil rapide au code de cette section. L’initialisation du code est très similaire à l’exemple n°1, mais au lieu de contrôler chaque LED individuellement, nous définissons toutes les LED sur la même couleur à l’aide d’une seule commande.

Pour ce faire, utilisez la fonction fill_solid() qui accepte comme arguments le tableau qui stocke les données de couleur pour toutes les LED, le nombre de LED dans votre bande et la couleur que vous souhaitez appliquer :

fill_solid(leds, NUM_LEDS, CRGB(255, 0, 0));
FastLED.show();
delay(DELAY_MS);

On répète le même processus pour appliquer d’autres couleurs :

fill_solid(leds, NUM_LEDS, CRGB(0, 255, 0));     // Color » Green
FastLED.show();
delay(DELAY_MS);

fill_solid(leds, NUM_LEDS, CRGB(0, 0, 255));     // Color » Blue
FastLED.show();
delay(DELAY_MS);

fill_solid(leds, NUM_LEDS, CRGB(255, 255, 255)); // Color » White
FastLED.show();
delay(DELAY_MS);

Démonstration

Voici une illustration de l’exemple n°2 exécuté :

ESP32 WS2812B LED RVB adressables Neopixels Set Fill Couleur unie
ESP32 WS2812B LED RVB adressables Neopixels Set Fill Couleur unie Bleu

Exemple n ° 3 – LED RVB ESP32 Chase / Cycle Effect WS2812B

Le code suivant crée un effet de poursuite/cycle. Il allume une LED à la fois qui se déplace sur toute la bande, tandis que les autres LED restent éteintes. Téléchargez le code suivant sur votre carte ESP32.

/*
  Rui Santos & Sara Santos - Raspberryme.com
  Complete project details at https://Raspberryme.com/esp32-ws2812b-neopixels-arduino/
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.  
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include 

#define NUM_LEDS     8
#define DIN_PIN      2
#define BRIGHTNESS   80   // Brightness (0-255)
#define DELAY_MS     50   // Chase effect speed

CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds(leds, NUM_LEDS);
  FastLED.setBrightness(BRIGHTNESS);
  FastLED.clear();
}

void loop() {
  // Chase effect from left to right
  for (int i = 0; i < NUM_LEDS; i++) {
    FastLED.clear();            // Clear LEDs
    leds[i] = CRGB(0, 0, 255);  // Light current position
    FastLED.show();
    delay(DELAY_MS);            // Chase effect speed
  }
  // Reverse the chase effect direction
  for (int i = NUM_LEDS - 1; i >= 0; i--) { 
    FastLED.clear();
    leds[i] = CRGB(0, 0, 255);
    FastLED.show();
    delay(DELAY_MS);
  }
}

Afficher le code brut

Présentation du code

Le code de cet exemple est similaire aux précédents. Nous sauterons les parties similaires et expliquerons uniquement l’effet de poursuite.

Cette boucle crée un simple effet de poursuite en allumant une LED bleue à la fois, en la déplaçant sur la bande de la première à la dernière LED, avec un court délai entre chaque étape.

for (int i = 0; i < NUM_LEDS; i++) {
  FastLED.clear();
  leds[i] = CRGB(0, 0, 255);
  FastLED.show();
  delay(DELAY_MS);
}

Ensuite, on répète la fonction mais on déplace les LED de droite à gauche :

for (int i = NUM_LEDS - 1; i >= 0; i--) { 
  FastLED.clear();
  leds[i] = CRGB(0, 0, 255);
  FastLED.show();
  delay(DELAY_MS);
}

Démonstration

Vous trouverez ci-dessous une illustration de l’exemple n°3 en action :

Effet de cycle de poursuite Neopixels LED RVB adressables ESP32 WS2812B
ESP32 WS2812B LED RVB adressables Neopixels Set Fill Couleur unie Bleu

Exemple n ° 4 – LED RVB ESP32 Rainbow Effect WS2812B

Le code suivant crée un effet arc-en-ciel avec des couleurs se déplaçant doucement sur toutes les LED. Téléchargez le code ci-dessous sur votre carte ESP32.

/*
  Rui Santos & Sara Santos - Raspberryme.com
  Complete project details at https://Raspberryme.com/esp32-ws2812b-neopixels-arduino/
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.  
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include 

#define NUM_LEDS     8
#define DIN_PIN      2
#define SATURATION   255   // Saturarion (0-255)
#define BRIGHTNESS   255   // Brightness (0-255)
#define DELAY_MS     20 

CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds(leds, NUM_LEDS);
  FastLED.setBrightness(BRIGHTNESS);
  FastLED.clear();
}

void loop() {
  for (int i = 0; i < NUM_LEDS; i++) {
    // Set LED i to a moving rainbow color effect: i*10 creates color spread across LEDs
    // millis()/20 makes the rainbow slowly animate over time with full saturation and full brightness
    leds[i] = CHSV(i * 10 + millis() / 20, SATURATION, BRIGHTNESS);
  }
  FastLED.show();
  delay(DELAY_MS);
}

Afficher le code brut

Présentation du code

Cet exemple est également très similaire aux précédents, nous nous concentrerons donc uniquement sur le nouveau code de la fonction loop(). Cet extrait de code suivant attribue une couleur arc-en-ciel changeante à la LED en position i, produisant un effet arc-en-ciel animé dynamique.

for (int i = 0; i < NUM_LEDS; i++) {
  leds[i] = CHSV(i * 10 + millis() / 20, SATURATION, BRIGHTNESS);
}
FastLED.show();
delay(DELAY_MS);
  • CHSV() – Crée une couleur en utilisant le modèle de couleur HSV (Teinte, Saturation, Valeur/Luminosité)
    • i * 10 – Modifie la teinte de chaque LED, créant une répartition de couleurs sur la bande
    • millis() / 20 – Ajoute un décalage temporel, faisant bouger lentement les couleurs de l’arc-en-ciel le long de la bande
    • SATURATION (255) – Règle la saturation complète
    • LUMINOSITÉ (255) – Règle la pleine luminosité

Démonstration

Voici à quoi ressemble l’exemple n°4 lorsqu’il est en cours d’exécution :

ESP32 WS2812B LED RVB adressables Neopixels Effet arc-en-ciel
Effet de couleur arc-en-ciel de LED RVB adressables ESP32 WS2812B

Conclusion

Dans ce didacticiel, vous avez appris à contrôler les LED RVB adressables WS2812B (anneaux, bandes ou bâtons). Contrôler ces LED avec le codage Arduino est simple grâce à la bibliothèque FastLED. Vous pouvez désormais appliquer les concepts appris dans ce didacticiel dans vos propres projets. Par exemple, vous pouvez créer un serveur Web avec différents boutons qui contrôlent les LED à distance (nous créerons quelque chose de similaire dans un prochain tutoriel).

Nous avons d’autres tutoriels sur les LED RVB qui pourraient vous plaire :

Apprenez-en plus sur l’ESP32 avec nos ressources :

Nous espérons que vous avez apprécié ce projet et appris quelque chose de nouveau.

Merci d’avoir lu.

Cette vidéo vous emmène dans l’histoire de Raspberry Pi :

Youtube video

  • AZDelivery 3 x LED Ring 5V RVB Compatible avec WS2812B 12-Bit 50mm Compatible avec Arduino et Raspberry Pi incluant Un E-Book!
  • Led Ws2812b 3 X Anneau LED 5V RVB Compatible Avec WS2812B 12-Bit De 50mm - Parfait Pour Arduino Et Raspberry Pi, Pour Une Installation Facile Ws2812b 16x16 Eco Panel,interrupteur Electronique