You are here

ESP32: NeoPixel: WS2812 カラーLEDの利用

NeoPixel:WS2812はシリアル信号で発光色を指定できるカラーLEDで、数珠つなぎにして複数のカラーLEDを1信号端子で制御できます。
NeoPixel:WS2812の電源および信号電圧は5Vとなっています。
ESP32-DEVC-HOMEとESP32-DEVC-KEYには、信号を3.3Vから5Vに変換した端子が装備されているので、簡単に接続して利用することができます。

https://github.com/adafruit/Adafruit_NeoPixel

https://github.com/MartyMacGyver/ESP32-Digital-RGB-LED-Drivers

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

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

ESP32-DEVC-HOMEとESP32-DEVC-KEYにはWS2812(NeoPixel)/RCサーボを直接接続できる端子が搭載されています。
http://www.microfan.jp/esp32/esp32-devc-home
http://www.microfan.jp/esp32/esp32-devc-key
この端子(CN2)は3端子構成で、GND,5V,5V化されたD27(GPIO27)信号出力が接続されています。
ESP32-DEVC-HOMEとESP32-DEVC-KEYには、3.3V信号を5Vに変換する回路が組み込まれているので、WS2812(NeoPixel)やRCサーボを簡単に接続して利用することができます。

カラーLEDを接続したESP32-DEVC-HOME


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

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

#include <Adafruit_NeoPixel.h>

#define SW1 0
#define SW2 32
#define SW3 33
#define SW4 34
#define SW5 35

// ESP32-DEVC-HOMEのWS2812/RCサーボ端子
#define PIN 27

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

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

void setup()
{
  pinMode(SW1, INPUT) ;
  pinMode(SW2, INPUT) ;
  pinMode(SW3, INPUT) ;
  pinMode(SW4, INPUT) ;

  strip.begin() ;
  strip.setBrightness(50) ; // 明るさを半分に
}
 
// 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) ;
  }
}

void loop()
{
  if (!digitalRead(SW1))
    color -= 10 ;
  if (!digitalRead(SW2))
    color += 10 ;
  if (!digitalRead(SW3))
    pixelBrightness -= 10 ;
  if (!digitalRead(SW4))
    pixelBrightness += 10 ;

  if (color >= 250)
    color = 250 ;
  if (color < 0)
    color = 0 ;
  if (pixelBrightness >= 250)
    pixelBrightness = 250 ;
  if (pixelBrightness < 0)
    pixelBrightness = 0 ;
    
  for (int i = 0; i < strip.numPixels(); i++) {
    strip.setPixelColor(i, Wheel(color)) ;
  }
  strip.setBrightness(pixelBrightness) ;
  strip.show() ;

  delay(100) ;
}

利用したパーツ



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