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
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
BlynkでNeoPixelを制御する例は、Blynkのサンプルスケッチとして、「スケッチ例」の以下の場所に提供されています。
[Blynk] \rightarrow [More] \rightarrow [NeoPixel]
このスケッチは、Arduino UNO にイーサネットシールドを接続して利用する例の様ですので、ESP32-DEVC-HOMEとESP32-DEVC-KEY用に書き換えたものを以下に示します。
このプログラムは、Adafruitが提供しているNeoPixelライブラリを使用しています。
また、スケッチに含まれているWheel()関数は、NeoPixelライブラリのスケッチ例に含まれている便利な関数です。
#define BLYNK_PRINT Serial #include <WiFi.h> #include <WiFiClient.h> #include <BlynkSimpleEsp32.h> #include <Adafruit_NeoPixel.h> // BlynkのAuth Tokenを設定 char auth[] = "YOURAPPAUTHTOKEN" ; char ssid[] = "YOURSSID" ; char pass[] = "YOURPASSWORD" ; // ESP32-DEVC-HOMEのWS2812/RCサーボ端子 #define PIN 27 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 + (i % 2) * 128) & 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 <WiFi.h> #include <WiFiClient.h> #include <BlynkSimpleEsp32.h> #include <Adafruit_NeoPixel.h> #define BLYNK_PRINT Serial // BlynkのAuth Tokenを設定 char auth[] = "YOURAPPAUTHTOKEN" ; char ssid[] = "YOURSSID" ; char pass[] = "YOURPASSWORD" ; #define PIN 27 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の設定