NeoPixelライブラリインストール
adafruit社HP (Python Installation of NeoPixel Library) 内容に沿って、NeoPixelを使う為のライブラリをインストールします。
LXTerminal で下記コマンドを実行します。
【コマンド】 sudo pip3 install adafruit-circuitpython-neopixel

配線
配線は次の通りです。RaspberryPiの制御電圧 3.3 Vに対してNeoPixelは5Vで動作します。2~3個の発光素子であれば、ラズパイからの5V供給でも良い様ですが、今回は8個の素子が対象なので 外部電源供給としています。

尚、今回実施していませんが、下記 ページに制御信号(DIN)のレベルシフト方法について記載があります。(https://learn.adafruit.com/neopixels-on-raspberry-pi/raspberry-pi-wiring )
サンプルプログラム
adafruit社HP (Python Installation of NeoPixel Library) ページの下側にあるサンプルプログラム(neopixel_simpletest.py)を実行します。上側の赤枠部をクリックするとダウンロードします。
8,14行目を各自の環境にあわせて修正します。

下図は修正箇所です。8行目は GPIO18と接続するということです。14行目は今回接続する素子数(8)です。

サンプルプログラム実行
adafruit社HP によると root ユーザーとしてプログラムを実行する必要がある様です。

下記の通り、root ユーザー変更後、プログラムを実行します。
終了は「CTRL」+「C」で抜けることが出来ます。

接続部を少し拡大した写真です。

サンプルプログラムの実行状況の動画です。
プログラム追加
自己学習目的でダウンロードしたサンプルプログラムに追加しました。次の動画最初に赤色が1つづつ移動する部分です。
プログラムです。行番48~64が色が移動する部分です。
( 元は adafruit社HP からサンプルをダウンロード)
import time
import board
import neopixel
pixel_pin = board.D18 # GPIO-PIN-NO
num_pixels = 8 # The number of NeoPixels
# The order of the pixel colors - RGB or GRB. Some NeoPixels have red and green reversed!
# For RGBW NeoPixels, simply change the ORDER to RGBW or GRBW.
ORDER = neopixel.GRB
pixels = neopixel.NeoPixel(
pixel_pin, num_pixels, brightness=0.2, auto_write=False, pixel_order=ORDER
)
def wheel(pos):
# Input a value 0 to 255 to get a color value.
# The colours are a transition r - g - b - back to r.
if pos < 0 or pos > 255:
r = g = b = 0
elif pos < 85:
r = int(pos * 3)
g = int(255 - pos * 3)
b = 0
elif pos < 170:
pos -= 85
r = int(255 - pos * 3)
g = 0
b = int(pos * 3)
else:
pos -= 170
r = 0
g = int(pos * 3)
b = int(255 - pos * 3)
return (r, g, b) if ORDER in (neopixel.RGB, neopixel.GRB) else (r, g, b, 0)
def rainbow_cycle(wait):
for j in range(255):
for i in range(num_pixels):
pixel_index = (i * 256 // num_pixels) + j
pixels[i] = wheel(pixel_index & 255)
pixels.show()
time.sleep(wait)
def color_walk(wait):
for j in range(3):
cnt_walk = 0
while True:
cnt_walk = cnt_walk + 1
for i in range(num_pixels):
if i==cnt_walk - 1 :
pixels[i] = (255,0,0)
else:
pixels[i] = (255,255,255)
pixels.show()
time.sleep(wait)
if cnt_walk == num_pixels:
break
while True:
pixels.fill((255, 255, 255))
pixels.show()
time.sleep(0.5)
color_walk(0.2)
pixels.fill((255, 0, 0))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 255, 0))
pixels.show()
time.sleep(0.5)
pixels.fill((0, 0, 255))
pixels.show()
time.sleep(0.5)
rainbow_cycle(0.003) # rainbow cycle with 1ms delay per step
個人の理解ですが、2つの色指定方法が使われています。
① index_no を指定し、素子単位で色を指定する方法。
pixels[index_no] = (255,0,0)
pixels[index_no] = (255,255,255)
② 全素子同時に指定する方法
pixels.fill((255, 255, 255))
色指定後、 ”pixels.show” で色が切り替わります。
行番12~14の “auto_write=False” によって、”pixels.show” 実行時、同時に色が切り換わる様に設定しています。
brightnessは輝度を設定し、0.0~1.0の値を設定可能です。
pixels = neopixel.NeoPixel( pixel_pin, num_pixels, brightness=0.2, auto_write=False, pixel_order=ORDER)
まとめ
出来て良かったです。
「ラズパイ4でneoPIXELを使う(PYTHONプログラム)」への1件のフィードバック