ESP8266 Arduino IDE – Setting RGB Neopixel WS2812

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.

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.

Led Strip RGB
Led Strip RGB

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.

Modul Neopixel WS2812
Modul Neopixel WS2812

Praktek

Persiapan dan Bahan

Hal yang perlu kita persiapkan pada tutorial ini adalah sebagai berikut :

  1. NodeMCU/ESP8266
  2. 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.

Library neopixel installed
Library neopixel installed

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

Rangkaian Nodemcu WS2812
Rangkaian Nodemcu WS2812
Rangkaian ESP-12F WS2812
Rangkaian ESP-12F WS2812

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

Tresna Widiyaman Avatar