Fita de LED WS2812B NeoPixel com Arduino: guia de LEDs RGB endereçáveis
O que é o WS2812B NeoPixel e como ligá-lo? Fitas, anéis e matrizes de LEDs RGB endereçáveis, cálculo de alimentação, código com Adafruit NeoPixel e FastLED, efeitos de arco-íris e exemplos com ESP32 e Pico.
O WS2812B é um LED RGB com o próprio chip driver embutido. Enquanto um LED RGB comum precisa de um pino separado para cada cor, com o WS2812B você controla centenas de LEDs por um único fio de dados e dá a cada um a própria cor e o próprio brilho. NeoPixel é o nome que a Adafruit dá a essa família de LEDs endereçáveis. Vendidos como fitas, anéis, barras e matrizes, eles aparecem em incontáveis projetos, de iluminação ambiente e relógios de LED a jogos e lâmpadas de notificação.

Como funciona o WS2812B?
Dentro do encapsulamento de 5x5 mm de cada WS2812B há três LEDs minúsculos, vermelho, verde e azul, mais um chip em miniatura que os aciona. O Arduino envia pela linha de dados pacotes de cor de 24 bits, um atrás do outro: 8 bits de verde, 8 de vermelho e 8 de azul (ordem GRB). O primeiro LED fica com os primeiros 24 bits e repassa o resto ao próximo LED pelo pino DO; todos os LEDs fazem o mesmo. Quando a linha de dados fica em LOW por pelo menos 50 microssegundos (280 nas versões mais novas), todos os LEDs mostram a sua cor no mesmo instante. Com 256 níveis por cor, um único LED consegue mostrar 16,7 milhões de cores diferentes.
| Característica | Valor |
|---|---|
| Tensão de alimentação | 5 V (3,5–5,3 V) |
| Corrente por LED | Até ~60 mA (branco total), ~1 mA apagado |
| Taxa de dados | 800 kHz, fio único |
| Ordem das cores | GRB (verde, vermelho, azul) |
| Profundidade de cor | 24 bits, 16,7 milhões de cores |
| Encapsulamento | SMD 5050 (5x5 mm) |
Fitas, anéis e matrizes
| Tipo | Número de LEDs | Uso típico |
|---|---|---|
| Fita | 30, 60 ou 144 por metro | Iluminação ambiente, luz de fundo da TV, iluminação de prateleiras |
| Anel | 8, 12, 16, 24 | Relógio de LED, indicador, luminária de mesa |
| Matriz | 8x8 = 64, 16x16 = 256 | Texto rolante, animações, jogos de pixel |
| Barra | 8 | Indicador de nível, luz de status |

Ligando o WS2812B
O WS2812B tem três conexões: 5V, GND e DIN (entrada de dados). As setas na fita mostram a direção em que os dados fluem; ligue sempre o Arduino na ponta onde as setas começam, o lado DIN. Colocar um resistor de 330–470 Ω em série na linha de dados e um capacitor de 1000 µF entre 5V e GND na entrada de alimentação da fita protege o primeiro LED de picos repentinos de tensão.
| Pino do WS2812B | Ligação |
|---|---|
| 5V | 5V do Arduino para poucos LEDs, uma fonte externa de 5 V para mais |
| GND | GND (com fonte externa, precisa compartilhar o terra com o Arduino) |
| DIN | D6 (por um resistor de 330 Ω) |
| DOUT | DIN do próximo LED ou da próxima fita |
Cálculo de alimentação: de quantos amperes você precisa?
A fórmula do pior caso é simples: número de LEDs × 60 mA. Em animações, raramente todos os LEDs ficam em branco total ao mesmo tempo; na prática, você vai ver uma média de uns 20 mA por LED. Mesmo assim, escolha a fonte pelo pior caso ou limite o brilho no software. Use a ferramenta da lei de Ohm para calcular a potência em watts e a ferramenta de duração da bateria para estimar a autonomia em projetos com bateria.
| Número de LEDs | Pior caso (branco total) | Alimentação recomendada |
|---|---|---|
| 8 | 0,48 A | A USB basta (com brilho limitado) |
| 30 | 1,8 A | Fonte de 5 V 3 A |
| 60 | 3,6 A | Fonte de 5 V 4 A |
| 144 | 8,6 A | Fonte de 5 V 10 A |
Seu primeiro código com a biblioteca Adafruit NeoPixel
No Gerenciador de Bibliotecas, busque Adafruit NeoPixel e instale. O código abaixo “pinta” a fita com uma cor, acendendo os LEDs um por um em vermelho, verde e azul:
1#include <Adafruit_NeoPixel.h>
2
3#define PIN 6 // DIN pini / data pin
4#define NUM_LEDS 8 // LED sayısı / number of LEDs
5
6Adafruit_NeoPixel strip(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
7
8void setup() {
9 strip.begin();
10 strip.setBrightness(50); // 0–255, yalnız bir kez / only once
11 strip.show(); // hepsini söndür / all off
12}
13
14void colorWipe(uint32_t color, int wait) {
15 for (int i = 0; i < NUM_LEDS; i++) {
16 strip.setPixelColor(i, color);
17 strip.show(); // değişikliği gönder / send the change
18 delay(wait);
19 }
20}
21
22void loop() {
23 colorWipe(strip.Color(255, 0, 0), 80); // kırmızı / red
24 colorWipe(strip.Color(0, 255, 0), 80); // yeşil / green
25 colorWipe(strip.Color(0, 0, 255), 80); // mavi / blue
26}O setPixelColor() só muda a cor na memória; para acender os LEDs de verdade, você precisa chamar o show(). Assim você define a cor de cada LED e mostra todos de uma vez. Como o setBrightness() altera os dados de cor de forma permanente, o melhor é chamá-lo uma vez no setup() em vez de mudá-lo o tempo todo no loop(). Cada LED ocupa 3 bytes da RAM do Arduino; os 2 KB do Uno se enchem rapidinho com centenas de LEDs.
Efeito arco-íris: cores HSV
Usar HSV (matiz, saturação, valor) em vez de definir as cores com valores de vermelho, verde e azul facilita muito os efeitos: você percorre todo o círculo de cores só mudando a matiz. Na biblioteca da Adafruit, a matiz vai de 0 a 65535. O gamma32() corrige as cores de acordo com a forma como o olho as percebe, então as transições ficam mais naturais:
1#include <Adafruit_NeoPixel.h>
2
3#define PIN 6
4#define NUM_LEDS 24
5
6Adafruit_NeoPixel strip(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
7
8void setup() {
9 strip.begin();
10 strip.setBrightness(40);
11}
12
13void loop() {
14 for (long first = 0; first < 65536; first += 256) {
15 for (int i = 0; i < NUM_LEDS; i++) {
16 uint16_t hue = first + i * 65536L / NUM_LEDS; // her LED'e farklı ton / a different hue per LED
17 strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(hue)));
18 }
19 strip.show();
20 delay(10);
21 }
22}A biblioteca FastLED
Para efeitos mais avançados, a biblioteca FastLED também é muito popular. Ela guarda os LEDs em um array CRGB, oferece comandos legíveis como leds[3] = CRGB::Red; e usa uma faixa de matiz de 0–255. Funções prontas como fill_rainbow() e fadeToBlackBy() permitem escrever efeitos de fogo, estrela cadente ou respiração em poucas linhas. Um dos recursos mais práticos é o FastLED.setMaxPowerInVoltsAndMilliamps(5, 2000);: a biblioteca baixa o brilho automaticamente para manter a corrente abaixo de 2 A.
Usando uma matriz NeoPixel 8x8
Uma matriz é, na verdade, só uma fita longa: 64 LEDs encadeados um depois do outro em uma única linha de dados. Na maioria das matrizes as linhas seguem em zigue-zague (serpentina): as linhas pares vão da esquerda para a direita e as ímpares, da direita para a esquerda. Então, para transformar uma coordenada x, y em um número de LED, você usa y × 8 + x nas linhas pares e y × 8 + (7 − x) nas ímpares. Como 64 LEDs podem puxar 3,8 A no branco total, manter o brilho baixo é especialmente importante nas matrizes.

WS2812B com ESP32 e Raspberry Pi Pico
As bibliotecas Adafruit NeoPixel e FastLED também funcionam no ESP32; graças ao Wi-Fi, fica fácil controlar os LEDs pelo celular ou montar uma luminária que muda de cor conforme o tempo lá fora. O ponto de atenção é o nível de tensão: um WS2812B alimentado com 5 V espera pelo menos 3,5 V na entrada de dados, enquanto o ESP32 e o Pico entregam 3,3 V. A maioria das fitas funciona mesmo assim, mas, se o primeiro LED piscar ou aparecerem cores aleatórias, coloque um conversor de nível como o 74AHCT125 na linha de dados. No Raspberry Pi Pico, o MicroPython tem um módulo neopixel embutido:
1from machine import Pin
2import neopixel
3import time
4
5NUM = 8
6np = neopixel.NeoPixel(Pin(0), NUM) # GP0 → DIN
7
8def wheel(pos): # 0–255 → renk çemberi / colour wheel
9 if pos < 85:
10 return (255 - pos * 3, pos * 3, 0)
11 if pos < 170:
12 pos -= 85
13 return (0, 255 - pos * 3, pos * 3)
14 pos -= 170
15 return (pos * 3, 0, 255 - pos * 3)
16
17j = 0
18while True:
19 for i in range(NUM):
20 r, g, b = wheel((i * 256 // NUM + j) & 255)
21 np[i] = (r // 5, g // 5, b // 5) # parlaklığı düşür / dim it
22 np.write()
23 j = (j + 2) & 255
24 time.sleep_ms(20)Ideias de projetos com WS2812B
- Luz ambiente para a TV: cole uma fita atrás da TV para dar ao cômodo um brilho suave.
- Relógio NeoPixel: mostre horas, minutos e segundos em cores diferentes em um anel de 60 LEDs.
- Medidor de nível sonoro: monte uma barra de LEDs que sobe com o volume da música usando um módulo de microfone.
- Lâmpada de notificação: mude de cor com o ESP32 de acordo com a previsão do tempo ou com um e-mail novo vindo da internet.
- Luzes de polícia e Knight Rider: escreva efeitos de luz vermelho-azul piscando ou de varredura de um lado para o outro.
- Jogo da cobrinha em pixels: recrie o clássico jogo da cobrinha com uma matriz 8x8 e um joystick.
Erros comuns e como corrigir
- Nenhum LED acende: o Arduino está ligado na ponta errada da fita, o lado DOUT; confira as setas e use a ponta DIN.
- As cores estão trocadas (verde em vez de vermelho): a ordem das cores está errada; use NEO_GRB no código, embora algumas fitas precisem de NEO_RGB.
- O primeiro LED pisca ou mostra cores aleatórias: falta o resistor em série, o GND não está compartilhado ou o sinal de dados de 3,3 V não é suficiente.
- O fim da fita fica amarelado: há queda de tensão; leve a alimentação até a fita em vários pontos ou baixe o brilho.
- O Arduino reinicia quando os LEDs acendem: está sendo puxada corrente demais da USB; use uma fonte externa e um capacitor de 1000 µF.
- Só os primeiros LEDs acendem: o NUM_LEDS no código é menor que o número real de LEDs, ou há uma conexão partida em algum ponto da fita.
O WS2812B é um ótimo ponto de partida para entender como as cores se misturam; a lógica das cores está em Como usar um LED RGB, e o controle de brilho, em O que é PWM? No app BlueGrays você encontra o básico do WS2812B, luzes de polícia, LEDs sequenciais, um scanner Knight Rider, efeitos de animação e controle de fita NeoPixel com ESP32, com esquemas do circuito e código.
Perguntas frequentes
Qual é a diferença entre o WS2812B e o NeoPixel?
NeoPixel é a marca da Adafruit para LEDs endereçáveis como o WS2812, o WS2812B e o SK6812. Todos usam o mesmo protocolo de dados, então são controlados do mesmo jeito, com as mesmas bibliotecas.
Quantos WS2812B posso ligar em um Arduino?
Não há um limite rígido do lado dos dados, mas três coisas limitam você: a RAM (3 bytes por LED, então algumas centenas de LEDs na prática em um Uno), o tempo de atualização (30 microssegundos por LED; 1000 LEDs levam cerca de 30 ms, ou ~33 quadros por segundo) e a alimentação.
Posso alimentar um WS2812B pelo pino 5V do Arduino?
Só poucos LEDs com brilho baixo; por exemplo, uma barra de 8 LEDs funciona pela USB com brilho em torno de 50. Para mais LEDs, use uma fonte externa de 5 V e ligue os terras juntos.
O resistor e o capacitor são mesmo necessários?
Não são obrigatórios, mas são muito recomendados. O resistor de 330–470 Ω na linha de dados suaviza os picos do sinal e protege o primeiro LED, e o capacitor de 1000 µF na entrada de alimentação absorve a corrente de partida no momento em que a energia é ligada.
O WS2812B funciona com o ESP32 e placas de 3,3 V?
Geralmente sim, mas não é garantido: um WS2812B alimentado com 5 V espera pelo menos 3,5 V na entrada de dados. Se você notar piscadas ou cores erradas, eleve o sinal de dados para 5 V com um conversor de nível como o 74AHCT125.
Quais são as diferenças entre WS2812B, WS2811, WS2813 e SK6812?
O WS2811 é um chip driver separado e costuma acionar três LEDs juntos em fitas de 12 V. O WS2813 tem uma linha de dados reserva, então a cadeia de LEDs continua funcionando mesmo se um LED queimar. O SK6812 é uma alternativa compatível que também existe em versão RGBW, com um LED branco; para ela você usa NEO_GRBW no código.
Projetos para montar depois desta leitura
Ver todos os projetos
Uso da fita LED WS2812B
Conheça uma fita LED inteligente em que você pode definir a cor de cada luz individualmente. O Arduino primeiro acende os cinco primeiros LEDs em vermelho, um segundo depois acende os outros cinco em

Luzes de polícia com WS2812B
Traga as luzes vermelhas e azuis do teto de uma viatura para a sua mesa. Metade de uma fita WS2812B de dez LEDs pisca em vermelho três vezes seguidas rapidamente, depois a outra metade pisca em azul t

LED sequencial com WS2812B
Em uma fita de dez LEDs, um ponto de luz verde avança do início ao fim, um LED por vez, e depois volta ao começo; ele permanece em cada LED por um terço de segundo. Na fita WS2812B, você controla cada

LED sequencial com WS2812B (efeito de preenchimento)
Uma fita de luz que enche e esvazia como um copo de água. O Arduino acende dez LEDs coloridos em laranja, um por vez, e os mantém acesos; quando a fita está cheia, apaga um por vez na mesma ordem, e o

Efeito Super Máquina com WS2812B
Um ponto de luz vermelho desliza de uma ponta à outra de uma fita LED inteligente e volta, indo e vindo sem parar. A cada passo, o Arduino acende apenas um LED, espera um décimo de segundo e passa ao

Efeito Super Máquina triplo com WS2812B
Todas as cores do arco-íris deslizam lentamente por uma fita de 56 LEDs. Cada LED brilha em uma cor um pouco diferente da do vizinho, e as cores continuam fluindo na mesma direção, transformando a fit

Animação 1 com WS2812B
Em uma fita de 56 LEDs, todas as cores do arco-íris ficam lado a lado e fluem sem parar, como se um rio de luz deslizasse pela fita. Cada LED brilha em uma cor um pouco diferente da do anterior, e o m

Animação 2 com WS2812B
Monte no seu quarto um espetáculo de luzes que muda de cor sozinho. O Arduino mantém as cores em movimento em uma fita de 30 LEDs e troca o conjunto de cores a cada poucos segundos: arco-íris, faixas

Controle de fita WS2812B NeoPixel com ESP32
Os LEDs endereçáveis WS2812B (NeoPixel) são LEDs RGB inteligentes que podem ser controlados em cadeia por um único pino de dados. Neste projeto, vamos controlar uma fita WS2812B de 8 LEDs com a biblioteca Adafruit_NeoPixel para criar uma animação suave de arco-íris. Embora o nível lógico de 3,3V do ESP32 funcione sem problemas na maioria dos lotes de WS2812B, vamos mostrar uma solução com um resistor de 470Ω em série e um capacitor de 1.000µF para casos de instabilidade.
Mais artigos
App BlueGrays
Monte este circuito passo a passo pelo celular
Esquema do circuito, código e lista de componentes em uma só tela. Mais de 200 projetos com Arduino, ESP32 e Pico prontos para montar.
Escaneie com seu celular
Aponte a câmera para o código para abrir a loja de aplicativos do seu celular.
ou abrir a loja
