XIAO Expansion boardでGROVE Switch(P)と RGB LED STICK (10-WS2813)をMicroPythonで動かしてみました。
今回は、RGB LED STICKをA0-D0、SwitchをUARTに接続しています。
全体図
Grove拡大図
まず、XIAO RP2040を動かす方法についてはこちらに記載されています。
当ブログでは下記の記事に記載しております。
また、XIAO Expansion boardのGPIOについては当ブログでは下記に記載しています。
WS2813は以前、「WaveShare製のRaspberry Pi Pico用16×10 RGB Matrix LEDでoffical Documentationにあるpio_ws281.pyを動かしてみました。 」で触ったことがあるので、そのとき同様に下記の参考サイトにあるページを参考にしながらプログラムを作成しました。
作成したプログラムは下記の通りです。
import array, time
from machine import Pin
import rp2
sw = Pin(1,Pin.IN)
NUM_LEDS = 10
@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24)
def ws2812():
T1 = 2
T2 = 5
T3 = 3
wrap_target()
label("bitloop")
out(x, 1) .side(0) [T3 - 1]
jmp(not_x, "do_zero") .side(1) [T1 - 1]
jmp("bitloop") .side(1) [T2 - 1]
label("do_zero")
nop() .side(0) [T2 - 1]
wrap()
sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(26))
sm.active(1)
ar = array.array("I", [0 for _ in range(NUM_LEDS)])
while True:
if sw.value()==1:
g0 = 100
r0 = 100
b0 = 100
else:
g0 = 0
r0 = 0
b0 = 0
ar[0] = g0 * 65536 + r0 * 256 + b0
ar[1] = g0 * 65536 + r0 * 256 + b0
ar[2] = g0 * 65536 + r0 * 256 + b0
ar[3] = g0 * 65536 + r0 * 256 + b0
ar[4] = g0 * 65536 + r0 * 256 + b0
ar[5] = g0 * 65536 + r0 * 256 + b0
ar[6] = g0 * 65536 + r0 * 256 + b0
ar[7] = g0 * 65536 + r0 * 256 + b0
ar[8] = g0 * 65536 + r0 * 256 + b0
ar[9] = g0 * 65536 + r0 * 256 + b0
sm.put(ar, 10)
実行結果
スイッチをONにすると、LED STICKが光ります。
全体図
Grove拡大図
【参考】
製品の情報
XIAO RP2040
XIAO Expansion board
Grove Switch(P)
Grove RGB LED STICK (10-WS2813)
プログラムを参考にしたサイト
Comentários