🛠 Bandeau NeoPixel piloté par le périphérique RMT
Objetivos
Pasar del píxel único a la tira de direccionables comprendiendo la capa de hardware: en ESP32-S3, la biblioteca Adafruit NeoPixel genera las tramas WS2812 (800 kHz) con el periférico RMT (Remote Control), un generador de impulsos controlado por DMA. Escribirás una animación de «barrido» sobre 8 píxeles, dimensionarás la alimentación (un WS2812 en blanco puro consume hasta 60 mA) y evitarás las corrupciones de trama relacionadas con las interrupciones de Wi-Fi.
Material
- 1 placa ESP32-S3 (GPIO48 libre de píxel integrado, o tira externa)
- 1 tira de 8 píxeles WS2812B (5 V)
- 1 resistencia de 330 a 470 ohmios para la línea DATA
- Fuente de alimentación de 5 V dedicada o puerto USB capaz de suministrar 500 mA
- Cables: DATA -> GPIO48 a través de la resistencia, VCC -> 5 V, GND -> GND común
Código completo
// Bandeau 8x WS2812 sur GPIO48, trames generees par le peripherique RMT
#include <Adafruit_NeoPixel.h>
#define PIN 48
#define N 8
Adafruit_NeoPixel strip(N, PIN, NEO_GRB + NEO_KHZ800);
uint32_t couleur(uint8_t r, uint8_t g, uint8_t b) {
return strip.Color(r, g, b);
}
void setup {
strip.begin;
strip.setBrightness(60);
strip.show; // eteint tout au demarrage
}
void loop {
static uint8_t pos = 0;
static int8_t dir = 1;
strip.clear;
strip.setPixelColor(pos, couleur(255, 80, 0)); // tete
if (pos > 0) strip.setPixelColor(pos - 1, couleur(90, 30, 0));
if (pos < N - 1) strip.setPixelColor(pos + 1, couleur(90, 30, 0));
strip.show;
if (pos == 0) dir = 1; else if (pos == N - 1) dir = -1;
pos += dir;
delay(60);
}
Verificación esperada
Un punto naranja barre la tira de ida y vuelta con una estela atenuada. Los 8 píxeles responden de forma homogénea, sin píxeles verdes erráticos. Al abrir el monitor serie, se puede mostrar ESP.getFreeHeap para verificar que la RAM interna (512 KB) siga siendo holgada: la biblioteca asigna una copia del búfer de píxeles y configura un canal RMT.
Errores frecuentes
- Alimentación insuficiente: alimentar 8 píxeles en blanco intenso solo a través del pin de 3,3 V de la placa provoca una caída de tensión y reinicios; utiliza los 5 V de la tira y una masa común.
- Olvidar la resistencia en serie en DATA: a menudo «funciona», pero las tramas son sensibles a las interferencias en cables largos; la resistencia de 330-470 ohmios es una garantía barata.
- Invertir DATA y la señal de salida de la tira: el conector de entrada lleva la flecha DATA IN, no DATA OUT.
- Corrupciones con Wi-Fi activo: las interrupciones de radio pueden desplazar los impulsos RMT; la biblioteca utiliza DMA, pero en caso de parpadeo, reduce el brillo y evita asignaciones en bucle.
- Orden incorrecto de los colores: NEO_GRB es el cableado estándar de los WS2812B; una tira SK6812 RGBW requiere NEO_GRB + NEO_KHZ800 con gestión del canal W.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino