ESP8266 - Bande LED DotStar
Dans ce tutoriel, nous allons apprendre à utiliser l'ESP8266 pour contrôler une bande LED RGB DotStar. En détail, nous apprendrons :
- Comment connecter un ESP8266 à la bande LED DotStar
- Comment programmer l'ESP8266 pour contrôler la couleur et la luminosité de chaque LED individuelle sur la bande de LEDs
- Comment programmer l'ESP8266 pour créer l'effet de comète pour la bande LED DotStar
Préparation du matériel
Or you can buy the following sensor kits:
1 | × | DIYables Sensor Kit (30 sensors/displays) | |
1 | × | DIYables Sensor Kit (18 sensors/displays) |
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.
À propos de la bande LED RGB DotStar
Brochage
la bande LED RGB DotStar possède trois broches :
- Broche GND : doit être connectée à GND (0V)
- Broche CI : broche d'horloge qui reçoit le signal d'horloge. Elle doit être connectée à une broche de l'ESP8266.
- Broche DI : broche de données qui reçoit le signal de contrôle. Elle doit être connectée à une broche de l'ESP8266.
- Broche 5V : doit être connectée à 5V d'une alimentation externe.
Diagramme de câblage
This image is created using Fritzing. Click to enlarge image
Voir plus dans Brochage ESP8266. et Comment alimenter l'ESP8266..
Comment programmer pour une bande LED RGB DotStar
- Inclure une bibliothèque DotStar
#include <Adafruit_DotStar.h>
#include <SPI.h> // METTEZ CETTE LIGNE EN COMMENTAIRE POUR GEMMA OU TRINKET
- Déclarez un objet DotStar.
#define NUMPIXELS 144 // Nombre de LEDs dans la bande
// Voici comment contrôler les LEDs à partir de n'importe quelles deux broches :
#define DATAPIN 2
#define CLOCKPIN 3
Adafruit_DotStar strip(NUMPIXELS, DATAPIN, CLOCKPIN, DOTSTAR_BRG);
- Initialise le DotStar.
strip.begin(); // Initialiser les broches pour la sortie
strip.setBrightness(255);
strip.show(); // Éteindre toutes les LEDs dès que possible
- Définir la couleur (r, g, b) de chaque LED individuelle (appelée pixel).
strip.setPixelColor(pixel, g, r, b);
- Définir la luminosité de toute la bande.
strip.setBrightness(100); // une valeur de 0 à 255
※ Note:
- DotStar.setBrightness() est utilisé pour tous les pixels sur la bande LED. Pour régler la luminosité de chaque pixel individuellement, nous pouvons ajuster la valeur de la couleur.
- Les valeurs définies par DotStar.setBrightness() et DotStar.setPixelColor() ne prennent effet que lorsque DotStar.show() est appelé.
Code ESP8266
Le code ci-dessous transforme les pixels en rouge un par un avec un délai entre chaque pixel.
/*
* Ce code ESP8266 NodeMCU a été développé par newbiely.fr
* Ce code ESP8266 NodeMCU est mis à disposition du public sans aucune restriction.
* Pour des instructions complètes et des schémas de câblage, veuillez visiter:
* https://newbiely.fr/tutorials/esp8266/esp8266-dotstar-led-strip
*/
#include <Adafruit_DotStar.h>
#include <SPI.h> // COMMENT OUT THIS LINE FOR GEMMA OR TRINKET
#define NUMPIXELS 144 // Number of LEDs in strip
// Here's how to control the LEDs from any two pins:
#define DATAPIN D6 // The ESP8266 pin D6
#define CLOCKPIN D5 // The ESP8266 pin D5
Adafruit_DotStar strip(NUMPIXELS, DATAPIN, CLOCKPIN, DOTSTAR_BRG);
void setup() {
Serial.begin(9600);
strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
strip.show(); // Turn OFF all pixels ASAP
strip.setBrightness(255);
}
void loop() {
for (int pixel = 0; pixel < NUMPIXELS; pixel++) {
// red color
int r = 255; // CHANGE COLOR AS YOUR DESIRE
int g = 0; // CHANGE COLOR AS YOUR DESIRE
int b = 0; // CHANGE COLOR AS YOUR DESIRE
strip.clear(); // turn off all pixel
strip.setPixelColor(pixel, g, r, b); // turn on a single pixel
strip.show();
delay(1000); // keep each pixel on 1 seconds
}
}
Étapes rapides
Pour commencer avec ESP8266 sur Arduino IDE, suivez ces étapes :
- Consultez le tutoriel Installation du logiciel ESP8266. si c'est votre première utilisation de l'ESP8266.
- Connectez les composants comme indiqué dans le schéma.
- Connectez la carte ESP8266 à votre ordinateur via un câble USB.
- Ouvrez Arduino IDE sur votre ordinateur.
- Choisissez la bonne carte ESP8266, comme (par exemple NodeMCU 1.0 (Module ESP-12E)), et son port COM respectif.
- Cliquez sur l'icône Libraries dans la barre gauche de l'Arduino IDE.
- Recherchez "Adafruit DotStar", puis trouvez la bibliothèque DotStar par Adafruit
- Cliquez sur le bouton Install pour installer la bibliothèque DotStar.
- Vous devrez installer la dépendance. Cliquez sur le bouton Install All.
- Copiez le code ci-dessus et ouvrez-le avec Arduino IDE
- Cliquez sur le bouton Upload dans Arduino IDE pour charger le code sur ESP8266
- Observez l'effet de la LED
Code ESP8266 - Effet de comète sur bande LED
Le code ci-dessous produit l'effet de comète pour la bande LED DotStar.
/*
* Ce code ESP8266 NodeMCU a été développé par newbiely.fr
* Ce code ESP8266 NodeMCU est mis à disposition du public sans aucune restriction.
* Pour des instructions complètes et des schémas de câblage, veuillez visiter:
* https://newbiely.fr/tutorials/esp8266/esp8266-dotstar-led-strip
*/
#include <Adafruit_DotStar.h>
#include <SPI.h> // COMMENT OUT THIS LINE FOR GEMMA OR TRINKET
#define COMET_LENGTH_ALL 30 // in pixel COMET_LENGTH_ALL = COMET_LENGTH_BODY + COMET_LENGTH_HEAD
#define COMET_LENGTH_BODY 25 // in pixel
#define COMET_LENGTH_HEAD 5 // in pixel
#define TWO_COMET_DISTANCE 10 // in pixel
#define COMET_SPEED 2000 // in millisecond, the time need to move through 144 pixels
#define COMET_COLOR_R 204 // color
#define COMET_COLOR_G 255 // color
#define COMET_COLOR_B 255 // color
#define COMET_BRIGHTNESS_MIN 1
#define COMET_BRIGHTNESS_MAX 200
#define COMET_BRIGHTNESS_HEAD 80
#define FLICKER_MAX 255
#define FLICKER_MIN 100
#define FLICKER_SPEED 800 // in millisecond
#define NUMPIXELS 144 // Number of LEDs in strip
// Here's how to control the LEDs from any two pins:
#define DATAPIN D6 // The ESP8266 pin D6
#define CLOCKPIN D5 // The ESP8266 pin D5
Adafruit_DotStar strip(NUMPIXELS, DATAPIN, CLOCKPIN, DOTSTAR_BRG);
int pos_head = 0;
unsigned long cometTimeStart;
unsigned long flickerTimeStart;
unsigned long progress;
unsigned long cometBrightness;
unsigned long flickerBrightness;
unsigned long TIME_PER_PIXEL;
void setup() {
Serial.begin(9600);
strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
strip.show(); // Turn OFF all pixels ASAP
strip.setBrightness(255);
TIME_PER_PIXEL = map(1, 0, NUMPIXELS, 0, COMET_SPEED);
cometTimeStart = millis();
flickerTimeStart = millis();
}
void loop() {
progress = millis() - flickerTimeStart;
if (progress >= 2 * FLICKER_SPEED) {
progress = 2 * FLICKER_SPEED;
flickerTimeStart = millis();
}
if (progress > FLICKER_SPEED)
progress = 2 * FLICKER_SPEED - progress;
flickerBrightness = map(progress, 0, FLICKER_SPEED, FLICKER_MIN, FLICKER_MAX);
strip.setBrightness(flickerBrightness);
progress = millis() - cometTimeStart;
if (progress >= TIME_PER_PIXEL) {
pos_head++;
pos_head %= (COMET_LENGTH_ALL + TWO_COMET_DISTANCE);
int offset = COMET_LENGTH_ALL - pos_head;
for (int pixel = 0; pixel < NUMPIXELS; pixel++) {
int pos_offset = pixel + offset;
pos_offset %= (COMET_LENGTH_ALL + TWO_COMET_DISTANCE);
if (pos_offset < COMET_LENGTH_BODY)
cometBrightness = map(pos_offset, 0, COMET_LENGTH_BODY - 1, COMET_BRIGHTNESS_MIN, COMET_BRIGHTNESS_MAX);
else if (pos_offset >= COMET_LENGTH_BODY && pos_offset < COMET_LENGTH_ALL)
cometBrightness = map(pos_offset - COMET_LENGTH_BODY + 1, 0, COMET_LENGTH_ALL - COMET_LENGTH_BODY, COMET_BRIGHTNESS_MAX, COMET_BRIGHTNESS_HEAD);
else
cometBrightness = 0;
int r = (COMET_COLOR_R * cometBrightness) >> 8;
int g = (COMET_COLOR_G * cometBrightness) >> 8;
int b = (COMET_COLOR_B * cometBrightness) >> 8;
strip.setPixelColor(pixel, g, r, b);
}
strip.show();
cometTimeStart = millis(); // new circle
}
}
※ Note:
Pour tout autre effet LED, nous proposons le service de programmation payant