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件のフィードバック