Matrice LED NeoPixel Arduino: guida a pannelli WS2812B 8x8 e 16x16
Matrice LED NeoPixel con Arduino: pannelli WS2812B 8x8 e 16x16, disposizione a serpentina, funzione XY, testo scorrevole, animazioni, corrente e codice ESP32 e Pico.
La matrice NeoPixel è uno dei display più spettacolari che tu possa costruire con Arduino: è formata da 8x8 (64 LED) o 16x16 (256 LED) LED RGB indirizzabili WS2812B disposti su un pannello, e il colore di ogni pixel si imposta singolarmente con un solo filo dati. È ideale per testi scorrevoli, icone, piccoli giochi, indicatori di spettro audio e animazioni decorative. In questa guida imparerai passo dopo passo la disposizione a serpentina del pannello, la funzione che converte le coordinate x-y nel numero del LED, il testo scorrevole e le animazioni.
Lavorare con una matrice richiede un po' più di attenzione rispetto a una singola striscia NeoPixel. 256 LED a piena luminosità possono assorbire più di 15 ampere, i 2 KB di RAM di Arduino Uno si riempiono in fretta con i pannelli grandi, e l'uscita a 3,3 V di ESP32 e Pico può dare problemi con alcuni pannelli. Per questo, oltre al codice, vedremo anche il calcolo della corrente, la limitazione della luminosità e la gestione della memoria. Se non conosci ancora le basi del WS2812B, dai prima un'occhiata all'articolo LED WS2812B NeoPixel.

Cos'è una matrice LED NeoPixel e come funziona?
All'interno di ogni LED WS2812B, accanto ai chip rosso, verde e blu, c'è un piccolo circuito integrato di controllo. Il microcontrollore invia sulla linea dati a 800 kHz 24 bit di colore per ogni LED; l'ordine dei bit è verde, rosso, blu (GRB). Il primo LED trattiene i primi 24 bit e passa il resto al successivo tramite il pin DOUT, e così via lungo la catena. Nel pannello a matrice è lo stesso: i 64 o 256 LED sono in realtà una lunga striscia ripiegata a forma di quadrato. Inviare i dati a un LED richiede circa 30 microsecondi, quindi aggiornare un pannello da 256 LED richiede circa 7,7 ms: più di 100 fotogrammi al secondo, per animazioni fluide.
| Caratteristica | Matrice 8x8 | Matrice 16x16 |
|---|---|---|
| Numero di LED | 64 | 256 |
| Dimensione tipica | Circa 65–80 mm | Circa 160 mm (pannello flessibile) |
| Alimentazione | 5 V | 5 V |
| Corrente massima in bianco pieno | Circa 3,8 A | Circa 15,4 A |
| Con tutti i LED spenti | Circa 40–65 mA | Circa 150–260 mA |
| RAM necessaria (3 byte/LED) | 192 byte | 768 byte |
| Tempo per aggiornare tutto il pannello | Circa 2 ms | Circa 7,7 ms |
| Linea dati | Un solo pin (DIN), 800 kHz | Un solo pin (DIN), 800 kHz |
Disposizione dei pixel a serpentina e funzione di coordinate XY
Nel codice vorresti ragionare con le coordinate (x, y) di un pixel, ma i LED si indirizzano con un unico numero progressivo che parte da 0. Quasi tutti i pannelli flessibili e i modelli 16x16 hanno i LED disposti a serpentina (zigzag): la prima riga va da sinistra a destra, la seconda torna da destra a sinistra, la terza di nuovo da sinistra a destra. Questa disposizione semplifica la produzione, perché la fine di ogni riga si collega all'inizio della successiva nel modo più breve. Nella tabella qui sotto vedi i numeri dei LED delle prime quattro righe di un pannello 8x8 a serpentina:
| Riga | x=0 | x=1 | x=2 | x=3 | x=4 | x=5 | x=6 | x=7 |
|---|---|---|---|---|---|---|---|---|
| y=0 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| y=1 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
| y=2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| y=3 | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 |
La formula ne deriva da sola: nelle righe pari indice = y × W + x, in quelle dispari indice = y × W + (W − 1 − x), dove W è la larghezza del pannello. Per esempio, in un 8x8 il punto (2, 1) è il LED numero 1 × 8 + (7 − 2) = 13. Attenzione: su alcune schede 8x8 con PCB rigido tutte le righe procedono nella stessa direzione (disposizione lineare o progressiva); in quel caso la formula è semplicemente y × W + x. In altri pannelli i LED si ripiegano lungo le colonne invece che lungo le righe, quindi x e y vanno scambiati. Il modo più sicuro per capire di che tipo è il tuo pannello è eseguire un codice di prova che accende i LED uno alla volta e osservare come procede la luce.
Collegamento della matrice NeoPixel: Arduino Uno, ESP32 e Pico
| Pin della matrice | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| 5V (VCC) | Polo + dell'alimentatore esterno (per un piccolo test, il pin 5V) | Polo + dell'alimentatore esterno a 5 V | Alimentatore esterno a 5 V oppure VBUS (solo 8x8, luminosità bassa) |
| GND | GND + polo – dell'alimentatore (in comune) | GND + polo – dell'alimentatore (in comune) | GND + polo – dell'alimentatore (in comune) |
| DIN | D6 (con resistenza da 330 Ω) | GPIO 16 (con resistenza da 330 Ω) | GP2 (con resistenza da 330 Ω) |
| DOUT | Al DIN del pannello successivo (collegamento in catena) | Al DIN del pannello successivo | Al DIN del pannello successivo |
Per un circuito affidabile aggiungi tre piccoli componenti: una resistenza da 300–500 Ω in serie sulla linea dati (protegge l'ingresso del primo LED dai picchi di tensione), un condensatore elettrolitico da circa 1000 µF tra 5V e GND del pannello (attenua l'impulso di corrente all'accensione dell'alimentatore) e, se serve, un convertitore di livello sulle schede a 3,3 V. Con alimentazione a 5 V, il WS2812B vuole vedere sull'ingresso dati almeno circa 3,5 V (il 70% della tensione di alimentazione); l'uscita a 3,3 V di ESP32 e Pico funziona con la maggior parte dei pannelli, ma è sotto questa soglia. Se vedi sfarfallii o colori casuali, usa un buffer come il 74AHCT125; trovi i dettagli nell'articolo sul convertitore di livello logico.
Il primo programma per la matrice passo dopo passo (Arduino Uno)
- Nell'IDE di Arduino apri il Gestore librerie e installa la libreria Adafruit NeoPixel.
- Collega il pannello come nella tabella: DIN a D6 con la resistenza da 330 Ω, GND al GND di Arduino, 5V all'alimentatore.
- Imposta i valori W e H nel codice in base alle dimensioni del pannello; per un 16x16 mettili entrambi a 16.
- Nella prima prova tieni bassa la luminosità: setBrightness(30) porta la corrente di un pannello 8x8 a un livello che la USB riesce a sostenere.
- Carica il codice: dovresti vedere un arcobaleno diagonale che scorre. Se i colori appaiono spezzati riga per riga, la disposizione del tuo pannello è diversa: correggi di conseguenza la funzione xyIndex.
1#include <Adafruit_NeoPixel.h>
2
3#define PIN_DATA 6 // DIN pini (330 ohm ile) / DIN pin (via 330 ohm)
4#define W 8 // panel genişliği / panel width
5#define H 8 // panel yüksekliği / panel height
6#define NUM_LEDS (W * H)
7
8Adafruit_NeoPixel strip(NUM_LEDS, PIN_DATA, NEO_GRB + NEO_KHZ800);
9
10// (x, y) koordinatını LED numarasına çevirir (zikzak) / converts (x, y) to LED index (serpentine)
11uint16_t xyIndex(uint8_t x, uint8_t y) {
12 if (y & 1) {
13 return y * W + (W - 1 - x); // tek satırlar sağdan sola / odd rows run right to left
14 }
15 return y * W + x; // çift satırlar soldan sağa / even rows run left to right
16}
17
18void setup() {
19 strip.begin();
20 strip.setBrightness(30); // 0-255, düşük tut / keep it low
21 strip.clear();
22 strip.show();
23}
24
25void loop() {
26 static uint16_t hueBase = 0;
27 for (uint8_t y = 0; y < H; y++) {
28 for (uint8_t x = 0; x < W; x++) {
29 uint16_t hue = hueBase + (x + y) * 4096U; // çapraz gökkuşağı / diagonal rainbow
30 strip.setPixelColor(xyIndex(x, y), strip.gamma32(strip.ColorHSV(hue)));
31 }
32 }
33 strip.show(); // tamponu panele gönder / push the buffer to the panel
34 hueBase += 256; // renkleri kaydır / shift the colors
35 delay(20);
36}Il cuore del codice è la funzione xyIndex(): nasconde la serpentina invertendo x sulle righe dispari, così nel resto del codice ragioni solo con le coordinate. ColorHSV() converte in RGB un valore di tonalità da 0 a 65535 sulla ruota dei colori; poiché la tonalità cambia al crescere di x + y, si formano strisce di colore diagonali. gamma32() corregge i valori in base alla percezione della luminosità dell'occhio e rende le transizioni di colore più naturali. Infine, finché non chiami show() nessuna modifica arriva al pannello: scrivere prima tutti i pixel in memoria e inviarli in una volta sola è il segreto di un'immagine fluida.
Testo scorrevole con Adafruit NeoMatrix
Per disegnare lettere e simboli non devi lavorare pixel per pixel. La libreria Adafruit NeoMatrix trasforma il pannello NeoPixel in un display compatibile con Adafruit GFX, così funzioni come print(), drawLine(), fillRect() e drawBitmap(), che usi con i display OLED, funzionano anche sulla matrice. Quando installi Adafruit NeoMatrix dal Gestore librerie, installa anche le dipendenze Adafruit GFX e Adafruit NeoPixel. I flag nel costruttore descrivono la disposizione fisica del pannello: NEO_MATRIX_TOP + NEO_MATRIX_LEFT indica che il primo LED è in alto a sinistra, NEO_MATRIX_ROWS che i LED seguono le righe e NEO_MATRIX_ZIGZAG che le righe sono a zigzag; su una scheda con disposizione lineare basta scrivere NEO_MATRIX_PROGRESSIVE al posto di ZIGZAG. Il font predefinito 5×7 si adatta perfettamente a un pannello di 8 righe e ogni carattere, spazio incluso, è largo 6 pixel. Un testo di nove lettere occupa 54 pixel; la costante textWidth lo calcola in automatico e, quando x scende sotto questo valore, il testo rientra da destra e cambia colore.
1#include <Adafruit_GFX.h>
2#include <Adafruit_NeoMatrix.h>
3#include <Adafruit_NeoPixel.h>
4
5#define PIN_DATA 6
6
7// 8x8 panel, ilk LED sol üstte, zikzak satırlar / 8x8 panel, first LED top-left, zigzag rows
8Adafruit_NeoMatrix matrix(8, 8, PIN_DATA,
9 NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
10 NEO_GRB + NEO_KHZ800);
11
12const char text[] = "BlueGrays";
13const int textWidth = (sizeof(text) - 1) * 6; // karakter başına 6 piksel / 6 pixels per character
14int x = 8; // yazı sağ kenardan başlar / text starts at the right edge
15uint8_t colorStep = 0;
16
17void setup() {
18 matrix.begin();
19 matrix.setTextWrap(false); // satır kaydırma kapalı / no line wrap
20 matrix.setBrightness(40);
21 matrix.setTextColor(matrix.Color(255, 0, 0));
22}
23
24void loop() {
25 matrix.fillScreen(0);
26 matrix.setCursor(x, 0);
27 matrix.print(text);
28 if (--x < -textWidth) { // yazı panelden tamamen çıktı / text fully left the panel
29 x = matrix.width();
30 colorStep = (colorStep + 1) % 3;
31 if (colorStep == 0) matrix.setTextColor(matrix.Color(255, 0, 0));
32 if (colorStep == 1) matrix.setTextColor(matrix.Color(0, 255, 0));
33 if (colorStep == 2) matrix.setTextColor(matrix.Color(0, 0, 255));
34 }
35 matrix.show();
36 delay(80); // kayma hızı / scroll speed
37}Il limite di memoria di Arduino Uno
Il processore ATmega328P dell'Arduino Uno ha solo 2048 byte di RAM e per ogni LED serve un buffer colore di 3 byte. Un pannello 8x8 ci sta comodamente con 192 byte, mentre un 16x16 con 768 byte occupa da solo più di un terzo della RAM. Il lato insidioso è questo: Adafruit NeoPixel alloca il buffer mentre il programma è in esecuzione, quindi non rientra nella percentuale di variabili globali mostrata al termine della compilazione. Anche se la compilazione indica il 70% di utilizzo, aggiungendo il buffer del pannello la memoria può esaurirsi: la scheda si blocca o vedi colori senza senso. Inoltre, sulle schede AVR le interruzioni sono disattivate durante show(); con 256 LED dura circa 7,7 ms, durante i quali millis() può restare indietro e i dati in arrivo da Serial possono andare persi. Per i pannelli grandi, Arduino Mega con 8 KB di RAM o ESP32 con centinaia di kilobyte sono scelte molto più comode.
| Pannello | Numero di LED | Buffer colore | Quota della RAM dell'Uno | Adatto all'Uno? |
|---|---|---|---|---|
| 8x8 | 64 | 192 byte | 9% | Comodo |
| 8x32 | 256 | 768 byte | 37,5% | Con attenzione |
| 16x16 | 256 | 768 byte | 37,5% | Con attenzione |
| 2 pannelli 16x16 | 512 | 1536 byte | 75% | Difficile in pratica |
| 32x32 | 1024 | 3072 byte | 150% | Impossibile (usa ESP32) |
Consumo di corrente e limitazione della luminosità
Ogni canale colore di un WS2812B assorbe circa 20 mA a piena luminosità; con i tre canali accesi insieme, cioè in bianco, sono 60 mA per LED. Per un calcolo approssimativo puoi usare la formula I ≈ numero di LED × 60 mA × (luminosità / 255). Un pannello 16x16 in bianco pieno assorbe 256 × 60 = 15.360 mA, cioè più di 15 A, un carico che mette a dura prova sia gli alimentatori sia le sottili piste di rame del pannello. La buona notizia è che la matrice è molto luminosa: in ambienti interni una luminosità tra 20 e 50 su 255 è già ben visibile. Nelle animazioni reali non tutti i LED sono bianchi contemporaneamente, quindi la corrente media è molto inferiore al valore calcolato, ma l'alimentatore va scelto sul caso peggiore oppure la corrente va limitata via software.
| Pannello (bianco pieno) | Luminosità 32 (12,5%) | Luminosità 64 (25%) | Luminosità 255 (100%) | Alimentatore consigliato |
|---|---|---|---|---|
| 8x8 (64 LED) | Circa 0,48 A | Circa 0,96 A | Circa 3,8 A | 5 V 2–4 A |
| 16x16 (256 LED) | Circa 1,9 A | Circa 3,9 A | Circa 15,4 A | 5 V 4–10 A + limitazione software |
Su un pannello 16x16, se alimenti solo da un'estremità, nei LED dell'angolo opposto la tensione cala e il bianco appare giallastro o rossastro. Per evitarlo, alimenta 5V e GND sia dall'ingresso sia dall'uscita del pannello con cavi di sezione almeno 0,75 mm²: si chiama iniezione di alimentazione. Lato software, la funzione setMaxPowerInVoltsAndMilliamps(5, 2000) della libreria FastLED calcola la corrente stimata a ogni fotogramma e, se sta per superare il limite, riduce automaticamente la luminosità. Se usi una batteria, puoi verificare quanto durerà il circuito con il calcolatore della durata della batteria, mentre per la scelta dell'alimentazione consulta l'articolo alimentazione di Arduino.
Animazione su matrice 16x16 con ESP32 (FastLED)
Con la sua RAM abbondante e il processore a 240 MHz, ESP32 è una scelta molto più comoda per i pannelli grandi; inoltre genera il segnale NeoPixel con l'unità hardware RMT e quindi impegna poco il processore. Il codice qui sotto, con FastLED, disegna su un pannello 16x16 due punti colorati che scivolano lasciando una scia. beatsin8() genera una coordinata che oscilla nel tempo in forma sinusoidale, mentre fadeToBlackBy() oscura leggermente tutti i pixel a ogni fotogramma creando l'effetto coda. Ti basta installare dal Gestore librerie l'ultima versione di FastLED; le versioni attuali supportano le versioni 2.x e 3.x del core Arduino per ESP32.
1#include <FastLED.h>
2
3#define DATA_PIN 16 // DIN -> GPIO 16 (330 ohm ile) / DIN -> GPIO 16 (via 330 ohm)
4#define W 16
5#define H 16
6#define NUM_LEDS (W * H)
7
8CRGB leds[NUM_LEDS];
9
10// Zikzak dizilim için koordinat dönüşümü / coordinate mapping for serpentine layout
11uint16_t xyIndex(uint8_t x, uint8_t y) {
12 return (y & 1) ? (y * W + (W - 1 - x)) : (y * W + x);
13}
14
15void setup() {
16 FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
17 FastLED.setBrightness(60); // genel parlaklık / global brightness
18 FastLED.setMaxPowerInVoltsAndMilliamps(5, 2000); // 5 V, en fazla 2 A / 5 V, max 2 A
19 FastLED.clear(true);
20}
21
22void loop() {
23 static uint8_t hue = 0;
24 fadeToBlackBy(leds, NUM_LEDS, 30); // iz efekti / trail effect
25
26 uint8_t px1 = beatsin8(13, 0, W - 1); // sinüs salınımlı koordinatlar / sine-wave coordinates
27 uint8_t py1 = beatsin8(17, 0, H - 1);
28 uint8_t px2 = beatsin8(11, 0, W - 1, 0, 64);
29 uint8_t py2 = beatsin8(7, 0, H - 1, 0, 128);
30
31 leds[xyIndex(px1, py1)] = CHSV(hue, 255, 255);
32 leds[xyIndex(px2, py2)] = CHSV(hue + 128, 255, 255);
33
34 FastLED.show();
35 hue++;
36 delay(16); // yaklaşık 60 kare/sn / about 60 fps
37}Matrice NeoPixel con Raspberry Pi Pico e MicroPython
Nel MicroPython del Pico il modulo neopixel è già incluso, quindi non devi copiare altri file. Il modulo genera da sé la temporizzazione del segnale: tu assegni il colore con np[i] = (r, g, b) e lo invii al pannello con write(). Poiché in MicroPython non esiste una funzione setBrightness come nella libreria Adafruit, la luminosità la limiti tu moltiplicando i valori dei colori per un coefficiente. L'esempio seguente fa accendere e spegnere lentamente un cuore su un pannello 8x8; l'icona è disegnata da un array bitmap in cui ogni riga è un byte e il bit più a sinistra corrisponde alla colonna x = 0.
1from machine import Pin
2from neopixel import NeoPixel
3import time
4
5W, H = 8, 8
6np = NeoPixel(Pin(2), W * H) # DIN -> GP2 (330 ohm ile) / DIN -> GP2 (via 330 ohm)
7BRIGHTNESS = 0.1 # %10 parlaklık / 10% brightness
8
9HEART = [
10 0b01100110,
11 0b11111111,
12 0b11111111,
13 0b11111111,
14 0b01111110,
15 0b00111100,
16 0b00011000,
17 0b00000000,
18]
19
20def xy_index(x, y):
21 # zikzak dizilim / serpentine layout
22 if y % 2:
23 return y * W + (W - 1 - x)
24 return y * W + x
25
26def draw_bitmap(rows, color):
27 r, g, b = color
28 c = (int(r * BRIGHTNESS), int(g * BRIGHTNESS), int(b * BRIGHTNESS))
29 for y in range(H):
30 for x in range(W):
31 on = rows[y] & (0x80 >> x) # soldaki bit x=0 / leftmost bit is x=0
32 np[xy_index(x, y)] = c if on else (0, 0, 0)
33 np.write() # panele gönder / push to the panel
34
35while True:
36 for level in range(0, 256, 8): # kalp yavaşça yanar / heart fades in
37 draw_bitmap(HEART, (level, 0, 0))
38 time.sleep_ms(20)
39 for level in range(255, -1, -8): # ve söner / and fades out
40 draw_bitmap(HEART, (level, 0, 0))
41 time.sleep_ms(20)Idee per progetti con la matrice NeoPixel
- Insegna scorrevole: fai scorrere sul pannello messaggi presi da internet o l'ora con ESP32; per l'orologio puoi usare il metodo dell'articolo orologio NTP con ESP32.
- Giochi Snake e a blocchi: costruisci una mini console colorata con un pannello 16x16 e un joystick.
- Spettro audio: mostra il livello del suono misurato con un microfono in colonne colorate; i dettagli sono nell'articolo LED sensibili alla musica.
- Badge con icone: sul pannello 8x8 alterna con un pulsante icone come faccina sorridente, cuore e freccia.
- Termometro colorato: disegna una barra che si riempie dal blu al rosso in base alla temperatura misurata dal DHT11.
- Controllo da telefono: installa WLED su ESP32 e gestisci il pannello via Wi-Fi con effetti 2D già pronti.
- Decorazione natalizia: aggiungi un pannello con animazioni di neve e stelle al tuo progetto di albero di Natale a LED.
Errori comuni e come risolverli
| Sintomo | Causa probabile | Soluzione |
|---|---|---|
| Nessun LED si accende | I dati sono collegati a DOUT, il GND non è in comune o il numero del pin è sbagliato | Guarda la freccia e porta i dati al DIN, unisci i GND, controlla il pin nel codice |
| Immagine spezzata riga per riga, testo speculare | La disposizione non è a serpentina o l'angolo di partenza è diverso | Trova il primo LED con il codice di prova e correggi xyIndex o i flag di NeoMatrix |
| Colori sbagliati (verde al posto del rosso) | Ordine dei colori definito in modo errato | Usa NEO_GRB con Adafruit e GRB con FastLED |
| Pixel che sfarfallano a caso | Segnale dati a 3,3 V insufficiente, resistenza in serie assente o cavo dati lungo | Aggiungi un convertitore di livello e una resistenza da 330 Ω, accorcia il cavo dati |
| La scheda si resetta nelle scene luminose | Alimentatore insufficiente, la tensione crolla | Riduci la luminosità, usa un alimentatore esterno robusto e un condensatore da 1000 µF |
| Nell'angolo lontano il bianco appare giallastro | Caduta di tensione sulle piste del pannello | Fai l'iniezione di alimentazione da entrambe le estremità del pannello |
| L'Uno si blocca o mostra colori senza senso | RAM esaurita | Riduci il numero di LED, scrivi i testi con F(), passa a ESP32 o Mega |
La matrice NeoPixel è il modo più divertente per dare ai tuoi progetti un display colorato e animato con un pannello dal prezzo accessibile. Parti in piccolo: prima fai funzionare il pannello 8x8 a bassa luminosità, metti a punto la funzione xyIndex, poi passa al testo scorrevole e alle animazioni 16x16. Se devi mostrare solo testo e numeri monocolore, la matrice LED MAX7219 è un'alternativa che consuma meno corrente. Nell'app BlueGrays trovi passo dopo passo, con schemi e codice, il lampeggiante della polizia WS2812B, l'auto fantastica e i progetti di animazione, oltre ai giochi Snake su matrice 8x8 e 16x16.
Domande frequenti
Posso alimentare la matrice NeoPixel dal pin 5V di Arduino?
Un pannello 8x8 a bassa luminosità (per esempio 20–30 su 255) puoi alimentarlo da USB e dal pin 5V per brevi test: in questo caso la corrente resta di poche centinaia di milliampere. Per un pannello 16x16 o per una luminosità alta usa sempre un alimentatore esterno a 5 V e metti il GND in comune con Arduino. Altrimenti la scheda si resetta o la porta USB può danneggiarsi.
Quanti ampere assorbe una matrice WS2812B 16x16?
Poiché ogni LED assorbe circa 60 mA in bianco pieno, un pannello da 256 LED nel caso peggiore supera i 15 A. Nelle animazioni reali il valore è molto più basso; con la luminosità a 32 sono circa 1,9 A anche in bianco pieno. Scegli un alimentatore di almeno 4 A e imposta un limite di corrente software con FastLED.
Perché il testo sulla matrice LED appare invertito o spezzato?
Il codice presuppone una disposizione del pannello sbagliata. Il pannello può essere lineare invece che a serpentina, il primo LED può trovarsi in un altro angolo, oppure i LED possono procedere lungo le colonne invece che lungo le righe. Trova la disposizione con un test che accende i LED in sequenza, poi adatta la funzione xyIndex o i flag di NeoMatrix.
Quanti LED NeoPixel può pilotare un Arduino Uno?
Poiché ogni LED usa 3 byte di RAM, sull'Uno con 2 KB di RAM il limite pratico è di circa 300–500 LED; la memoria restante serve alle variabili del codice. Un singolo pannello 16x16 (256 LED) funziona senza problemi. Per due pannelli o più, Arduino Mega o ESP32 sono più adatti.
Serve un convertitore di livello per una matrice WS2812B con ESP32?
Con alimentazione a 5 V il WS2812B vuole circa 3,5 V sull'ingresso dati, e l'uscita a 3,3 V di ESP32 è un po' sotto questo valore. La maggior parte dei pannelli funziona comunque, ma se vedi sfarfallii o colori casuali usa un convertitore di livello come il 74AHCT125. Anche un cavo dati corto e una resistenza in serie da 330 Ω migliorano il segnale.
Che differenza c'è tra una matrice NeoPixel e una MAX7219?
In una matrice NeoPixel ogni pixel è un LED RGB colorabile singolarmente, pilotato con un solo filo dati, ma il consumo di corrente è elevato. Le matrici MAX7219 sono monocolore, si collegano con tre fili dati e assorbono molta meno corrente. Per insegne scorrevoli monocolore è più adatta la MAX7219, per animazioni colorate e giochi la NeoPixel.
Progetti da realizzare dopo questo articolo
Vedi tutti i progetti
Utilizzo della striscia LED WS2812B
Conosci una striscia LED intelligente in cui puoi colorare ogni singola luce per conto suo. L'Arduino accende prima i primi cinque LED di rosso, un secondo dopo gli altri cinque di blu, poi li spegne

Lampeggiante della polizia con WS2812B
Porti sulla scrivania il lampeggiante rosso e blu del tetto di un'auto della polizia. Una metà di una striscia WS2812B da dieci LED lampeggia tre volte di rosso, velocissima, poi l'altra metà tre volt

Effetto Supercar con WS2812B
Un punto di luce rossa scorre da un capo all'altro di una striscia LED intelligente e poi torna indietro, in un avanti e indietro che non si ferma mai. A ogni passo l'Arduino accende un solo LED, aspe

WS2812B Animazione 1
Su una striscia di 56 LED tutti i colori dell'arcobaleno si mettono in fila uno accanto all'altro e scorrono senza fermarsi mai, come se un fiume di luce scivolasse lungo la striscia. Ogni LED brilla

WS2812B Animazione 2
Allestisci nella tua stanza uno spettacolo di luci che cambia colore da solo. L'Arduino fa scorrere i colori senza sosta su una striscia da 30 LED e ogni pochi secondi passa a una nuova serie: arcobal

Serpente di pixel Matrice 8x8
Costruisci con le tue mani il classico gioco del serpente e giocaci. Su una matrice di luci colorate 8x8 guidi un serpente verde con un joystick e mangi mele rosse; a ogni mela il serpente si allunga,

Matrice Snake 16x16
Il classico gioco del serpente, questa volta su un enorme display LED fatto di 256 luci. Guidi il serpente verde con un joystick e raccogli le mele rosse; a ogni mela il serpente si allunga, il punteg

Controllo della striscia LED NeoPixel WS2812B con ESP32
I LED indirizzabili WS2812B (NeoPixel) sono LED RGB intelligenti che possono essere controllati in cascata tramite un unico pin dati. In questo progetto controlleremo una striscia WS2812B da 8 LED utilizzando la libreria Adafruit_NeoPixel per creare un'animazione fluida dell'arcobaleno. Sebbene il livello logico a 3,3 V dell'ESP32 funzioni senza problemi con la maggior parte dei componenti WS2812B, in caso di instabilità mostreremo la soluzione con una resistenza in serie da 470 Ω e un condensat
Altri articoli
App BlueGrays
Costruisci questo circuito passo passo sul telefono
Schema, codice ed elenco componenti in un’unica schermata. Oltre 200 progetti Arduino, ESP32 e Pico da realizzare.
Inquadra con il telefono
Punta la fotocamera sul codice: si apre lo store del tuo telefono.
oppure apri lo store

