Led RGB intégrée sur un ESP32 FireBeetle DFR0654

Introduction

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 :

Led RGB intégrée

Sur le schéma de la carte FireBeetle 2, il y a une led RGB intégrée:

Led RGB intgérée sur la carte esp32 FireBeetle DFR0654

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 :

Led RGB ws2812 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 :

Chronogramme de la transmission de données aux leds RGB WS2812

Bibliothèque FastLED

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

Bibliothèque FastLED dans l'IDE Arduino (Library Manager)

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.

Piloter la led RGB

Couleurs élémentaires (HTML)

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;

Allumer la led RGB de la carte ESP32 FireBeetle DFR0654 en magenta foncé

RGB

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);

HSV

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);

Code source

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);
  }
}

Téléchargement

Voir aussi


Dernière mise à jour : 16/01/2023