Pada pembahasan kali ini kita akan membahas mengenai cara setting LED RGB Neopixel pada ESP8266. Neopixel yang akan kita gunakan disini adalah WS2812 Ring dengan 12 pixel (digit led), disini kita akan coba melakukan setting dan kontrol menggunakan example program.
Contents
Introduction
LED RGB Neopixle atau yang lebih populer dengan Adafruit Neopixle merupakan sebuah miniatur LEDs yang colorfull, led ini memiliki 3 warna utama yaitu (Red, Green, Blue) yang saling mengkombinasikan satu sama lain sehingga menghasilkan banyak varian warna.
Neopixel memiliki macam-macam jenis yang diantaranya adalah board, stick, strips, dan ring. Di indonesia sendiri yang populer dan banyak digunakan adalah led strips, biasanya led ini digunakan pada kendaraan roda 4 maupun roda 2 sebagai hiasan lampu warna-warni.

Pada tutorial ini kita akan coba melakukan setting dan control pada jenis neopixel ring WS2812 dengan jumlah led 12. Berikut merupakan penampakan dari modul tersebut.

Praktek
Persiapan dan Bahan
Hal yang perlu kita persiapkan pada tutorial ini adalah sebagai berikut :
- NodeMCU/ESP8266
- Adafruit Neopixel RGB WS2812
Installasi Library
Neopixel sendiri membutuhkan library agar nantinya si program dapat terbaca dan memproses pada modul WS2812 tersebut. Library neopixle bisa kita dapatkan langsung dari library manager, kita hanya perlu menginstallnya hingga berhasil seperti dibawah ini.

Rangkaian
Berikut rangkaian yang akan kita gunakan dalam tutorial esp8266 neopixel ws2812 ini, disini kami berikan dua rangkaian dimana yang satu menggunakan nodemcu dan satunya lagi menggunakan ESP-12F


Sketch Program
Sketch program yang kita gunakan disini merupakan program example dari bawaan library neopixel yaitu standardtest. Kalian sebenarnya dapat membukanya langsung dari Arduino IDE, atau kalian dapat gundakan program dibawah ini.
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define LED_PIN 6
// How many NeoPixels are attached to the Arduino?
#define LED_COUNT 60
// Declare our NeoPixel strip object:
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
// Argument 1 = Number of pixels in NeoPixel strip
// Argument 2 = Arduino pin number (most are valid)
// Argument 3 = Pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
void setup() {
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
// END of Trinket-specific code.
strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
strip.show(); // Turn OFF all pixels ASAP
strip.setBrightness(50); // Set BRIGHTNESS to about 1/5 (max = 255)
}
void loop() {
// Fill along the length of the strip in various colors...
colorWipe(strip.Color(255, 0, 0), 50); // Red
colorWipe(strip.Color( 0, 255, 0), 50); // Green
colorWipe(strip.Color( 0, 0, 255), 50); // Blue
// Do a theater marquee effect in various colors...
theaterChase(strip.Color(127, 127, 127), 50); // White, half brightness
theaterChase(strip.Color(127, 0, 0), 50); // Red, half brightness
theaterChase(strip.Color( 0, 0, 127), 50); // Blue, half brightness
rainbow(10); // Flowing rainbow cycle along the whole strip
theaterChaseRainbow(50); // Rainbow-enhanced theaterChase variant
}
void colorWipe(uint32_t color, int wait) {
for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
strip.setPixelColor(i, color); // Set pixel's color (in RAM)
strip.show(); // Update strip to match
delay(wait); // Pause for a moment
}
}
void theaterChase(uint32_t color, int wait) {
for(int a=0; a<10; a++) { // Repeat 10 times...
for(int b=0; b<3; b++) { // 'b' counts from 0 to 2...
strip.clear(); // Set all pixels in RAM to 0 (off)
// 'c' counts up from 'b' to end of strip in steps of 3...
for(int c=b; c<strip.numPixels(); c += 3) {
strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
}
strip.show(); // Update strip with new contents
delay(wait); // Pause for a moment
}
}
}
void rainbow(int wait) {
for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256) {
for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
}
strip.show(); // Update strip with new contents
delay(wait); // Pause for a moment
}
}
void theaterChaseRainbow(int wait) {
int firstPixelHue = 0; // First pixel starts at red (hue 0)
for(int a=0; a<30; a++) { // Repeat 30 times...
for(int b=0; b<3; b++) { // 'b' counts from 0 to 2...
strip.clear(); // Set all pixels in RAM to 0 (off)
for(int c=b; c<strip.numPixels(); c += 3) {
int hue = firstPixelHue + c * 65536L / strip.numPixels();
uint32_t color = strip.gamma32(strip.ColorHSV(hue)); // hue -> RGB
strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
}
strip.show(); // Update strip with new contents
delay(wait); // Pause for a moment
firstPixelHue += 65536 / 90; // One cycle of color wheel over 90 frames
}
}
}
Program tersebut bisa kita gunakan tidak hanya pada Nodemcu/ESP8266 saja, tetapi dapat kita gunakan langsung pada Arduino Series lainnya.
Hasil Percobaan
Setelah kita melakukan compile dan mengupload program pada NodeMCU/ESP8266, selanjutnya kita lihat neopixel yang warnanya ber ubah ubah seperi pada video hasil berikut.
Kesimpulan
Tidak banyak hal dapat kita simpulkan dari pemabahasan ini, namun dapat dipastikan bahwa kita dapat menggunakan neopixel WS2812 tidak hanya dengan Arduino, akan tetapi dengan NodeMCU/ESP8266 juga. Program yang ada pada example dapat kita gunakan untuk percobaan maupun kita modifikasi sesuai dengan kebutuhan yang kita gunakan.
Referensi