top of page

XIAO Expansion boardでGROVE Switch(P)と RGB LED STICK (10-WS2813)をMicroPythonで動かしてみました。

更新日:2022年11月12日

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)


 プログラムを参考にしたサイト

閲覧数:6回

Comments


bottom of page