注意書き

本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

Raspberry Pi 5とNeoPixel (WS2812B)

ハードウェア

本記事は前回記事の続報となります。 Raspberry Pi 5ではGPIOへのアクセスがRP1チップ経由になったことで、 NeoPixel が使えないという話題があるようです。以下の Issue で現時点(2024/07時点)では議論しているようですが、解決にはなっておらず。

Support for Raspberry Pi 5 · Issue #528 · jgarff/rpi_ws281x
Hi, I just got a Raspberry Pi 5 and am getting an error that my hardware revision is not supported. Here is some hardware information from cat /proc/cpuinfo: Ha...
スポンサーリンク

まずは手元で動作をチェック

私も確認をしてみたところ、確かに 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 に含まれていたサンプルを移植して再現した内容としています。

GitHub - techmadot/rpi5-neopixel-sample
Contribute to techmadot/rpi5-neopixel-sample development by creating an account on GitHub.

この方法がまずは Raspbery Pi5 での代替方法になると考えています。将来的にRP1経由GPIOピン操作が対応された頃には、逆に動作しないコードとなっている可能性もあるのでご注意下さい。

SPI経由でもたくさんのLEDが繋がった状態では正常に動かないことがあるようです。私の場合そのような個数を繋げて確認した訳ではなく、今回のような25個程度です。この分には問題なく動いていました。

ただし、配線には気を遣う必要がありそうで、手で配線に触れると表示中のLEDの色が意図しない状態になったりします…

コメント

タイトルとURLをコピーしました