前回はRDB LEDをHSVカラーモデルに従って柔らかく変化させました。
今回はWS2812というマイコン搭載のLEDモジュールを使用してみましょう。今回はfreeenove社のライブラリを使用してLEDモジュールを制御するため、プログラム自体はあまり汎用性がありません。そのため、プログラミングを学ぶというよりはライブラリの追加手順を確認するという位置づけだと思って読み進めて下さい。
Freenove 8 RGB LED モジュールについて
このモジュールは、8個のWS2812チップで構成されています。それぞれのチップは1本のピンのみで制御可能で、カスケード接続(数珠繋ぎに接続すること)をサポートしています。各WS2812チップには、赤・緑・青のLEDが内蔵されており、それぞれが256段階の輝度調整に対応しています。これは各WS2812チップが 2^24 = 16,777,216 色を表現できることを意味します。たった1本のデータピンで、モジュール上の8個のLEDを制御することができます。下記の図をご参照ください。
上記のモジュールは、複数のモジュールを同時に制御することができます。接続方法は簡単です。1つのモジュールのOUTピンを別のモジュールのINピンに接続するだけです。この方法により、1つのデータピンで8個、16個、32個…と、LEDの数を増やすことができます。
Sがシグナル、Vが電源(+)、GがGND(-)です。
回路図
接続図
ライブラリについて
このコードは”Freenove_WS2812_Lib_for_ESP32″というライブラリを使用しています。プロジェクトを順番に進めてきた場合、このライブラリをまだインストールしていない状態ですので、先にインストールが必要です。
ライブラリは、オープンソースの世界における重要な機能です。Arduinoは、誰もが貢献できるオープンソースプラットフォームである、ということ理解しておきましょう。ライブラリは一般的にLGPLライセンスのもと提供されており、これは自身の創作物への利用において、ライブラリを無料で使えることを意味します。ありがたいですね。
ライブラリのインストール方法
Arduino IDEを起動し、[スケッチ] -> [ライブラリをインクルード] -> [ライブラリを管理]をクリックします。
検索画面を使用して、Freenove WS2812 Lib for ESP32を探して下さい。そして、インストールをクリックします。
コード
/**********************************************************************
Filename : NeoPixel
Description : Basic usage of LEDPixel,
Make the strip light up in different colors gradually.
Auther : www.freenove.com
Modification: 2022/10/20
**********************************************************************/
#include "Freenove_WS2812_Lib_for_ESP32.h"
#define LEDS_COUNT 8 // The number of led
#define LEDS_PIN 48 // define the pin connected to the Freenove 8 led strip
#define CHANNEL 0 // RMT module channel
Freenove_ESP32_WS2812 strip = Freenove_ESP32_WS2812(LEDS_COUNT, LEDS_PIN, CHANNEL, TYPE_GRB);
int m_color[5][3] = { {255, 0, 0}, {0, 255, 0}, {0, 0, 255}, {255, 255, 255}, {0, 0, 0} };
int delayval = 100;
void setup() {
strip.begin();
strip.setBrightness(10);
}
void loop() {
for (int j = 0; j < 5; j++) {
for (int i = 0; i < LEDS_COUNT; i++) {
strip.setLedColorData(i, m_color[j][0], m_color[j][1], m_color[j][2]);// Set color data.
strip.show(); // Send color data to LED, and display.
delay(delayval);// Interval time of each LED.
}
delay(500); // Interval time of each group of colors.
}
}
動作させるとこうなります
ちょっとだけコード解説
14行目ではライブラリで用意されているクラス(コードの塊みたいなもの)を使いますよ、という宣言をしています。そしてクラスの名前はstripという名前にしています。
以降のコードでstrip.xxとやっているのが、stripクラスの中にある命令を実行している、という感じです。
以前にもお伝えしたように、ライブラリの使い方を覚える必要はありません。ライブラリの提供元が使い方を公開していることがほとんどです。なので、指定された通りに使うだけです。
ライブラリを使用すると非常に簡単にプログラムを構成することができます。しかしその反面、実際には何を行っているのかが分かりにくくなります。
もっとも、ライブラリのコードを読解していけば、何をやっているかを知ることができます。子どもプログラミング教室で使用するコードはほとんどライブラリを使用していますので、ハードウェアの細かな制御は隠蔽されています。その分、制御に集中できるようになっています。メリット・デメリットを理解しながら、適材適所で使用すると良いでしょう。
以上、ライブラリの導入方法でした。
コメント