[micro:bit]フルカラーLED NeoPixelsプログラミング
フルカラーLEDチップを複数基板上に搭載したNeoPixelsの使い方を入門編という切り口で記事を書きました。
NeoPixelsとはAdafruits社のオリジナル商品でしてフルカラーLEDチップWS2812を基板上に複数レイアウトしたもので、LEDの配置パターン別に数種類あり、スティック(棒状)、サークル(環状)、マトリクス(面状)、テープ状などがあります。
今回はこの中からスティック(棒状):8個x1列のものを使って説明をしていきます。(記事内では互換品を使用)
目 次
【NeoPIxelsStick(x8)の基本情報】
仕様
- フルカラーLEDチップ:WS2812(DataSheet) 5mm各、RGB3色のLED内蔵、RGB各地値は8bit幅指定。
- 搭載数:8個(内部的にシリアル信号でカスケード接続されている)
- 電源:+4.5V~5.5V (今回はこれを3.3Vで使用する。)
注)電源電圧について:基本的には5V系のチップなので動作範囲も±10%(4.5V~5.5V)なのですが、公式サイトのドキュメントにも書いてありますが幸いにもWS2812は3.3Vでも動作します。
注)内蔵電源使用の場合:LEDを8個を超える(9個以上)時はmicro:bit内蔵電源(90mAmax)は使わずに外部電源(電池)を使う様にとも書いてあります。なのでStick(x8)の場合はギリギリセーフです。
本記事内で使用しているStickはNeoPixlesの互換品(Amazonから購入、HiletGo製)
画像(表・裏)を以下に示します、購入品にはコネクタ等は付属してないので別途自分で用意する必要があります、画像では3ピンのピンヘッダーを半田付けしてあります。
WS2812使い方
端子はVCC/VDD(+5V)、VSS(GND)、DI(DataIn)、DO(DataOut)、DI(DataIin)の4ピンで、これを複数個カスケードに接続する
下図に3個の場合のブロック図を示してあります、今回使用するものは8個が接続されてます。
上記の図では左端のWS2812のDI(DataIn)端子からRGB値(24bit)を入力し、最初のWS2812にRGB値が格納される、更に次のRGB値を左端から入力すると最初のRGB値は2個目のWS2812に格納される。
この様に、いわゆるバケツリレーの様にデータが順次左のチップから右のチップへと移動していきます。
このため、複数のLEDを接続する場合でも配線数は増加しないので大量のLED搭載が少ない配線で可能となります。
【micro:bitとの接続】
micro:bitとの接続には過去の記事「電池BOXとスピーカーをコンパクトに実装」で使用したブレークアウト基板[K-BIT5PS] aitendo製を使います。
NeoPixelStick(x8)端子
下図を参考にmicro:bitと接続します。(基板上のシルク印刷に4-7VDCと記載がありますが今回は3Vに接続)
購入状態では基板にはコネクタor配線は付いてないので別途3ピンヘッダーを半田付けしてあります。
注)図中では、P1に接続してますが、これはP0、P1、P2のどれでもOKです。 (プログラムのて選択可能)
micro:bitとの接続
ブレークアウト基板へ接続します、下図の画像を参考にしてください。
NeoPixel基板を固定するためmicro:bitのGND端子ネジにスペーサ(M3x5mm)を共締めしてあります。詳細は2枚目以降の画像を参考にしてください。
注)スペーサ(M3x5mm):M3ネジ部が長いためmicrobit側のボスに全部入り込まないのでM3ナットを間に挟んでます。(上部の拡大画像参照)
【micro:bitプログラミング】
NeoPixelサンプルプログラム(hex)
NeoPixel拡張機能のインストール
拡張機能インストール画面の中からNeoPixelを選択します。
NeoPixelブロック
拡張機能がインストールされるとMakeCode画面の中にNeoPixelブロックが追加されます。「NeoPixel」と「その他」の2画面あります。
NeoPixelプログラミング
ここで、やっとプログラミングに入ります。もちろん、ブロックエディターによるプログラミングになります。
NeoPixelの構成を定義(共通)
すべてのプログラム共通に必須な命令です、これは接続されているNeoPixelがどのようなタイプなのかを定義します。
指定項目は
- NeoPixel変数名:strip(下図の場合)
- 接続端子:P1(下図の場合)
- 搭載LEDチップ数:8(下図の場合)
- カラーデータ転送順序:RGB(GRB順)(下図の場合)
下図の様に、定義ブロックを「最初だけ」ブロックに挿入する。
このブロックを実行することでNeoPixelの実体を意味するオブジェクト変数“strip”が定義されます。
⇒ 「8個のLEDが搭載されたNeoPixelがP1端子に接続されていて、カラーデータ転送順序はG→R→B」ということです。
Sample1:LEDを点灯させる(全LED・単色)
8個のLEDの全点灯、カラー指定=赤色(プルダウンメニューにてカラー選択可能)
Sample2:LEDを点灯させる(6色を切り替える・単色)
上のサンプルの発展形です、6色を一定時間周期で切り替えます。
Sample3:LEDを点灯させる(全点灯:レインボーカラー)
ブロックメニューの中のレインボーカラーを使います。
LEDの色を再現は難しい。
Sample4:LED点灯位置をシフト回転させる。(LED1個・単色)
LED(1個)を赤色点灯させ、それを1個ずつシフトさせてます。
Sample5:LEDを点灯させる(全LED・レインボー)
同様にレインボーカラーでシフト回転させてみます。
NeoPixelのブロックはまだまだ、沢山あるのですがきょうのところはここで一旦締めます。