OGIMOノート~家族のためのモノづくり~

OGIMOテックノート ~家族のためのモノづくり~

重度障害の息子を持つ父親エンジニアの備忘録。自作の電子工作おもちゃ/リハビリ器具/ロボット関係の製作記録、思った事を残していきます

ESP32(M5Stack)+LED:Neopixelを使ってみた② (ライブラリ見直し)

はじめに


f:id:motokiinfinity8:20181201020813j:plain


以前の記事で、無線対応マイコンESP32モジュールに、お馴染みのマイコン搭載LED “NeoPixel" を搭載して、子供が楽しくリハビリするための操作ジョイスティックを作ってみた。

ogimotokin.hatenablog.com

そう、この2つのデバイス組み合わせは、光りモノが大好きな『子供向けのIoTおもちゃ』の作成には必須ともいえる組み合わせなのです!
・Alexaから操作できるIoTイルミネーション
スマホから簡単におもちゃのLED色を操作

など、特にこれから冬にかけてイルミネーションの季節という事もあり、可能性がどんどん広がる!
スマホや無線からLEDを光らせるのに、良い組み合わせ)


しかし、現状使っている NeoPixelの標準となっているAdafruitのライブラリだとどうも動作が安定しない。

github.com

特に、無線通信を行っている時、点灯させていないはずのLEDが時々ノイズが発生した様に一瞬光ってしまう事があるフリッカー現象)
無線が駆動しているか分かって良いともいえるのですが、これでは流石にカッコ悪い。
(これがまた、目立つんだな。。。)

最初はシリアル信号に入る物理ノイズの可能性を疑いましたが、オシロで信号を観測したところ、ノイズ発生時はデジタル信号的に出力を発しているので、どちらかというソフトバグくさいなぁ…

じわじわ進む: ESP32で33個以上のNeoPixelを使うと制御が乱れる
で紹介されていたDisable Interrupや1ms delayも効果なし。

今後に向けて難儀していたところ、別のライブラリが素性が良さそうとの情報を得たので試したみたいと思う。

ライブラリ変更 (NeoPixelBus) への置き換え

今回置き換えるライブラリは以下の「NeoPixelBus」になります。

github.com

Adafruitベースなので、ほとんど関数の使い方が同じなのでありがたい!
なので、テキストエディタの置換機能のみで変更可能。

以下が変更イメージ

#include

#include

Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

NeoPixelBus strip(PIXEL_COUNT, PIXEL_PIN);

strip.begin();

strip.Begin();

strip.show();

strip.Show();

strip.setPixelColor(i, strip.Color(0, 0, 0));

strip.SetPixelColor(i, RgbColor(0, 0, 0));


変更はたったこれだけ(笑)


そして、実際に動作を試してみたら、、、
「フリッカー課題が解決されてる!!」

無線通信が行われていようが全くチラつきがおこらず、安定している!
これなら問題なしなので、今度から積極的にNeoPixelBusライブラリを使っていこう!

修正したソースは GitHuに置きましたよー
github.com


今日は、細かい技術話になりましたが、こんなところで!