2017年12月23日土曜日

ESP32で大量のNeoPixelsを正常に動作させる

Adafruits版だと正常に動作しないのですが、facebook上で「このライブラリを使えば動く」と教えていただき、試したところ正常に動作しました。Mさん、ご教授いただきありがとうございました。

ただちょっとビルドを通すのに手間取ったので、その辺を書いておきます。

まず、以下をダウンロードして解凍するか、cloneします。ここにWS2812のライブラリなどが入っています。

esp32-snippets直下のcpp_utilsをesp/esp-idf/components下にコピーします。本来であればこのままで良いのですが、簡単にビルドが通らないソースがある場合にはその拡張子を.cppから.bakに変えてしまいます。私の場合、BLEHIDDevice.cppをBLEHIDDevice.cpp.bak、BLESecurity.cppをBLESecurity.cpp.bakに変更しました。良いんだ今は使わないから(笑)。

ダウンロードした.zipとesp32-snippetsはゴミ箱に入れても構いません。

次に、以下をダウンロードして解答するか、cloneします。

ターミナルでespressif/app/ESP32_gpio_WS2812/mainに移動します。ここにあるWS2812.cppとWS2812.hを削除します(ここにあるのは古いライブラリで最新版は上でcomponents下にコピーしましたので)。

一つ上のディレクトリに戻って、make menuconfigでシリアルポートと通信速度を設定します。通常ならばこれだけで良いのですが、components下に入れた他のライブラリのビルドを通すためにCompilar options->Enable C++ exceptionsをonにします(カーソルを移動してスペースキー)。

WS2812/NeoPixelsはGPIO22に接続します。

これでmake flashします。するとesp-idfのバージョンによってはエラーがでますので、main/main.cの22行目heap_regions.hをincludeしている分をコメントアウトし、26行目のesp_heap_alloc_caps.hをesp_heap_caps.hに変更し、34行目をコメントアウトします。

ソースを保存して再度make flashすればデモ点灯します。

LEDの数や接続ピンを変更するにはmain/ws2812_task.cppの37-38行目の定数を変更します。

0 件のコメント:

コメントを投稿