Cette page explique comment configurer et piloter la led RGB intgrée sur une carte FireBeetle 2 ESP32-E IoT DFR0654.
Ces mesures ont été réalisée avec les versions suivantes :
Sur le schéma de la carte FireBeetle 2, il y a une led RGB intégrée:
Cette led RGB est connectée à la broche IO5 de l'ESP32 (IO5/D8). Vous avez probablement remarqué que la LED n'a qu'une seule broche connectée à l'ESP32, alors que nous devons piloter les trois couleurs (rouge, vert et bleu). La led est une WS2812. Cette led est conçue pour être branchée en cascade :
Ceci explique pourquoi il n'y a qu'une seule broche connectée. Les données sont transmises en série à chaque led en cascade selon la chronologie suivante :
Heureusement, nous n'avons pas à écrire le code pour contrôler les leds RGB. Daniel Garcia l'a déjà fait pour nous ! Il a écrit une bibliothèque nommée FastLED. Cette bibliothèque est conçue pour contrôler les leds RGB WS2812.
Si vous utilisez l'IDE Arduino, vous pouvez ajouter le téléchargement de la bibliothèque en sélectionnant Tools > Manage Library. Recherchez la bibliothèque FastLED et sélectionnez FastLED by Daniel Garcia: :
Pour utiliser la bibliothèque FastLED, vous devez inclure la bibliothèque au début du code :
#include <FastLED.h>
Vous devez également définir les paramètres suivants. Le premier est le nombre de led connectées :
// Une seule led connectée
#define NUM_LEDS 1
Le pin où la led est connectée. Comme expliqué précédemment, dans notre cas, la led RGB est connectée sur IO5 :
// La led est connectée sur IO5
#define DATA_PIN 5
Puisque la bibliothèque peut contrôler plusieurs leds en cascade, nous devons définir un tableau de led. Dans notre cas, nous n'avons besoin que d'une seule led. Mais pour fonctionner, la bibliothèque a besoin d'un tableau.
// Définit un tableau d'une seule led
CRGB leds[NUM_LEDS];
La dernière étape consiste à initialiser la bibliothèque et à créer un objet FastLED.
Cela peut être fait dans la fonction setup()
de l'Arduino :
void setup() {
// Configure un bandeau de (d'une) leds sans SPI
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
}
Cette ligne indique qu'il y un bandeau de NUM_LEDS
leds RGB (NEOPIXEL
) connectées sur DATA_PIN
.
Contrôler les leds est assez facile. Il suffit de régler la valeur de leds[0]
. Plusieurs options
peuvent être utilisées. Commençons par spécifier la couleur directement :
// Allume la led en rouge
leds[0] = CRGB::Red;
FastLED.show();
// Allume la led en vert
leds[0] = CRGB::Green;
FastLED.show();
// Allume la led en bleu
leds[0] = CRGB::Blue;
FastLED.show();
Pour envoyer la commande à la led, nous devons appeler FastLED.show();
. Dans ce qui suit,
et pour ne pas alourdir les explications, cette commande n'est pas répétée, mais elle doit être appelée pour changer la couleur de la led.
Nous pouvons utiliser n'importe quelle couleur standard HTML / CSS. Les couleurs valides sont listées sur cette page. Par exemple, ici la led est commandée en magenta foncé :
// Allume la led en magenta foncé
leds[0] = CRGB::DarkMagenta;
Nous pouvons également définir les trois composantes (rouge, verte et bleue) :
leds[0].r = 220;
leds[0].g = 53;
leds[0].b = 65;
Ou avec la couleur spécifiée en hexadécimal:
leds[0] = 0xDC3545;
Ou avec la fonction membre setRGB()
:
leds[0].setRGB(220, 53, 65);
Nous pouvons également définir les valeurs HSV (entre 0 et 255):
leds[0] = CHSV( 251, 194, 255);
Avec la méthode alternative :
leds[i].setHSV( 251, 194, 255);
Voici le code source utilisé pour la séquence arc-en-ciel présentée dans la vidéo d'introduction :
#include <FastLED.h>
// Only one led is connected
#define NUM_LEDS 1
// The led is connected on IO5
#define DATA_PIN 5
// Define an array of one leds
CRGB leds[NUM_LEDS];
void setup() {
// Add array leds without SPI
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
}
void loop() {
// Loop through rainbow colors
for (int i=0; i<=255;i++) {
leds[0] = CHSV( i, 255, 100);
FastLED.show();
delay(16);
}
}