MicroPython 如此簡單: LED WS2812b (NeoPixel)

Yungger
4 min readNov 21, 2023

一個簡單到不行的 MicroPython 控制 WS2812b 的 NeoPixel 函式庫, 現在就開始試試.

主要功能介紹:

  1. 開 / 關 / 閃爍
  2. 360色七彩霓虹燈
  3. 指定 65535 種 RGB 組合顏色
  4. 隨機顏色
  5. 指定單顆燈珠的顏色控制
  6. 進階範例: 指定顏色間的無縫轉變

安裝函式庫

首先, 必須先上傳函式庫到 MCU 板子上 !

應用範例

假設 NeoPixel 燈條上有 8 顆燈珠, 信號線是連到 GPIO 14 腳位, 亮度設為 30:

config = {'pin':14, 'pixels':8, 'bri':30} 

import utime as time
from MyKit_NeoPixel import myNeoPixel

np = myNeoPixel(config['pin'], config['pixels'], config['bri'])

❤️‍🔥 範例一: 開 / 關 / 閃光燈

  • on(i): 亮
  • off(i): 滅
  • i: 指定燈珠, 預設不指定為全部燈珠一起亮滅
def test():
for _ in range(3):
np.on()
time.sleep_ms(200)
np.off()
time.sleep_ms(200)
test()

❤️‍🔥 範例二: 360色七彩霓虹燈

  • on_360(c, i): 360色盤指定色
  • c: 0 ~ 360
  • i: 指定燈珠, 預設不指定為全部燈珠一起亮滅
def test():
for c in range(360):
np.on_360(c) # 360 色色盤

❤️‍🔥 範例三: 指定 65535 種 RGB 組合顏色

  • on_rgb((r,g,b), i): 255x255x255 指定色
  • r,g,b: 紅色藍的色值 0~255
  • i: 指定燈珠, 預設不指定為全部燈珠一起亮滅
def test():
for r in range(256):
np.on_rgb((r, 0, 0))
for g in range(256):
np.on_rgb((0, g, 0))
for b in range(256):
np.on_rgb((0, 0, b))

❤️‍🔥 範例四: 隨機顏色

  • on_random(i): 系統自動給色, 用戶無須指定
  • i: 指定燈珠, 預設不指定為全部燈珠一起亮滅
def test():    
for _ in range(5):
np.on_random()
time.sleep(0.5)

❤️‍🔥 範例五: 指定的單顆燈珠顏色

如上範例, 只需在輸入參數, 指定燈珠編號 i, 就能只控制單顆燈珠, 而非一起運作, 以範例一略作修改如下, 只亮第 3 顆 (編號由 0 開始算起):

def test():
for _ in range(3):
np.on(2)
time.sleep_ms(200)
np.off()
time.sleep_ms(200)
test()

❤️‍🔥 進階範例: 指定顏色間的無縫轉變

  • on_transform(rgb1, rgb2, 幾等分):顏色由 rgb1 變換至 rgb2, 過程有幾次的漸層變換
  • 回傳值為一個 iterable (迭代) 變數
  • 如下 ((255,0,0), (0, 255,0), 100): 由紅變換到綠, 過程中出現100個漸層顏色
def test():    
rgb_gen = np.on_transform(rgb1, rgb2, 100) # 顏色變換切成 100 等分
for (r, g, b) in rgb_gen:
np.on_rgb((r, g, b))
time.sleep_ms(30)

❤️‍🔥 範例X: 以上控制燈條或單顆燈珠, 加上各顏色的變化, 發揮您的想像力, 就可組合出無限創意的燈光秀. 例如, 波浪式的色組往前往後進, 奇幻彩虹, 或舞台的燈光秀…等等

若覺得此文真對您有幫助, 點點左上方的拍手圖示, 鼓勵一下。若還想 請喝杯咖啡 鼓勵一下勇哥的繼續創作, 也感謝 😘 😘 !!

Yungger 勇哥

Maker & Freelancer

--

--