ESP32でWS2812(NeoPixel)を使う方法

ESP32でWS2812(NeoPixel)を使う方法

こんにちは!
今回は同時に複数のフルカラーLEDを駆動できるWS2812をESP32で駆動してみましたので、方法を紹介します。

参考

必要な部品

  • ESP32
  • WS2812
  • ジャンパワイヤ
    WS2812は単体のRGBLEDチップの名称で、それが1ボードに複数載ったタイプが販売されています。有名なものは「NeoPixel」という名前がついていて、これが大本の販売ブランドのようです。(互換品もたくさんあります)

WS2812のはんだづけ

今回購入したWS2812にはリード線が付いていなかったので、下記画像のように3本はんだ付けをしました。

必要なのはこの3本のみ。

  • GND: 回路の0V
  • VCC: 回路の5V
  • IN: 信号線


かなり雑ですが、これをピンヘッダにも取り付けてブレッドボード用にしてみました!

回路



今回の例ではGPIO27をWS2812のINに接続しています。
VDDはESP32の5Vピンに、VSS(GND)はGNDに接続しましょう。

ライブラリのインストール


ライブラリマネージャーからNeoPixelのライブラリを探し、インストールします。

サンプルプログラム

以下のプログラムは、ライブラリ付属のサンプルプログラムを今回の回路用に変更したものです。

#include <Adafruit_NeoPixel.h>
#define PIN 27 //INが接続されているピンを指定
#define NUMPIXELS 7 //LEDの数を指定
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); //800kHzでNeoPixelを駆動

void setup() {
  pixels.begin(); //NeoPixelを開始
}

void loop() {
  pixels.clear(); //NeoPixelの出力をリセット
  for(int i=0; i<NUMPIXELS; i++) { //LEDを1つずつ制御
    pixels.setPixelColor(i, pixels.Color(60-8*i, i*10, i*8)); //LEDの色を設定
    pixels.show();   //LEDに色を反映
    delay(500); //500ms待機
  }
}

プログラム解説

NeoPixelの設定

#include <Adafruit_NeoPixel.h>
#define PIN 27 //INが接続されているピンを指定
#define NUMPIXELS 7 //LEDの数を指定
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); //800kHzでNeoPixelを駆動

Adarfuite_NeoPixelでpixelsという名前のインスタンスを作成します。
引数は3つで、pixels(LEDの数,INをつないだピンの番号,設定);とします。設定に関しては公式のGithubリポジトリを参照してください。

基本的な点灯

pixels.begin();
pixels.clear(); //NeoPixelの出力をリセット
pixels.setPixelColor(LEDの番号, pixels.Color(R,G,B)); //LEDの色を設定
pixels.show();   //LEDに色を反映

この4つの関数が基本となります。
pixels.setPixelColor()でセットした色は、pixels.show();をしなければ実際の色に反映されません

まとめ・その他の情報

かなり簡単なインターフェースで複数のLEDを操作できますね!
NeoPixelはライブラリが豊富で、サンプルプログラムにも面白いものが多くあります。チェックして応用してみると面白いですよ(/・ω・)/

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です