neopixel.py 884 B

123456789101112131415161718192021222324252627282930313233
  1. # NeoPixel driver for MicroPython on ESP32
  2. # MIT license; Copyright (c) 2016 Damien P. George
  3. from esp import neopixel_write
  4. class NeoPixel:
  5. ORDER = (1, 0, 2, 3)
  6. def __init__(self, pin, n, bpp=3, timing=0):
  7. self.pin = pin
  8. self.n = n
  9. self.bpp = bpp
  10. self.buf = bytearray(n * bpp)
  11. self.pin.init(pin.OUT)
  12. self.timing = timing
  13. def __setitem__(self, index, val):
  14. offset = index * self.bpp
  15. for i in range(self.bpp):
  16. self.buf[offset + self.ORDER[i]] = val[i]
  17. def __getitem__(self, index):
  18. offset = index * self.bpp
  19. return tuple(self.buf[offset + self.ORDER[i]]
  20. for i in range(self.bpp))
  21. def fill(self, color):
  22. for i in range(self.n):
  23. self[i] = color
  24. def write(self):
  25. neopixel_write(self.pin, self.buf, self.timing)