WS2812B NeoPixel LED Kullanımı: Adreslenebilir RGB LED Rehberi
WS2812B NeoPixel nedir, nasıl bağlanır? Adreslenebilir RGB LED şerit, halka ve matris, güç hesabı, Adafruit NeoPixel ve FastLED kodları, gökkuşağı efekti, ESP32 ve Pico örnekleri.
WS2812B, içinde kendi sürücü çipi bulunan bir RGB LED'dir. Sıradan bir RGB LED her renk için ayrı bir pin isterken, WS2812B ile yüzlerce LED'i tek bir veri kablosuyla kontrol eder, her birine ayrı renk ve parlaklık verirsin. NeoPixel, Adafruit'in bu adreslenebilir LED ailesine verdiği isimdir. Şerit, halka, çubuk ve matris şeklinde satılan bu LED'ler ortam aydınlatmasından LED saatlere, oyunlardan bildirim lambalarına kadar sayısız projede kullanılır.

WS2812B nasıl çalışır?
Her WS2812B'nin 5x5 mm'lik gövdesinde kırmızı, yeşil ve mavi üç küçük LED ile bunları süren minik bir çip vardır. Arduino veri hattından art arda 24 bitlik renk paketleri gönderir: 8 bit yeşil, 8 bit kırmızı, 8 bit mavi (GRB sırası). İlk LED gelen ilk 24 biti kendine alır, kalanını DO pininden sonraki LED'e aktarır; her LED aynı şeyi yapar. Veri hattı en az 50 mikrosaniye (yeni sürümlerde 280) LOW kalınca bütün LED'ler aldıkları rengi aynı anda gösterir. Her renk 256 kademe olduğu için bir LED 16,7 milyon farklı renk gösterebilir.
| Özellik | Değer |
|---|---|
| Besleme gerilimi | 5 V (3,5–5,3 V) |
| LED başına akım | En fazla ~60 mA (tam beyaz), sönükken ~1 mA |
| Veri hızı | 800 kHz, tek kablo |
| Renk sırası | GRB (yeşil, kırmızı, mavi) |
| Renk derinliği | 24 bit, 16,7 milyon renk |
| Kılıf | 5050 SMD (5x5 mm) |
Şerit, halka ve matris çeşitleri
| Tür | LED sayısı | Tipik kullanım |
|---|---|---|
| Şerit | Metrede 30, 60 veya 144 | Ortam aydınlatması, TV arkası, raf ışığı |
| Halka | 8, 12, 16, 24 | LED saat, gösterge, masa lambası |
| Matris | 8x8 = 64, 16x16 = 256 | Kayan yazı, animasyon, piksel oyunlar |
| Çubuk (stick) | 8 | Seviye göstergesi, durum ışığı |

WS2812B bağlantısı
WS2812B'nin üç bağlantısı vardır: 5V, GND ve DIN (veri girişi). Şeridin üzerindeki oklar verinin aktığı yönü gösterir; Arduino'yu her zaman okun başladığı uca, yani DIN tarafına bağla. Veri hattına seri olarak 330–470 Ω bir direnç, şeridin besleme girişine de 5V ile GND arasına 1000 µF bir kondansatör eklemek ilk LED'i ani gerilim sıçramalarından korur.
| WS2812B pini | Bağlantı |
|---|---|
| 5V | Birkaç LED için Arduino 5V, fazlası için harici 5 V adaptör |
| GND | GND (harici adaptörle Arduino'nun GND'si ortak olmalı) |
| DIN | D6 (330 Ω direnç üzerinden) |
| DOUT | Sonraki LED'in ya da şeridin DIN pini |
Güç hesabı: kaç amper gerekir?
En kötü durum için formül basittir: LED sayısı × 60 mA. Animasyonlarda bütün LED'ler nadiren aynı anda tam beyaz yanar; pratikte ortalama LED başına 20 mA civarında akım görülür. Yine de adaptörü en kötü duruma göre seçmek ya da parlaklığı yazılımla sınırlamak gerekir. Watt cinsinden gücü bulmak için Ohm kanunu aracını, pille çalışan projelerde süreyi tahmin etmek için pil ömrü aracını kullanabilirsin.
| LED sayısı | En kötü durum (tam beyaz) | Önerilen besleme |
|---|---|---|
| 8 | 0,48 A | USB yeterli (parlaklık sınırlı) |
| 30 | 1,8 A | 5 V 3 A adaptör |
| 60 | 3,6 A | 5 V 4 A adaptör |
| 144 | 8,6 A | 5 V 10 A adaptör |
Adafruit NeoPixel kütüphanesiyle ilk kod
Kütüphane Yöneticisi'nde Adafruit NeoPixel kütüphanesini ara ve kur. Aşağıdaki kod LED'leri sırayla kırmızı, yeşil ve mavi yakarak şeridi bir renkle "siler":
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}setPixelColor() yalnızca bellekteki rengi değiştirir; LED'lerin gerçekten yanması için show() çağırman gerekir. Böylece bütün LED'lerin rengini ayarlayıp tek seferde gösterebilirsin. setBrightness() renk bilgisini kalıcı olarak ölçeklediği için onu loop() içinde sürekli değiştirmek yerine setup() içinde bir kez çağırmak en doğrusudur. Her LED Arduino'nun RAM'inde 3 bayt yer tutar; Uno'nun 2 KB'lık belleği yüzlerce LED'de hızla dolar.
Gökkuşağı efekti: HSV renkler
Renkleri kırmızı, yeşil ve mavi değerleriyle ayarlamak yerine HSV (ton, doygunluk, parlaklık) kullanmak efektleri çok kolaylaştırır: yalnızca tonu değiştirerek bütün renk çemberinde dolaşırsın. Adafruit kütüphanesinde ton 0–65535 arasıdır. gamma32() renkleri gözün algısına göre düzelterek geçişleri daha doğal gösterir:
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}FastLED kütüphanesi
Daha gelişmiş efektler için FastLED kütüphanesi de çok popülerdir. LED'leri CRGB dizisinde tutar, leds[3] = CRGB::Red; gibi okunaklı komutlar sunar ve ton aralığı 0–255'tir. fill_rainbow(), fadeToBlackBy() gibi hazır fonksiyonları ateş, yıldız kayması ya da nefes alma efektlerini birkaç satırla yazmanı sağlar. En kullanışlı özelliklerinden biri FastLED.setMaxPowerInVoltsAndMilliamps(5, 2000); komutudur: kütüphane parlaklığı otomatik düşürerek akımı 2 A'nın altında tutar.
8x8 NeoPixel matris kullanmak
Matrisler de aslında uzun bir şerittir; 64 LED tek bir veri hattına arka arkaya bağlanmıştır. Çoğu matriste satırlar zikzak (serpentine) dizilir: çift satırlar soldan sağa, tek satırlar sağdan sola gider. Bu yüzden x, y koordinatını LED numarasına çevirmek için çift satırlarda y × 8 + x, tek satırlarda y × 8 + (7 − x) formülünü kullanırsın. 64 LED tam beyazda 3,8 A çekebileceği için matrislerde parlaklığı düşük tutmak özellikle önemlidir.

ESP32 ve Raspberry Pi Pico ile WS2812B
Adafruit NeoPixel ve FastLED kütüphaneleri ESP32'de de çalışır; Wi-Fi sayesinde LED'leri telefondan kontrol etmek ya da hava durumuna göre renk değiştiren bir lamba yapmak çok kolaydır. Dikkat edilmesi gereken nokta gerilim seviyesidir: WS2812B 5 V ile beslendiğinde veri girişinde en az 3,5 V bekler, ESP32 ve Pico ise 3,3 V verir. Çoğu şerit yine de çalışır, ama ilk LED titriyor ya da rastgele renkler çıkıyorsa veri hattına 74AHCT125 gibi bir seviye dönüştürücü ekle. Raspberry Pi Pico'da MicroPython'un hazır neopixel modülü vardır:
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)WS2812B ile proje fikirleri
- TV arkası ortam ışığı: Televizyonun arkasına yapıştırılan şeritle odaya yumuşak bir renk ver.
- NeoPixel saat: 60 LED'li halkada saat, dakika ve saniyeyi farklı renklerle göster.
- Ses seviyesi göstergesi: Bir mikrofon modülüyle müziğin şiddetine göre yükselen bir LED çubuğu yap.
- Bildirim lambası: ESP32 ile internetten gelen hava durumuna ya da e-postaya göre renk değiştir.
- Polis çakarı ve Karaşimşek: Kırmızı-mavi yanıp sönme ya da ileri geri kayan ışık efektleri yaz.
- Piksel yılan oyunu: 8x8 matris ve bir joystick ile klasik yılan oyununu yeniden yap.
Sık yapılan hatalar ve çözümleri
- Hiçbir LED yanmıyor: Arduino şeridin yanlış ucuna, DOUT tarafına bağlanmıştır; oklara bak ve DIN ucunu kullan.
- Renkler karışık (kırmızı yerine yeşil yanıyor): Renk sırası yanlış; kodda NEO_GRB kullan, bazı şeritler için NEO_RGB gerekebilir.
- İlk LED titriyor ya da rastgele renkler çıkıyor: Seri direnç yok, GND ortak değil ya da 3,3 V veri sinyali yetmiyor.
- Şeridin sonu sarımsı görünüyor: Gerilim düşümü var; şeride birkaç noktadan güç ver ya da parlaklığı düşür.
- LED'ler yanınca Arduino resetleniyor: USB'den çok fazla akım çekiliyor; harici adaptör ve 1000 µF kondansatör kullan.
- Yalnızca ilk birkaç LED yanıyor: Koddaki NUM_LEDS değeri gerçek LED sayısından küçük ya da şeridin bir noktasında kopuk bağlantı var.
WS2812B, renklerin nasıl karıştığını anlamak için harika bir başlangıç noktasıdır; renk mantığını RGB LED Kullanımı yazısında, parlaklık kontrolünü PWM Nedir? yazısında bulabilirsin. BlueGrays uygulamasında WS2812B kullanımı, polis çakarı, yürüyen LED, Karaşimşek, animasyon efektleri ve ESP32 ile NeoPixel şerit kontrolü projelerini devre şemaları ve kodlarıyla bulabilirsin.
Sıkça sorulan sorular
WS2812B ile NeoPixel arasındaki fark nedir?
NeoPixel, Adafruit'in WS2812, WS2812B ve SK6812 gibi adreslenebilir LED'ler için kullandığı marka adıdır. Hepsi aynı veri protokolünü kullanır, bu yüzden aynı kütüphanelerle aynı şekilde kontrol edilir.
Bir Arduino'ya kaç tane WS2812B bağlanabilir?
Veri tarafında kesin bir sınır yoktur ama üç şey sınırlar: RAM (her LED 3 bayt, Uno'da pratikte birkaç yüz LED), yenileme süresi (her LED 30 mikrosaniye; 1000 LED yaklaşık 30 ms, yani saniyede ~33 kare) ve güç kaynağı.
WS2812B'yi Arduino'nun 5V pininden besleyebilir miyim?
Yalnızca birkaç LED'i düşük parlaklıkta besleyebilirsin; örneğin 8 LED'lik bir çubuk parlaklık 50 civarındayken USB ile çalışır. Daha fazla LED için harici bir 5 V adaptör kullan ve GND'leri birleştir.
Direnç ve kondansatör şart mı?
Şart değildir ama kesinlikle önerilir. Veri hattındaki 330–470 Ω direnç sinyaldeki sıçramaları yumuşatarak ilk LED'i korur; besleme girişindeki 1000 µF kondansatör de enerji verildiği anda oluşan ani akım darbesini sönümler.
WS2812B, ESP32 ve 3,3 V kartlarla çalışır mı?
Çoğu zaman çalışır ama garanti değildir: 5 V ile beslenen WS2812B veri girişinde en az 3,5 V bekler. Titreme ya da yanlış renk görürsen 74AHCT125 gibi bir seviye dönüştürücüyle veri sinyalini 5 V'a yükselt.
WS2812B, WS2811, WS2813 ve SK6812 arasındaki farklar nelerdir?
WS2811 ayrı bir sürücü çipidir ve genellikle 12 V şeritlerde üç LED'i birlikte sürer. WS2813'te yedek veri hattı vardır, bir LED bozulsa bile zincir devam eder. SK6812 uyumlu bir alternatiftir ve beyaz LED'li RGBW sürümü de vardır; bunun için kodda NEO_GRBW kullanılır.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
WS2812B Kullanımı
WS2812B adreslenebilir LED şeridinde her bir LED'in rengini bağımsız olarak ayarlayarak temel kullanımını gösteren proje. FastLED kütüphanesi ile piksel bazlı renk kontrolünü öğretir.

WS2812B İle Polis Çakar Yapımı
WS2812B LED şeridi ile kırmızı ve mavi renkleri hızlıca yanıp söndürerek polis çakar efekti oluşturan proje. Grup bazlı LED kontrolü ve animasyon zamanlama mantığını öğretir.

WS2812B Yürüyen Led
WS2812B LED şeridinde tek bir LED'i sırayla ileri doğru hareket ettirerek yürüyen ışık efekti oluşturan proje. Piksel bazlı sıralı animasyon mantığını öğretir.

WS2812B Yürüyen Led(Birikerek)
WS2812B LED şeridinde LED'leri sırayla yakarak biriktiren, ardından sırayla söndüren dolum-boşaltma animasyonu projesi. Birikimli LED animasyon mantığını öğretir.

WS2812B Karaşimşek
WS2812B LED şeridinde tek bir LED'i ileri-geri hareket ettirerek Knight Rider tarzı karaşimşek efekti oluşturan proje. Çift yönlü piksel animasyonunu öğretir.

WS2812B Karaşimşek 3'lü
WS2812B LED şeridinde HSV renk uzayını kullanarak sürekli değişen gökkuşağı renk geçişi animasyonu oluşturan proje. CHSV renk modeli ve EVERY_N_MILLISECONDS makrosu kullanımını öğretir.

WS2812B Animasyon 1
WS2812B LED şeridinde HSV renk uzayı ile sürekli kayan gökkuşağı animasyonu oluşturan proje. Hue değerini zamana bağlı değiştirerek akıcı renk geçişi mantığını öğretir.

WS2812B Animasyon 2
WS2812B LED şeridinde FastLED palet sistemi ile gökkuşağı, bulut, parti gibi farklı renk paletlerini zamana bağlı otomatik değiştiren gelişmiş animasyon projesi.

ESP32 WS2812B NeoPixel Şerit Kontrolü
WS2812B (NeoPixel) adreslenebilir LED'ler, tek bir veri pini üzerinden zincirleme kontrol edilebilen akıllı RGB LED'lerdir. Bu projede 8 LED'lik bir WS2812B şeridi Adafruit_NeoPixel kütüphanesi ile kontrol edip akıcı bir gökkuşağı animasyonu üreteceğiz. ESP32'nin 3.3V mantık seviyesi çoğu WS2812B partisinde sorunsuz çalışsa da, kararsızlık durumunda 470Ω seri direnç ve 1000µF kondansatör çözümünü göstereceğiz. Animasyon, HSV renk uzayında ton (hue) değerini kaydırarak elde edilir.
Diğer yazılar
Yüzlerce RGB LED'i tek bir veri kablosuyla nasıl kontrol edeceğini, WS2812B şeridi doğru bağlamayı, güç ihtiyacını hesaplamayı ve gökkuşağı efektleri yazmayı adım adım öğren.
