Exemples : programmer les deux LEDs du NebuleAir
Deux projets. Le premier fait clignoter les LEDs au démarrage, puis change leur couleur chaque seconde. Le second colore la LED 0 en vert, orange ou rouge selon une valeur de PM2.5, pendant que la LED 1 clignote. Il suffit de la carte, sans capteur.
Code de l'exemple du guide IUT-AMU-07 « Programmer les deux LEDs de couleur du NebuleAir », v1.2 du 2026-11-04. Les explications sont dans le PDF.
Mise en route
- Téléchargez le projet (bouton vert), décompressez-le. Dans VS Code, onglet PlatformIO, Open Project, choisissez le dossier décompressé.
Ou créez un projet PlatformIO (carte Espressif ESP32 Dev Module, framework Arduino) et remplacez ses fichiers par ceux ci-dessous, avec le bouton Copier. - Au démarrage de l'exemple 1, les LEDs clignotent 3 fois, puis la LED 0 reste seule allumée en blanc 2 secondes : repérez laquelle c'est sur votre carte.
- Téléversez (Upload), puis ouvrez le moniteur série (Monitor, 115200 bauds).
Rouge affiché en vert ? Gardez NEO_GRB dans la déclaration de leds. Rien ne s'allume ? Chaque changement de couleur doit être suivi de leds.show().
Exemple 1 : clignoter, puis changer de couleur
Les LEDs clignotent 3 fois au démarrage, puis changent de couleur chaque seconde. Il suffit de la carte.
Télécharger le projet IUT-AMU-07-exemple-v1.2.zip[env:nebuleair]
platform = espressif32 @ 7.1.3
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps =
adafruit/Adafruit NeoPixel @ 1.12.3
// Exemple 1 : les LEDs clignotent au démarrage, puis changent de couleur chaque seconde.
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
// Les 2 LEDs WS2812 de la carte NebuleAir, chaînées sur la GPIO 33
#define LED_PIN 33
#define LED_COUNT 2
Adafruit_NeoPixel leds(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
// Les couleurs du défilé (rouge, vert, bleu : de 0 à 255)
const uint32_t COULEURS[] = {
Adafruit_NeoPixel::Color(255, 0, 0), // rouge
Adafruit_NeoPixel::Color(0, 255, 0), // vert
Adafruit_NeoPixel::Color(0, 0, 255), // bleu
Adafruit_NeoPixel::Color(255, 180, 0), // jaune
Adafruit_NeoPixel::Color(160, 0, 255), // violet
};
const int NB_COULEURS = 5;
const uint32_t BLANC = Adafruit_NeoPixel::Color(255, 255, 255);
void setup() {
Serial.begin(115200);
leds.begin(); // prépare la broche
leds.setBrightness(60); // luminosité globale, de 0 à 255 : une fois ici
leds.clear(); // les deux LEDs éteintes...
leds.show(); // ... et rien ne change tant qu'on n'appelle pas show()
// Au démarrage : 3 clignotements blancs des deux LEDs
for (int i = 0; i < 3; i++) {
leds.setPixelColor(0, BLANC);
leds.setPixelColor(1, BLANC);
leds.show();
delay(200);
leds.clear();
leds.show();
delay(200);
}
// Puis la LED 0 seule, 2 secondes, pour savoir laquelle c'est
leds.setPixelColor(0, BLANC);
leds.show();
Serial.println("LED 0 en blanc");
delay(2000);
}
int n = 0; // numéro de la couleur affichée sur la LED 0
void loop() {
// La LED 0 prend la couleur n, la LED 1 la suivante
leds.setPixelColor(0, COULEURS[n]);
leds.setPixelColor(1, COULEURS[(n + 1) % NB_COULEURS]);
leds.show();
Serial.printf("LED 0 : couleur %d\n", n);
n = (n + 1) % NB_COULEURS; // couleur suivante ; après la dernière, retour à 0
delay(1000);
}
Exemple 2 : la couleur suit le PM2.5
La LED 0 passe au vert, à l'orange ou au rouge selon une valeur de PM2.5 (au hasard ici, à remplacer par la mesure du NextPM du guide IUT-AMU-04) ; la LED 1 clignote en bleu.
Télécharger le projet IUT-AMU-07-exemple-pm-v1.2.zip[env:nebuleair]
platform = espressif32 @ 7.1.3
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps =
adafruit/Adafruit NeoPixel @ 1.12.3
// Exemple 2 : la LED 0 prend la couleur du niveau de PM2.5,
// la LED 1 clignote pour montrer que le programme tourne.
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
// Les 2 LEDs WS2812 de la carte NebuleAir, chaînées sur la GPIO 33
#define LED_PIN 33
#define LED_COUNT 2
Adafruit_NeoPixel leds(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
const uint32_t VERT = Adafruit_NeoPixel::Color(0, 255, 0);
const uint32_t ORANGE = Adafruit_NeoPixel::Color(255, 80, 0);
const uint32_t ROUGE = Adafruit_NeoPixel::Color(255, 0, 0);
const uint32_t BLEU = Adafruit_NeoPixel::Color(0, 0, 255);
const uint32_t NOIR = 0; // éteinte
// La mesure de PM2.5, en µg/m³. Ici une valeur au hasard (0,0 à 40,0) :
// à remplacer par la lecture du NextPM de votre programme (guide IUT-AMU-04).
float lirePM25() {
return random(0, 401) / 10.0;
}
// Couleur selon le niveau de PM2.5 (µg/m³) : seuils à adapter
uint32_t couleurPM25(float pm25) {
if (pm25 < 10) return VERT;
if (pm25 < 25) return ORANGE;
return ROUGE;
}
void setup() {
Serial.begin(115200);
leds.begin();
leds.setBrightness(60);
leds.clear();
leds.show();
}
unsigned long derniereMesure = 0; // dernière mesure (ms)
unsigned long dernierClignot = 0; // dernier changement de la LED 1 (ms)
bool led1Allumee = false;
void loop() {
unsigned long maintenant = millis();
// Toutes les 10 s : une mesure, et la LED 0 prend sa couleur
if (maintenant - derniereMesure >= 10000) {
derniereMesure = maintenant;
float pm25 = lirePM25();
leds.setPixelColor(0, couleurPM25(pm25));
leds.show();
Serial.printf("PM2.5 = %.1f ug/m3\n", pm25);
}
// Toutes les 500 ms : la LED 1 s'allume ou s'éteint
if (maintenant - dernierClignot >= 500) {
dernierClignot = maintenant;
led1Allumee = !led1Allumee;
leds.setPixelColor(1, led1Allumee ? BLEU : NOIR);
leds.show();
}
}