LED Strip WS2812B NeoPixel dengan Arduino: Panduan LED RGB Addressable
Apa itu WS2812B NeoPixel dan bagaimana cara menghubungkannya? LED strip, ring, dan matriks RGB addressable, perhitungan daya, kode Adafruit NeoPixel dan FastLED, efek pelangi, serta contoh ESP32 dan Pico.
WS2812B adalah LED RGB yang sudah punya chip driver sendiri di dalamnya. Kalau LED RGB biasa butuh pin terpisah untuk setiap warna, dengan WS2812B kamu mengendalikan ratusan LED lewat satu kabel data dan memberi masing-masing warna serta kecerahannya sendiri. NeoPixel adalah sebutan Adafruit untuk keluarga LED addressable ini. Dijual dalam bentuk strip, ring, stick, dan matriks, LED ini dipakai di proyek yang tak terhitung jumlahnya, dari lampu suasana dan jam LED sampai game dan lampu notifikasi.

Bagaimana cara kerja WS2812B?
Di dalam kemasan 5x5 mm setiap WS2812B ada tiga LED mungil, merah, hijau, dan biru, ditambah chip mini yang mengendalikannya. Arduino mengirim paket warna 24-bit satu demi satu lewat jalur data: 8 bit hijau, 8 bit merah, dan 8 bit biru (urutan GRB). LED pertama menyimpan 24 bit pertama untuk dirinya sendiri dan meneruskan sisanya ke LED berikutnya lewat pin DO; setiap LED melakukan hal yang sama. Ketika jalur data tetap LOW selama minimal 50 mikrodetik (280 di versi yang lebih baru), semua LED menampilkan warnanya pada momen yang sama. Dengan 256 level per warna, satu LED bisa menampilkan 16,7 juta warna yang berbeda.
| Fitur | Nilai |
|---|---|
| Tegangan catu | 5 V (3,5–5,3 V) |
| Arus per LED | Sampai ~60 mA (putih penuh), ~1 mA ketika mati |
| Laju data | 800 kHz, satu kabel |
| Urutan warna | GRB (hijau, merah, biru) |
| Kedalaman warna | 24 bit, 16,7 juta warna |
| Kemasan | 5050 SMD (5x5 mm) |
Strip, ring, dan matriks
| Jenis | Jumlah LED | Pemakaian umum |
|---|---|---|
| Strip | 30, 60, atau 144 per meter | Lampu suasana, lampu belakang TV, lampu rak |
| Ring | 8, 12, 16, 24 | Jam LED, indikator, lampu meja |
| Matriks | 8x8 = 64, 16x16 = 256 | Teks berjalan, animasi, game piksel |
| Stick | 8 | Indikator level, lampu status |

Pengkabelan WS2812B
WS2812B punya tiga sambungan: 5V, GND, dan DIN (data masuk). Panah di strip menunjukkan arah aliran data; selalu hubungkan Arduino ke ujung tempat panah dimulai, yaitu sisi DIN. Menambahkan resistor 330–470 Ω secara seri di jalur data, dan kapasitor 1000 µF di antara 5V dan GND di input daya strip, melindungi LED pertama dari lonjakan tegangan yang mendadak.
| Pin WS2812B | Sambungan |
|---|---|
| 5V | 5V Arduino untuk beberapa LED, adaptor 5 V eksternal untuk lebih banyak |
| GND | GND (dengan adaptor eksternal, ground-nya harus bersama Arduino) |
| DIN | D6 (lewat resistor 330 Ω) |
| DOUT | DIN LED atau strip berikutnya |
Perhitungan daya: berapa ampere yang kamu butuhkan?
Rumus kasus terburuknya sederhana: jumlah LED × 60 mA. Dalam animasi, jarang semua LED menyala putih penuh bersamaan; dalam praktiknya rata-ratanya sekitar 20 mA per LED. Meski begitu, sebaiknya pilih adaptor untuk kasus terburuk atau batasi kecerahan lewat software. Pakai alat hukum Ohm untuk menghitung daya dalam watt, dan alat daya tahan baterai untuk memperkirakan lama pemakaian di proyek bertenaga baterai.
| Jumlah LED | Kasus terburuk (putih penuh) | Catu daya yang disarankan |
|---|---|---|
| 8 | 0,48 A | USB cukup (kecerahan dibatasi) |
| 30 | 1,8 A | Adaptor 5 V 3 A |
| 60 | 3,6 A | Adaptor 5 V 4 A |
| 144 | 8,6 A | Adaptor 5 V 10 A |
Kode pertamamu dengan library Adafruit NeoPixel
Di Library Manager, cari Adafruit NeoPixel lalu instal. Kode di bawah “menyapu” strip dengan warna dengan menyalakan LED satu per satu dalam merah, hijau, dan biru:
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() hanya mengubah warna di memori; untuk benar-benar menyalakan LED, kamu perlu memanggil show(). Dengan begitu kamu bisa mengatur warna setiap LED lalu menampilkan semuanya sekaligus. Karena setBrightness() mengubah skala data warna secara permanen, sebaiknya fungsi ini dipanggil sekali di setup(), bukan diubah terus-menerus di loop(). Setiap LED memakan 3 byte RAM Arduino; RAM 2 KB di Uno cepat penuh dengan ratusan LED.
Efek pelangi: warna HSV
Memakai HSV (hue, saturation, value) alih-alih mengatur warna dengan nilai merah, hijau, dan biru membuat efek jauh lebih mudah: kamu berkeliling seluruh roda warna hanya dengan mengubah hue. Di library Adafruit, hue berkisar dari 0 sampai 65535. gamma32() mengoreksi warna agar sesuai dengan cara mata menangkapnya, sehingga transisinya terlihat lebih alami:
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}Library FastLED
Untuk efek yang lebih canggih, library FastLED juga sangat populer. Library ini menyimpan LED dalam larik CRGB, menawarkan perintah yang mudah dibaca seperti leds[3] = CRGB::Red;, dan memakai rentang hue 0–255. Fungsi siap pakai seperti fill_rainbow() dan fadeToBlackBy() memungkinkanmu menulis efek api, bintang jatuh, atau bernapas dalam beberapa baris. Salah satu fiturnya yang paling praktis adalah FastLED.setMaxPowerInVoltsAndMilliamps(5, 2000);: library otomatis menurunkan kecerahan agar arusnya tetap di bawah 2 A.
Memakai matriks NeoPixel 8x8
Matriks sebenarnya hanyalah strip panjang: 64 LED yang dirangkai berurutan di satu jalur data. Di kebanyakan matriks, barisnya berjalan zig-zag (serpentine): baris genap dari kiri ke kanan, baris ganjil dari kanan ke kiri. Jadi untuk mengubah koordinat x, y menjadi nomor LED, kamu memakai y × 8 + x di baris genap dan y × 8 + (7 − x) di baris ganjil. Karena 64 LED bisa menarik 3,8 A di putih penuh, menjaga kecerahan tetap rendah sangat penting di matriks.

WS2812B dengan ESP32 dan Raspberry Pi Pico
Library Adafruit NeoPixel dan FastLED juga bekerja di ESP32; berkat Wi-Fi, mudah sekali mengendalikan LED dari ponsel atau membuat lampu yang berganti warna mengikuti cuaca. Yang perlu diperhatikan adalah level tegangan: WS2812B yang diberi daya 5 V mengharapkan minimal 3,5 V di input datanya, sedangkan ESP32 dan Pico mengeluarkan 3,3 V. Kebanyakan strip tetap bekerja, tetapi kalau LED pertama berkedip atau muncul warna acak, tambahkan level shifter seperti 74AHCT125 di jalur data. Di Raspberry Pi Pico, MicroPython punya modul neopixel bawaan:
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)Ide proyek WS2812B
- Lampu suasana TV: tempel strip di bagian belakang TV untuk memberi ruangan cahaya yang lembut.
- Jam NeoPixel: tampilkan jam, menit, dan detik dengan warna berbeda di ring 60 LED.
- Pengukur level suara: buat bar LED yang naik mengikuti volume musik dengan modul mikrofon.
- Lampu notifikasi: ganti warna dengan ESP32 berdasarkan cuaca atau e-mail baru dari internet.
- Lampu polisi dan Knight Rider: tulis efek kedip merah-biru atau cahaya yang menyapu bolak-balik.
- Game ular piksel: buat ulang game ular klasik dengan matriks 8x8 dan joystick.
Kesalahan umum dan cara mengatasinya
- Tidak ada LED yang menyala: Arduino terhubung ke ujung strip yang salah, yaitu sisi DOUT; periksa panahnya dan pakai ujung DIN.
- Warnanya tertukar (hijau, bukan merah): urutan warnanya salah; pakai NEO_GRB di kode, walaupun beberapa strip butuh NEO_RGB.
- LED pertama berkedip atau menampilkan warna acak: tidak ada resistor seri, GND tidak dipakai bersama, atau sinyal data 3,3 V tidak cukup.
- Ujung strip terlihat kekuningan: ada penurunan tegangan; alirkan daya ke strip di beberapa titik atau turunkan kecerahannya.
- Arduino reset ketika LED menyala: arus yang ditarik dari USB terlalu besar; pakai adaptor eksternal dan kapasitor 1000 µF.
- Hanya beberapa LED pertama yang menyala: NUM_LEDS di kode lebih kecil dari jumlah LED sebenarnya, atau ada sambungan putus di sepanjang strip.
WS2812B adalah titik awal yang bagus untuk memahami cara warna bercampur; logika warnanya ada di Cara Memakai LED RGB dan pengaturan kecerahan di Apa Itu PWM? Di aplikasi BlueGrays ada dasar-dasar WS2812B, lampu polisi, LED berjalan, pemindai Knight Rider, efek animasi, dan kontrol strip NeoPixel dengan ESP32, lengkap dengan skema rangkaian dan kode.
Pertanyaan umum
Apa perbedaan WS2812B dan NeoPixel?
NeoPixel adalah nama merek Adafruit untuk LED addressable seperti WS2812, WS2812B, dan SK6812. Semuanya memakai protokol data yang sama, jadi dikendalikan dengan cara dan library yang sama.
Berapa banyak WS2812B yang bisa dihubungkan ke satu Arduino?
Dari sisi data tidak ada batas pasti, tetapi ada tiga hal yang membatasimu: RAM (3 byte per LED, jadi dalam praktiknya beberapa ratus LED di Uno), waktu pembaruan (30 mikrodetik per LED; 1000 LED butuh sekitar 30 ms, atau ~33 frame per detik), dan catu daya.
Bisakah WS2812B diberi daya dari pin 5V Arduino?
Hanya beberapa LED dengan kecerahan rendah; misalnya, stick 8 LED bisa jalan lewat USB dengan kecerahan sekitar 50. Untuk lebih banyak LED, pakai adaptor 5 V eksternal dan sambungkan ground-nya bersama.
Apakah resistor dan kapasitornya benar-benar perlu?
Tidak mutlak wajib, tetapi sangat disarankan. Resistor 330–470 Ω di jalur data meredam lonjakan sinyal dan melindungi LED pertama, dan kapasitor 1000 µF di input daya menyerap arus awal yang besar pada momen daya diberikan.
Apakah WS2812B bekerja dengan ESP32 dan board 3,3 V?
Biasanya bisa, tetapi tidak dijamin: WS2812B yang diberi daya 5 V mengharapkan minimal 3,5 V di input datanya. Kalau kamu melihat kedipan atau warna yang salah, naikkan sinyal data ke 5 V dengan level shifter seperti 74AHCT125.
Apa perbedaan WS2812B, WS2811, WS2813, dan SK6812?
WS2811 adalah chip driver terpisah dan biasanya mengendalikan tiga LED sekaligus di strip 12 V. WS2813 punya jalur data cadangan, jadi rangkaiannya tetap bekerja walaupun satu LED rusak. SK6812 adalah alternatif yang kompatibel dan juga tersedia dalam versi RGBW dengan LED putih; untuk itu kamu memakai NEO_GRBW di kode.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
Menggunakan LED Strip WS2812B
Kenalan dengan LED strip pintar yang setiap lampunya bisa kamu warnai sendiri-sendiri. Arduino pertama-tama menyalakan lima LED pertama dengan warna merah, sedetik kemudian lima lainnya biru, lalu mem

Lampu Polisi dengan WS2812B
Kamu membawa lampu merah dan biru dari atap mobil polisi langsung ke mejamu. Separuh dari strip WS2812B sepuluh LED berkedip merah tiga kali dengan cepat, lalu separuh lainnya berkedip biru tiga kali,

LED Berjalan WS2812B
Di strip sepuluh LED, satu titik cahaya hijau bergerak dari awal ke akhir satu LED demi satu, lalu melompat kembali ke awal; titik itu bertahan di setiap LED selama sepertiga detik. Di strip WS2812B,

LED Berjalan WS2812B (Efek Isi)
Strip lampu yang terisi dan kosong seperti segelas air. Arduino menyalakan sepuluh LED warna satu per satu dengan warna oranye dan membiarkannya menyala; begitu strip penuh, ia mematikannya satu per s

Efek Knight Rider WS2812B
Titik cahaya merah meluncur dari satu ujung LED strip pintar ke ujung lainnya, lalu kembali, menyapu bolak-balik tanpa pernah berhenti. Di setiap langkah Arduino hanya menyalakan satu LED, menunggu se

Efek Knight Rider WS2812B (3 LED)
Semua warna pelangi meluncur perlahan di sepanjang strip 56 LED. Setiap LED menyala dengan warna yang sedikit berbeda dari tetangganya dan warnanya terus mengalir ke arah yang sama, menjadikan strip i

Animasi WS2812B 1
Di strip 56 LED, semua warna pelangi berjajar berdampingan dan mengalir tanpa pernah berhenti, seolah sungai cahaya meluncur di sepanjang strip. Setiap LED menyala dengan warna yang sedikit berbeda da

Animasi WS2812B 2
Siapkan pertunjukan cahaya di kamarmu yang berganti warna dengan sendirinya. Arduino terus mengalirkan warna di sepanjang strip 30 LED dan berganti ke set warna baru setiap beberapa detik: pelangi, ga

Kendali Strip NeoPixel WS2812B ESP32
LED addressable WS2812B (NeoPixel) adalah LED RGB pintar yang bisa dikendalikan secara berantai lewat satu pin data. Di proyek ini, kita mengendalikan strip WS2812B 8 LED dengan library Adafruit_NeoPixel untuk membuat animasi pelangi yang halus. Meskipun level logika 3,3V ESP32 bekerja lancar dengan sebagian besar komponen WS2812B, kita menunjukkan solusi dengan resistor seri 470Ω dan kapasitor 1000µF untuk berjaga-jaga jika tidak stabil. Animasinya dibuat dengan menggeser nilai hue.
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi
