ラズパイ4でneoPIXELを使う(PYTHONプログラム)

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です