You are here

ESP8266: BlynkでNeoPixel: WS2812 カラーLED

WS2812(NeoPixel)/RCサーボの接続端子

NeoPixel/WS2812は電源も信号も定格が5Vとなっているため、生のESP-WROOM-02では、接続して適切に動かすことはできません。

ESP8266-LEAF-R5にはWS2812(NeoPixel)/RCサーボを直接接続できる端子が搭載されています。
この端子(CN4)は3端子構成で、GND,5V,5V化されたD2(GPIO02)信号出力が接続されています。
ESP8266-LEAF-R5には、3.3V信号を5Vに変換する回路が組み込まれているので、WS2812(NeoPixel)やRCサーボを簡単に接続して利用することができます。

NeoPixel/WS2812カラーLEDを接続したESP8266-LEAF-R5


WS2812(NeoPixel)の表示色を設定するスケッチ

BlynkでNeoPixelを制御する例は、Blynkのサンプルスケッチとして、「スケッチ例」の以下の場所に提供されています。
[Blynk] \rightarrow [More] \rightarrow [NeoPixel]

このスケッチは、Arduino UNO にイーサネットシールドを接続して利用する例の様ですので、ESP8266-LEAF-R5様に書き換えたものを以下に示します。

このプログラムは、Adafruitが提供しているNeoPixelライブラリを使用しています。
また、スケッチに含まれているWheel()関数は、NeoPixelライブラリのスケッチ例に含まれている便利な関数です。

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Adafruit_NeoPixel.h>

// BlynkのAuth Tokenを設定
char auth[] = "YOURAPPAUTHTOKEN" ;

char ssid[] = "YOURSSID" ;
char pass[] = "YOURPASSWORD" ;

// ESP8266-LEAF-R5のWS2812/RCサーボ端子
#define PIN 2

Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800) ;

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  if (WheelPos < 85) {
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0) ;
  } else if (WheelPos < 170) {
    WheelPos -= 85 ;
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3) ;
  } else {
    WheelPos -= 170 ;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3) ;
  }
}

// V0の値はスライダーなどで指定:0-255
BLYNK_WRITE(V0)
{
  int shift = param.asInt();
  for (int i = 0; i < strip.numPixels(); i++) {
    strip.setPixelColor(i, Wheel(shift & 255)) ;
  }
  strip.show() ;
}

void setup()
{
  // Debug console
  Serial.begin(115200) ;

  Blynk.begin(auth, ssid, pass) ;

  strip.begin() ;
  strip.setBrightness(50) ; // 明るさを半分に
  strip.show() ;
}

void loop()
{
  Blynk.run() ;
}

LEDの明るさもスライダー等で変更できるようにした例を以下に示します。

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Adafruit_NeoPixel.h>

#define BLYNK_PRINT Serial

// BlynkのAuth Tokenを設定
char auth[] = "YOURAPPAUTHTOKEN" ;

char ssid[] = "YOURSSID" ;
char pass[] = "YOURPASSWORD" ;

#define PIN 2

Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN, NEO_GRB + NEO_KHZ800) ;

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  if (WheelPos < 85) {
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0) ;
  } else if (WheelPos < 170) {
    WheelPos -= 85 ;
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3) ;
  } else {
    WheelPos -= 170 ;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3) ;
  }
}

int pixelBrightness = 50 ; // LEDの明るさ

// V0の値はスライダーなどで指定:0-255
BLYNK_WRITE(V0)
{
  int shift = param.asInt();
  for (int i = 0; i < strip.numPixels(); i++) {
    strip.setPixelColor(i, Wheel(shift & 255)) ;
  }
  strip.show() ;
}

// V1の値はスライダーなどで指定:10-255
BLYNK_WRITE(V1)
{
  pixelBrightness = param.asInt();

  strip.setBrightness(pixelBrightness) ;
  strip.show() ;
}

void setup()
{
  // Debug console
  Serial.begin(115200) ;

  Blynk.begin(auth, ssid, pass) ;

  strip.begin() ;
  strip.setBrightness(pixelBrightness) ;
  strip.show() ;
}

void loop()
{
  Blynk.run() ;
}

作成したBlynkアプリの画面を示します。
上のスライダーでカラーLEDの色を指定し、下のスライダーで明るさを指定します。

スマートフォンのBlynkアプリ

色指定は、V0に割り当てています。指定する数値の範囲は、0から255です。
スライダーを動かすとスライダーから指を離さなくてもデバイスに反映されるように、SEND ON RELEASEはOFFとします。

色指定のSliderの設定

明るさ指定は、V1に割り当てています。指定する数値の範囲は、10から255です。
明るさを0にすると、各LEDに設置している色情報が失われるようなので、最低を10にしています。
BLYNK_WRITE(V1)の中で、BLYNK_WRITE(V0)の中で行っている色設定も更新するようにすれば、0からにすることもできます。
スライダーを動かすとスライダーから指を離さなくてもデバイスに反映されるように、SEND ON RELEASEはOFFとします。

明るさ指定のSliderの設定


利用したパーツ



開発ソフト: 
チップファミリー: 
MCUチップ: 
技術: