11. NeoPixel の制御¶
NeoPixel は WS2812 LEDとも呼ばれ、シリアルに接続され、個別にアドレス可能で、赤、緑、青のコンポーネントを 0〜255 の間で設定できるフルカラーLEDです。NeoPixel は正確なタイミングでの制御を必要とするため、特別な neopixel モジュールを用意しています。
NeoPixel オブジェクトを作成するには、次のようにします:
>>> import machine, neopixel
>>> np = neopixel.NeoPixel(machine.Pin(4), 8)
これは、GPIO4 上の8ピクセルの NeoPixel を構築します。繋げたものに合わせて、"4" (ピン番号)と "8" (ピクセル数)を調整することができます。
To set the colour of pixels use:
>>> np[0] = (255, 0, 0) # 赤の最大輝度に設定
>>> np[1] = (0, 128, 0) # 緑の最大輝度に設定
>>> np[2] = (0, 0, 64) # 青の最大輝度に設定
3色以上の LED について、RGBW ピクセルや RGBY ピクセルなど、NeoPixel クラスは bpp
パラメータを取ります。RGBW ピクセルの NeoPixel オブジェクトを設定するには、次の操作を行います。
>>> import machine, neopixel
>>> np = neopixel.NeoPixel(machine.Pin(4), 8, bpp=4)
4-bpp モードでは、3タプルの代わりに4タプルを使用して色を設定してください。たとえば、先の3つのピクセルを設定するには次のようにします。
>>> np[0] = (255, 0, 0, 128) # Orange in an RGBY Setup
>>> np[1] = (0, 255, 0, 128) # Yellow-green in an RGBY Setup
>>> np[2] = (0, 0, 255, 128) # Green-blue in an RGBY Setup
次に write()
メソッドを使って色を LED に出力します:
>>> np.write()
以下のデモ関数は、いろいろな LED の光らせ方を見せてくれます:
import time
def demo(np):
n = np.n
# 循環
for i in range(4 * n):
for j in range(n):
np[j] = (0, 0, 0)
np[i % n] = (255, 255, 255)
np.write()
time.sleep_ms(25)
# バウンド
for i in range(4 * n):
for j in range(n):
np[j] = (0, 0, 128)
if (i // n) % 2 == 0:
np[i % n] = (0, 0, 0)
else:
np[n - 1 - (i % n)] = (0, 0, 0)
np.write()
time.sleep_ms(60)
# フェードイン/フェードアウト
for i in range(0, 4 * 256, 8):
for j in range(n):
if (i // 256) % 2 == 0:
val = i & 0xff
else:
val = 255 - (i & 0xff)
np[j] = (val, 0, 0)
np.write()
# 消灯
for i in range(n):
np[i] = (0, 0, 0)
np.write()
この関数は次のように実行します:
>>> demo(np)