目次
フルカラーRGB LED WS2812
本稿で使用するフルカラーRGB LEDは、シリアルデータ制御によるフルカラー表示ができます。
開発ボードや開発キットに標準搭載されつつある
このような RGB LED WS2812 やそのデータ互換 LED は、様々な開発ボードや開発キットに標準搭載されています。一例として、ESP32-C3用、 ESP32-S3用、ESP32-C6用などの Espressif 純正開発キットや、M5 Atom、M5 Stampなどです。
下図は、M5Stack Technology 社が販売する M5 RGB LED Unitです。WS2812 と互換性のある RGB LED SK6812 を搭載しています。
本LEDの動かし方については、3年以上前に当ブログで紹介しました。詳細については、下記の記事をご覧ください。
動作しない・再起動を繰り返す現象
ESP32用の WS2812 ドライバが原因で起動しなくなることがあります。実際には、起動直後に再起動してしまい、再起動を繰り返す現象です。ESP32のシリアルには下記のようなメッセージが出力されます。
E (nn) rmt(legacy): CONFLICT! driver_ng is not allowed to be used with the legacy driver
メッセージのRMTは、赤外線リモコン信号を出力するためのデバイスドライバーです。ESP32で使用している開発環境 ESP-IDF のバージョン5以上(Arduino 用 esp32 v3.0.3以上)で古いRMT(Legacy)ドライバがサポートされなくなりました。
FastLED のGitHub内のissue:
https://github.com/FastLED/FastLED/issues/1656
対策方法1(初心者向け)
最も簡単な対策方法は、使用しているプログラムが作成された時点の環境に戻すことです。
Arduino IDEの[ツール]メニューから、[ボード]→[ボードマネージャ]を選択し、「esp32」を検索後、古いesp32のバージョンを選択してください。
対策方法2(購読者様向け)
当方が執筆した書籍やブログに掲載しているプログラムを使用されている方は、GitHub上の最新版をダウンロードしてください。下記は一例です。
ESP32用/M5Stack用サンプルプログラム集:
https://git.bokunimo.com/m5
M5 Atom S3 用サンプルプログラム集:
https://git.bokunimo.com/m5/atom_s3/
ESP32C3用サンプルプログラム集:https://git.bokunimo.com/esp32c3
対策方法3(一般向け)
古いRMTドライバを使用している場合は、プログラム上や組み込んだライブラリ内に下記の行があります。
#include "driver/rmt.h"
上記を含むライブラリを置き換えるのが簡単です。FastLED であれば、前述のURLからダウンロードしてください。
もしくは、ソースコードを変更し、最新のRMTドライバに対応させます。下記に Espressif 社が公開しているサンプルプログラムがあるので、参考になるでしょう。
Espressif社の最新RMT利用RGB LED制御プログラム:
https://docs.espressif.com/projects/arduino-esp32/en/latest/api/rmt.html
上記を参考にして筆者が作成したプログラムは、下記などに保存してあります。
筆者作成の最新RMT利用RGB LED制御プログラム:
https://github.com/bokunimowakaru/m5/blob/master/atom/ex01_led/lib_led.ino
最大30個のLEDを連結したテープLED用サンプル・プログラム
下図は、最大30個のテープLEDに対応したサンプル・プログラムの動作例です。
筆者が作成したESP32シリーズ用のプログラムは、下記からダウンロードできます。#define PIN_LED_RGBにLEDを接続するGPIOポート番号を定義してください。
最大30個のテープLED用サンプル・プログラム:
https://github.com/bokunimowakaru/esp32c3/tree/master/led_ws2812/led04_30leds
by bokunimo.net