WaveShare製のRaspberry Pi Pico用16×10 RGB Matrix LEDでoffical DocumentationのRaspberry Pi Pico Python SDKにあるpio_ws281.pyをベースに自由に点滅させてみました。
メーカーのサポートページは下記のURLです。
まず、通常の方法でMicroPythonのファームウェアをセットアップします。
設定方法は下記のURLに記載されています。
URL: https://www.raspberrypi.org/documentation/rp2040/getting-started/#getting-started-with-micropython
また、当ブログでは下記の記事に記載しています。
次に、開発環境の設定していない場合は設定します。
当ブログでは下記の記事に記載しています。
準備が整ったらUSBケーブルをコンピューターに接続します。
おそらく、BOOTSELボタンを押しながら起動するのは初期設定のときのみで、
普段は普通の接続で大丈夫そうです。
Thonnyを起動し、インタプリタとして「MicroPython(Raspberry Pi Pico)」を選択します。
これは、右下のボックスをクリックして行うことができます。
Raspberry Pi Picoの準備ができたら、プログラムを用意します。
Raspberry Pi Pico Python SDKのURLは下記の通りで、参照するのは3.9.2. WS2812 LED (NeoPixel)になります。
また、pio_ws2812.pyが記載されているGitHubへの直リンクは下記になります。
なお、今回プログラムを動かすにあたり、マルツの下記のページに大変お世話になりました。
pio_ws2812.pyをThonnyにコピペしたら、参照するプログラムは1列8個版の向けに作成されているため、8行目のNUM_LEDSを下記の通りに修正します。
NUM_LEDS = 160
また、27行目のsideset_base=Pin(22)を下記の通りに修正します。
sideset_base=Pin(6)
マルツのページによると、35行目以降を変更することによって自由に光らせることができ、arという配列変数にカスケードされた数分のRGBの輝度情報をセットして、関数sm.put(ar, 8) を実行することにより、光らせることができます。
ar[0] = g0 * 65536 + r0 * 256 + b0
ar[1] = g1 * 65536 + r1 * 256 + b1
・
・
・
sm.put(ar, 8)
※gi, ri, bi は、0~255の整数
と記載がされているので、この情報をもとに点滅のパターンを考えていきます。
パターン1 水平方向に点滅させる。
35行目以降のプログラムは下記の通り作成しました。
※プログラミングは専門外なので、きれいなプログラムでないかもです。
# color
g0=0 # Color 0~255 green
r0=10 # Color 0~255 red
b0=10 # Color 0~255 blue
for i in range(16): #0~15
n = 16*0+i
ar[n] = g0 * 65536 + r0 * 256 + b0
sm.put(ar, 8)
time.sleep_ms(50)
for j in range(9): #0~8
for i in range(16): #0~15
ar[16*(j+1)+i] = g0 * 65536 + r0 * 256 + b0
ar[16*j+i] = 0
sm.put(ar, 8)
time.sleep_ms(50)
パターン2 垂直方向に点滅させる。
35行目以降のプログラムは下記の通り作成しました。
※プログラミングは専門外なので、きれいなプログラムでないかもです。
# color
g0=10 # Color 0~255 green
r0=10 # Color 0~255 red
b0=10 # Color 0~255 blue
for i in range(10): #0~9
n = 16*i+0
ar[n] = g0 * 65536 + r0 * 256 + b0
sm.put(ar, 8)
time.sleep_ms(50)
for j in range(15): #0~14
for i in range(10): #0~9
n = 16*i+j
ar[n] = 0
ar[n+1] = g0 * 65536 + r0 * 256 + b0
sm.put(ar, 8)
time.sleep_ms(50)
パターン3 長方形に点滅させる。
35行目以降のプログラムは下記の通り作成しました。
※プログラミングは専門外なので、きれいなプログラムでないかもです。
# color
g0=10 # Color 0~255 green
r0=0 # Color 0~255 red
b0=10 # Color 0~255 blue
for i in range(0,10):
n1 = 16*i+0
ar[n1] = g0 * 65536 + r0 * 256 + b0
n2 = 16*i+15
ar[n2] = g0 * 65536 + r0 * 256 + b0
for j in range(0,16):
n3 = 16*0+j
ar[n3] = g0 * 65536 + r0 * 256 + b0
n4 = 16*9+j
ar[n4] = g0 * 65536 + r0 * 256 + b0
sm.put(ar, 8)
time.sleep_ms(100)
for k in range(4):
for i0 in range(k,10-k):
n10 = 16*i0+k
ar[n10] = 0
n20 = 16*i0+15-k
ar[n20] = 0
for j0 in range(k,16-k):
n30 = 16*k+j0
ar[n30] = 0
n40 = 16*(9-k)+j0
ar[n40] = 0
for i in range(k+1,10-(k+1)):
n1 = 16*i+(k+1)
ar[n1] = g0 * 65536 + r0 * 256 + b0
n2 = 16*i+(15-(k+1))
ar[n2] = g0 * 65536 + r0 * 256 + b0
for j in range(k+1,15-(k+1)):
n3 = 16*(k+1)+j
ar[n3] = g0 * 65536 + r0 * 256 + b0
n4 = 16*(9-(k+1))+j
ar[n4] = g0 * 65536 + r0 * 256 + b0
sm.put(ar, 8)
time.sleep_ms(100)
for i in range(4,6):
n1 = 16*i+4
ar[n1] = 0
n2 = 16*i+(15-4)
ar[n2] = 0
for j in range(4,11):
n3 = 16*4+j
ar[n3] = 0
n4 = 16*(9-4)+j
ar[n4] = 0
sm.put(ar, 8)
time.sleep_ms(100)
パターン4 斜め方向に点滅させる。
35行目以降のプログラムは下記の通り作成しました。
※プログラミングは専門外なので、きれいなプログラムでないかもです。
# color
g0=10 # Color 0~255 green
r0=10 # Color 0~255 red
b0=0 # Color 0~255 blue
#1-10
for i in range(9):
for m in range(i+1):
ar[16*m+(i-m)] = g0 * 65536 + r0 * 256 + b0
for n in range(i):
ar[16*n-1+(i-n)] = 0
sm.put(ar, 8)
time.sleep_ms(50)
for i in range(9):
ar[16*i+(9-1-i)] = 0
sm.put(ar, 8)
time.sleep_ms(50)
#11-17
for j in range(6): #0~5
for i in range(10): #0~9
n = 16*i+(9-i)+j
ar[n] = 0
ar[n+1] = g0 * 65536 + r0 * 256 + b0
sm.put(ar, 8)
time.sleep_ms(50)
#18-26
for i in reversed(range(0, 9)):
for m in range(i+2):
ar[16*(9-m)+m+(15-(i+1))] = 0
for n in range(i+1):
ar[16*(9-n)+n+(15-i)] = g0 * 65536 + r0 * 256 + b0
sm.put(ar, 8)
time.sleep_ms(50)
ar[16*9+0+15] = 0
sm.put(ar, 8)
time.sleep_ms(50)
1日考えただけでも、これだけのパターンを考えることができたので、時間があるときにまた違ったパターンにチャレンジしてみたいと思います。
Comentarios