|
30 | 30 |
|
31 | 31 | import math
|
32 | 32 |
|
33 |
| -try: |
34 |
| - # imports needed for main NeoPixel class |
35 |
| - import digitalio |
36 |
| - from neopixel_write import neopixel_write |
37 |
| -except NotImplementedError: |
38 |
| - # silently accept this, can still use NeoPixel SPI class |
39 |
| - pass |
| 33 | +import digitalio |
| 34 | +from neopixel_write import neopixel_write |
40 | 35 |
|
41 | 36 | __version__ = "0.0.0-auto.0"
|
42 | 37 | __repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_NeoPixel.git"
|
@@ -235,85 +230,3 @@ def show(self):
|
235 | 230 | neopixel_write(self.pin, self.buf)
|
236 | 231 | else:
|
237 | 232 | neopixel_write(self.pin, bytearray([int(i * self.brightness) for i in self.buf]))
|
238 |
| - |
239 |
| -class NeoPixel_SPI(NeoPixel): |
240 |
| - """ |
241 |
| - A sequence of neopixels. |
242 |
| -
|
243 |
| - :param ~busio.SPI spi: The SPI bus to output neopixel data on. |
244 |
| - :param int n: The number of neopixels in the chain |
245 |
| - :param int bpp: Bytes per pixel. 3 for RGB and 4 for RGBW pixels. |
246 |
| - :param float brightness: Brightness of the pixels between 0.0 and 1.0 where 1.0 is full |
247 |
| - brightness |
248 |
| - :param bool auto_write: True if the neopixels should immediately change when set. If False, |
249 |
| - `show` must be called explicitly. |
250 |
| - :param tuple pixel_order: Set the pixel color channel order. GRBW is set by default. |
251 |
| -
|
252 |
| - Example: |
253 |
| -
|
254 |
| - .. code-block:: python |
255 |
| -
|
256 |
| - import board |
257 |
| - import neopixel |
258 |
| -
|
259 |
| - pixels = neopixel.NeoPixel_SPI(board.SPI(), 10) |
260 |
| - pixels.fill(0xff0000) |
261 |
| - """ |
262 |
| - #pylint: disable=invalid-name, super-init-not-called |
263 |
| - |
264 |
| - FREQ = 6400000 # 800kHz * 8, actual may be different |
265 |
| - TRST = 80e-6 # Reset code low level time |
266 |
| - |
267 |
| - def __init__(self, spi, n, *, bpp=3, brightness=1.0, auto_write=True, pixel_order=None): |
268 |
| - from adafruit_bus_device.spi_device import SPIDevice |
269 |
| - self._spi = SPIDevice(spi, baudrate=self.FREQ) |
270 |
| - with self._spi as spibus: |
271 |
| - try: |
272 |
| - # get actual SPI frequency |
273 |
| - freq = spibus.frequency |
274 |
| - except AttributeError: |
275 |
| - # use nominal |
276 |
| - freq = self.FREQ |
277 |
| - self.RESET = bytes([0]*round(freq*self.TRST)) |
278 |
| - self.n = n |
279 |
| - if pixel_order is None: |
280 |
| - self.order = GRBW |
281 |
| - self.bpp = bpp |
282 |
| - else: |
283 |
| - self.order = pixel_order |
284 |
| - self.bpp = len(self.order) |
285 |
| - self.buf = bytearray(self.n * self.bpp) |
286 |
| - self.spibuf = bytearray(8*len(self.buf)) |
287 |
| - # Set auto_write to False temporarily so brightness setter does _not_ |
288 |
| - # call show() while in __init__. |
289 |
| - self.auto_write = False |
290 |
| - self.brightness = brightness |
291 |
| - self.auto_write = auto_write |
292 |
| - |
293 |
| - def deinit(self): |
294 |
| - """Blank out the NeoPixels.""" |
295 |
| - for i in range(len(self.buf)): |
296 |
| - self.buf[i] = 0 |
297 |
| - self.show() |
298 |
| - |
299 |
| - def show(self): |
300 |
| - """Shows the new colors on the pixels themselves if they haven't already |
301 |
| - been autowritten.""" |
302 |
| - self._transmogrify() |
303 |
| - with self._spi as spi: |
304 |
| - # write out special byte sequence surrounded by RESET |
305 |
| - # leading RESET needed for cases where MOSI rests HI |
306 |
| - spi.write(self.RESET + self.spibuf + self.RESET) |
307 |
| - |
308 |
| - def _transmogrify(self): |
309 |
| - """Turn every BIT of buf into a special BYTE pattern.""" |
310 |
| - k = 0 |
311 |
| - for byte in self.buf: |
312 |
| - byte = int(byte * self.brightness) |
313 |
| - # MSB first |
314 |
| - for i in range(7, -1, -1): |
315 |
| - if byte >> i & 0x01: |
316 |
| - self.spibuf[k] = 0b11110000 # A NeoPixel 1 bit |
317 |
| - else: |
318 |
| - self.spibuf[k] = 0b11000000 # A NeoPixel 0 bit |
319 |
| - k += 1 |
0 commit comments