Project 6.1 ライブラリとWS2812/LEDPixel

前回はRDB LEDをHSVカラーモデルに従って柔らかく変化させました。

あわせて読みたい
Project 5.2 ビットシフト/Gradient Color Light 前回はRGB LEDを使用して、ランダムな色を次々に発光させてみました。 https://kaneshige.org/?p=264 今回は柔らかく色が変化するように制御してみましょう。 回路は前...

今回は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クラスの中にある命令を実行している、という感じです。

以前にもお伝えしたように、ライブラリの使い方を覚える必要はありません。ライブラリの提供元が使い方を公開していることがほとんどです。なので、指定された通りに使うだけです。

ライブラリを使用すると非常に簡単にプログラムを構成することができます。しかしその反面、実際には何を行っているのかが分かりにくくなります。
もっとも、ライブラリのコードを読解していけば、何をやっているかを知ることができます。子どもプログラミング教室で使用するコードはほとんどライブラリを使用していますので、ハードウェアの細かな制御は隠蔽されています。その分、制御に集中できるようになっています。メリット・デメリットを理解しながら、適材適所で使用すると良いでしょう。

以上、ライブラリの導入方法でした。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

金重総合研究所の主席研究員。
子供の頃から研究者を目指し、ライフワークとして日々様々な研究をしています。
経営・マネジメント・金融・DXあたりが本職です。
私を採用したい人、私と一緒に働きたい人、一緒に知識を肥やしていきたい人はぜひお声がけ下さい。

コメント

コメントする

目次