【Raspberry Pi Pico入門 – Python】NeoPixelを動かす

Python,Raspberry Pi Pico入門Circuitpython,Raspberry Pi Pico

概要

簡単なLED制御回路を作る依頼でNeoPixelを使う機会がありましたので、メモがてら使い方を記録しておきます。

実行環境

マイコン:Seeed Studio XIAO SAMD21
言語:CircuitPython 9.2.7
デバイス:NeoPixel (WS2812B)

諸事情でXIAO SAMD21を使用しました。Raspberry Pi Picoでも同じ方法でNeoPixelを動かせるかと思います。

回路

基本編のNeoPixelとほぼ同じ回路を使用します。
SIGNALはD7に接続しています。

ライブラリの導入

必要なライブラリは「neopixel.mpy」「adafruit_pixelbuf.mpy」です。
導入方法は以下のリンク先で解説しています。

コーディング

main.pyに以下のコードを貼り付けて保存します。

import board
import time
import neopixel

# NeoPixelの初期化
pixel = neopixel.NeoPixel(
    board.D7, 8, pixel_order=neopixel.GRB, auto_write=False, brightness=0.2
)

while True:
    pixel[0] = (255, 0, 0)  # 赤色
    pixel[1] = (0, 255, 0)  # 緑色
    pixel[2] = (0, 0, 255)  # 青色
    pixel[3] = (255, 255, 0)  # 黄色
    pixel[4] = (255, 0, 255)  # マゼンタ
    pixel[5] = (0, 255, 255)  # シアン
    pixel[6] = (255, 255, 255)  # 白色
    pixel[7] = (0, 0, 0)  # 黒色(消灯)
    pixel.show()
    time.sleep(1)  # 1秒待機

    pixel.fill((0, 0, 0))  # 全てのLEDを消灯
    pixel.show()
    time.sleep(1)  # 1秒待機

動作確認

接続したNeoPixelが0~8番に設定した色で点滅すれば成功です。

解説

初期設定

初期設定はインスタンス生成で行います。

pixel = neopixel.NeoPixel( board.GP16, 8, pixel_order=neopixel.GRB, auto_write=False, brightness=0.2 )

第一引数がNeoPixelを接続しているピンの設定、第二引数がNeoPixelのLEDの数、第三引数以降がオプション設定(省略可)です。

pixel_orderの設定

使用するNeoPixelの型式によってはpixel_order=neopixel.GRBでは上手く動作しないときがあります。その場合は、以下の設定値を順番に試して指定通りの色になるものを探します。

pixel_order=neopixel.RGB
pixel_order=neopixel.GRB
pixel_order=neopixel.RGBW
pixel_order=neopixel.GRBW

NeoPixelの中には白色を含めた4色のものがあるようです。その場合の色を更新する関数はpixel[0] = (255, 0, 0, 0)となります。

自動更新機能をオフにする

このライブラリには、pixel[0] = (255, 0, 0)を実行するだけで色を更新する機能があり、デフォルトでONになっています。ただ、設定した通りの色にならなかったり配列のアドレスがズレていたりと挙動が怪しかったので、初期化用メソッドにauto_write=Falseを追加しています。

自動更新をオフにした場合は、pixel.show()を実行するまで色が更新されなくなります。