フルカラーLED(マイコン内蔵RGBLED 8mm PL9823-F8)をPICOで光らせます。
フルカラーLED(マイコン内蔵RGBLED 8mm PL9823-F8)をPICOでいろいろな色で光らせます。
フルカラーLED(マイコン内蔵RGBLED 8mm PL9823-F8)
配線図
MicroPythonプログラム
import array, time from machine import Pin import rp2 # NeoPixel WS2812Bの指定 NUM_LEDS = 1 # NeoPixelの数 LED_PIN = 0 # NeoPixel信号接続端子 # 以下はNeoPixelを使用するための設定、このまま書いておく --------------------------- # NeoPixcel WS2812の制御タイミングに合わせたパルスを生成するための設定をアセンブラで指定 @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() # クラスStateMachineを使用して、正確なパルスを出力するための設定を行う sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(LED_PIN)) # 設定したクラスStateMachineを有効にして使えるようにする。 sm.active(1) # LEDのRGBの値を指定する24bit(8bit x 3)の配列をNeoPixelの数で準備 ar = array.array("I", [0 for _ in range(NUM_LEDS)]) # NeoPixel点灯処理関数、このまま書いておく ------------------------------------ def drawpix(num, r, g, b): ar[num] = g << 16 | r << 8 | b # NeoPixel制御パルス用の24bitデータを左ビットシフトとORで生成 # 以下に点灯させる処理を記入-------------------------------------------------- # 1個を白色点灯(複数ある場合は最初の1番目のみ点灯) # 点灯させたいNeoPixelの番号(num)とRGB(赤緑青)の明るさを0〜255(30程でも十分明るい)で指定 #drawpix(0, 100, 100, 100) # LED点灯処理関数呼び出し(num, R, G, B) #sm.put(ar, 8) # 点灯実行(NeoPixel制御パルス出力) #time.sleep_ms(100) red = 100 green = 100 blue = 100 # ループで色を連続的に変化させる while True: # 赤から青への変化 for blue in range(100, 256): drawpix(0, red, 0, blue) # LEDの色を設定 sm.put(ar, 8) # LEDを点灯 time.sleep_ms(100) # 100ミリ秒待機 # 青から緑への変化 for green in range(100, 256): drawpix(0, 0, green, blue) # LEDの色を設定 sm.put(ar, 8) # LEDを点灯 time.sleep_ms(100) # 100ミリ秒待機 # 緑から赤への変化 for red in range(100, 256): drawpix(0, red, green, 0) # LEDの色を設定 sm.put(ar, 8) # LEDを点灯 time.sleep_ms(100) # 100ミリ秒待機
実行
自由研究
テンテン
色の変化の速さを変えてみたり好きな色の番号を探してみてください。
ちなみに消灯するにはどうしたらいいでしょうか。