はじめに
以前の記事で、無線対応マイコンESP32モジュールに、お馴染みのマイコン搭載LED “NeoPixel" を搭載して、子供が楽しくリハビリするための操作ジョイスティックを作ってみた。
そう、この2つのデバイス組み合わせは、光りモノが大好きな『子供向けのIoTおもちゃ』の作成には必須ともいえる組み合わせなのです!
・Alexaから操作できるIoTイルミネーション
・ スマホから簡単におもちゃのLED色を操作
など、特にこれから冬にかけてイルミネーションの季節という事もあり、可能性がどんどん広がる!
(スマホや無線からLEDを光らせるのに、良い組み合わせ)
しかし、現状使っている NeoPixelの標準となっているAdafruitのライブラリだとどうも動作が安定しない。
特に、無線通信を行っている時、点灯させていないはずのLEDが時々ノイズが発生した様に一瞬光ってしまう事がある(フリッカー現象)
無線が駆動しているか分かって良いともいえるのですが、これでは流石にカッコ悪い。
(これがまた、目立つんだな。。。)
最初はシリアル信号に入る物理ノイズの可能性を疑いましたが、オシロで信号を観測したところ、ノイズ発生時はデジタル信号的に出力を発しているので、どちらかというソフトバグくさいなぁ…
じわじわ進む: ESP32で33個以上のNeoPixelを使うと制御が乱れる
で紹介されていたDisable Interrupや1ms delayも効果なし。
今後に向けて難儀していたところ、別のライブラリが素性が良さそうとの情報を得たので試したみたいと思う。
ライブラリ変更 (NeoPixelBus) への置き換え
今回置き換えるライブラリは以下の「NeoPixelBus」になります。
Adafruitベースなので、ほとんど関数の使い方が同じなのでありがたい!
なので、テキストエディタの置換機能のみで変更可能。
以下が変更イメージ
#include
↓
#include
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
↓
NeoPixelBus
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
今日は、細かい技術話になりましたが、こんなところで!