本記事は前回記事の続報となります。 Raspberry Pi 5ではGPIOへのアクセスがRP1チップ経由になったことで、 NeoPixel が使えないという話題があるようです。以下の Issue で現時点(2024/07時点)では議論しているようですが、解決にはなっておらず。
まずは手元で動作をチェック
私も確認をしてみたところ、確かに neopixel = neopixel.NeoPixel(pin, led_count, brightness=brightness)
のようなコード箇所でエラーとなることを確認しました。ボードの認識というかSoC識別のところでエラーになり、Raspberry Pi 5への対応ができていないことを感じました。
この NeoPixelクラスを用いたものでは、GPIO、SPIどちらのピン番号を設定しても同様に初期化に失敗するという挙動でした。
Raspberry Pi 5で動作させるには
よく紹介されている方法とは別のSPIを使った方式であれば、ひとまず動作ができました。ここでは NeoPixel_SPI クラスを使うことで LED (WS2812B)を制御して点灯できました。以下の写真は、そのときの様子を撮影したものです。
NeoPixel_SPI クラスについては以下のような初期化で使用できます。
import board
import neopixel_spi as neopixel
NUM_PIXELS = 25
PIXEL_ORDER = neopixel.GRB
spi = board.SPI()
pixels = neopixel.NeoPixel_SPI(
spi, NUM_PIXELS, pixel_order=PIXEL_ORDER, auto_write=False
)
これらのサンプルコードを以下のGitHubで公開しています。rpi-ws281x/rpi-ws281x-python に含まれていたサンプルを移植して再現した内容としています。
この方法がまずは Raspbery Pi5 での代替方法になると考えています。将来的にRP1経由GPIOピン操作が対応された頃には、逆に動作しないコードとなっている可能性もあるのでご注意下さい。
コメント