スズハドットコム

IT関連や3Dプリンタの記事、たまに生活のメモを書いていきます。

シリアルLEDテープ(WS2815)で遊ぶ ②Raspberry Piから制御する

こちらの続きです。 suzu-ha.com

シリアルLEDをRaspberry Piから制御してみます。

環境

Raspberry Pi 4B
Raspberry Pi OS bookworm
Python 3.11.2
rpi-ws281x-python 5.0.0

シリアルLEDテープ(WS2815)

ハードウェアの準備

シリアルLEDテープの端子のうち、+12VとGNDにDCジャックを取り付けます。
また、GND、DI、BIはブレッドボードに刺せるように導線を半田で固めます。

下図のように接続します。

ソフトウェアの準備

WS281X LED制御用ライブラリ

rpi_ws281xというライブラリがあります。
https://github.com/jgarff/rpi_ws281x

READMEによると、python向けディストリビューションrpi-ws281x-pythonが用意されているので、今回はこちらを使用します。
https://github.com/rpi-ws281x/rpi-ws281x-python

インストールはpipで実施します。

$ sudo pip3 install --break-system-packages rpi_ws281x

なお、--break-system-packagesオプションを付加しないと

× This environment is externally managed

というエラーでインストールできませんでした。

サンプルスクリプトの準備

rpi-ws281x-pythonのサンプルスクリプトを利用します。

$ cd 作業ディレクトリ(今回は/script)
$ git clone https://github.com/rpi-ws281x/rpi-ws281x-python.git

サンプルスクリプトを編集します。

$ cd rpi-ws281x-python/examples
$ vi strandtest.py

以下の部分を変更します。

# LED strip configuration:
# LED_COUNT = 16 # Number of LED pixels.
LED_COUNT = 60 ←LEDテープ上にあるLEDの数に合わせます。
# LED_PIN = 18 # GPIO pin connected to the pixels (18 uses PWM!).
# LED_PIN = 10 # GPIO pin connected to the pixels (10 uses SPI /dev/spidev0.0).
LED_PIN = 21 ←使用するGPIOの番号に合わせます。今回は21です。
LED_FREQ_HZ = 800000 # LED signal frequency in hertz (usually 800khz)
LED_DMA = 10 # DMA channel to use for generating signal (try 10)
LED_BRIGHTNESS = 255 # Set to 0 for darkest and 255 for brightest
LED_INVERT = False # True to invert the signal (when using NPN transistor level shift)
LED_CHANNEL = 0 # set to '1' for GPIOs 13, 19, 41, 45 or 53

実行

サンプルスクリプトを実行します。

$ sudo python strandtest.py

つぎはスクリプトを自作したいですね。