カテゴリー
ESP8266+ESP32+RISC-V

ESP32用 RGB LED WS2812 ドライバが原因で起動しなくなった対策方法

RGB LED を使った ESP32用プログラムでCONFLICT! driver_ng is not allowed が発生する場合の原因と対策方法を説明します。

フルカラーRGB LED WS2812

本稿で使用するフルカラーRGB LEDは、シリアルデータ制御によるフルカラー表示ができます。

シリアルデータ制御によるフルカラー表示が可能な RGB LED SK6812 を M5Stack BASICに接続するイメージ図
シリアルデータ制御によるフルカラー表示が可能な RGB LED SK6812 を M5Stack BASICに接続するイメージ図

開発ボードや開発キットに標準搭載されつつある

このような 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 を搭載しています。

M5Stack Technology 社が販売する M5 RGB LED Unit
M5Stack Technology 社が販売する M5 RGB LED Unit

本LEDの動かし方については、3年以上前に当ブログで紹介しました。詳細については、下記の記事をご覧ください。

本LEDの動かし方を紹介 https://bokunimo.net/blog/esp/1522/

動作しない・再起動を繰り返す現象

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のバージョンを選択してください。

Arduino IDEの[ツール]メニューから、[ボード]→[ボードマネージャ]を選択し、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

ESP32C3 と RGB LED
サンプルプログラムで簡単に動作確認ができる

対策方法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に対応したサンプル・プログラムの動作例です。

最大30個のテープ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

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

 - 
Chinese (Simplified)
 - 
zh-CN
Chinese (Traditional)
 - 
zh-TW
English
 - 
en
French
 - 
fr
German
 - 
de
Italian
 - 
it
Japanese
 - 
ja
Korean
 - 
ko
Russian
 - 
ru
Spanish
 - 
es