neopixel --- ควบคุม LED แบบ WS2812 / NeoPixel

โมดูลนี้ให้ไดรเวอร์สำหรับแถบ LED แบบ WS2812 / NeoPixel ไดรเวอร์ใช้ machine.bitstream() เพื่อสร้างสัญญาณที่มีจังหวะเวลาแม่นยำตามที่ LED ต้องการ ดังนั้นจึงทำงานได้บนทุกพอร์ตที่โมดูล machine ของพอร์ตนั้นรองรับ bitstream

แอปพลิเคชันกำหนดข้อมูลพิกเซลผ่านการกำหนดค่าด้วยดัชนีหรือ NeoPixel.fill() แล้วจึงเรียก NeoPixel.write() เพื่ออัปเดตแถบ LED แต่ละพิกเซลถูกแสดงเป็น tuple แบบ RGB หรือ RGBW ตามลำดับที่ผู้ใช้กำหนด ส่วนไดรเวอร์จัดการลำดับสาย GRB(W) ภายในเอง

ตัวอย่าง:

import machine
import neopixel

# 32 LED strip connected to pin P7.
n = neopixel.NeoPixel(machine.Pin("P7"), 32)

# Draw a red gradient.
for i in range(32):
    n[i] = (i * 8, 0, 0)

# Update the strip.
n.write()

class NeoPixel

class neopixel.NeoPixel(pin: 'machine.Pin', n: int, bpp: int = 3, timing: int | tuple[int, int, int, int] = 1)

สร้างออบเจ็กต์ NeoPixel สำหรับแถบ LED ที่เชื่อมต่อกับ pin

  • pin คืออินสแตนซ์ machine.Pin ซึ่งจะถูกกำหนดค่าใหม่เป็นเอาต์พุตโดยคอนสตรัคเตอร์

  • n คือจำนวน LED ในแถบ

  • bpp คือจำนวนไบต์ต่อพิกเซล: 3 สำหรับ LED แบบ RGB (เช่น WS2812) และ 4 สำหรับ LED แบบ RGBW (เช่น SK6812-RGBW)

  • timing เลือกจังหวะเวลาของบิต 0 เลือกจังหวะช้าที่ 400 kHz และ 1 เลือกจังหวะมาตรฐาน 800 kHz ที่ใช้กับแถบส่วนใหญ่ในปัจจุบัน นอกจากนี้ยังสามารถส่ง 4-tuple (high_0, low_0, high_1, low_1) ของระยะเวลาในหน่วยนาโนวินาทีแทนได้ ในรูปแบบที่ machine.bitstream() รับ

ORDER: tuple[int, int, int, int]

แอตทริบิวต์ของคลาสที่แมปลำดับช่องสัญญาณที่ผู้ใช้เห็นไปยังลำดับสาย ค่าเริ่มต้นคือ (1, 0, 2, 3) กล่าวคือ tuple (R, G, B[, W]) ที่ผู้ใช้ส่งมาจะถูกส่งออกเป็น G R B [W] คลาสย่อยอาจแทนที่ ORDER เพื่อรองรับแถบที่มีลำดับสายต่างออกไป

fill(pixel: tuple[int, ...]) None

กำหนดทุกพิกเซลในแถบให้เป็น pixel ซึ่งเป็น tuple แบบ RGB หรือ RGBW ของจำนวนเต็มในช่วง 0-255

__len__() int

คืนค่าจำนวน LED ในแถบ

__setitem__(index: int, val: tuple[int, ...]) None

กำหนดพิกเซลที่ตำแหน่ง index ให้เป็น val ซึ่งเป็น tuple แบบ RGB หรือ RGBW ข้อมูลจะถูกเก็บในบัฟเฟอร์เท่านั้น เรียก write() เพื่อส่งไปยังแถบ

__getitem__(index: int) tuple[int, ...]

คืนค่าพิกเซลที่ตำแหน่ง index จากบัฟเฟอร์ในเครื่องในรูปแบบ tuple แบบ RGB หรือ RGBW ตามลำดับช่องสัญญาณที่ผู้ใช้เห็น

write() None

ส่งข้อมูลพิกเซลที่เก็บในบัฟเฟอร์ไปยังแถบโดยใช้ machine.bitstream()