From 96d9390f5ec5073a03b0a6336e016aaed0b8de92 Mon Sep 17 00:00:00 2001 From: Ian Wakely Date: Sun, 14 Jan 2024 23:01:25 -0500 Subject: [PATCH] boards: shields: Adding Adafruit 5x5 RGB BFF This is a 5x5 grid of WS2812 RGB LEDs. Signed-off-by: Ian Wakely --- .../Kconfig.defconfig | 4 + .../adafruit_neopixel_grid_bff/Kconfig.shield | 5 ++ .../adafruit_neopixel_grid_bff.overlay | 12 +++ .../adafruit_neopixel_grid_bff_display.conf | 2 + ...adafruit_neopixel_grid_bff_display.overlay | 17 +++++ .../boards/adafruit_qt_py_rp2040.conf | 1 + .../boards/adafruit_qt_py_rp2040.overlay | 37 ++++++++++ .../doc/adafruit_neopixel_grid_bff.jpg | Bin 0 -> 43460 bytes .../adafruit_neopixel_grid_bff/doc/index.rst | 69 ++++++++++++++++++ 9 files changed, 147 insertions(+) create mode 100644 boards/shields/adafruit_neopixel_grid_bff/Kconfig.defconfig create mode 100644 boards/shields/adafruit_neopixel_grid_bff/Kconfig.shield create mode 100644 boards/shields/adafruit_neopixel_grid_bff/adafruit_neopixel_grid_bff.overlay create mode 100644 boards/shields/adafruit_neopixel_grid_bff/adafruit_neopixel_grid_bff_display.conf create mode 100644 boards/shields/adafruit_neopixel_grid_bff/adafruit_neopixel_grid_bff_display.overlay create mode 100644 boards/shields/adafruit_neopixel_grid_bff/boards/adafruit_qt_py_rp2040.conf create mode 100644 boards/shields/adafruit_neopixel_grid_bff/boards/adafruit_qt_py_rp2040.overlay create mode 100644 boards/shields/adafruit_neopixel_grid_bff/doc/adafruit_neopixel_grid_bff.jpg create mode 100644 boards/shields/adafruit_neopixel_grid_bff/doc/index.rst diff --git a/boards/shields/adafruit_neopixel_grid_bff/Kconfig.defconfig b/boards/shields/adafruit_neopixel_grid_bff/Kconfig.defconfig new file mode 100644 index 0000000000..9557263064 --- /dev/null +++ b/boards/shields/adafruit_neopixel_grid_bff/Kconfig.defconfig @@ -0,0 +1,4 @@ +# Copyright (c) 2024 Ian Wakely +# SPDX-License-Identifier: Apache-2.0 + +# Intentionally left blank. diff --git a/boards/shields/adafruit_neopixel_grid_bff/Kconfig.shield b/boards/shields/adafruit_neopixel_grid_bff/Kconfig.shield new file mode 100644 index 0000000000..9197376275 --- /dev/null +++ b/boards/shields/adafruit_neopixel_grid_bff/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2024 Ian Wakely +# SPDX-License-Identifier: Apache-2.0 + +config SHIELD_ADAFRUIT_NEOPIXEL_GRID_BFF + def_bool $(shields_list_contains,adafruit_neopixel_grid_bff) diff --git a/boards/shields/adafruit_neopixel_grid_bff/adafruit_neopixel_grid_bff.overlay b/boards/shields/adafruit_neopixel_grid_bff/adafruit_neopixel_grid_bff.overlay new file mode 100644 index 0000000000..9a0cbfb31a --- /dev/null +++ b/boards/shields/adafruit_neopixel_grid_bff/adafruit_neopixel_grid_bff.overlay @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2024, Ian Wakely + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +/ { + aliases { + led-strip = &bff_led_strip; + }; +}; diff --git a/boards/shields/adafruit_neopixel_grid_bff/adafruit_neopixel_grid_bff_display.conf b/boards/shields/adafruit_neopixel_grid_bff/adafruit_neopixel_grid_bff_display.conf new file mode 100644 index 0000000000..889bdb8188 --- /dev/null +++ b/boards/shields/adafruit_neopixel_grid_bff/adafruit_neopixel_grid_bff_display.conf @@ -0,0 +1,2 @@ +CONFIG_LED_STRIP=y +CONFIG_WS2812_STRIP=y diff --git a/boards/shields/adafruit_neopixel_grid_bff/adafruit_neopixel_grid_bff_display.overlay b/boards/shields/adafruit_neopixel_grid_bff/adafruit_neopixel_grid_bff_display.overlay new file mode 100644 index 0000000000..fbb7b9bcec --- /dev/null +++ b/boards/shields/adafruit_neopixel_grid_bff/adafruit_neopixel_grid_bff_display.overlay @@ -0,0 +1,17 @@ +#include "adafruit_neopixel_grid_bff.overlay" + +/ { + chosen { + zephyr,display = &bff_led_matrix; + }; + + bff_led_matrix: bff-led-matrix { + compatible = "led-strip-matrix"; + status = "okay"; + led-strips = <&bff_led_strip>; + width = <5>; + height = <5>; + start-from-right; + circulative; + }; +}; diff --git a/boards/shields/adafruit_neopixel_grid_bff/boards/adafruit_qt_py_rp2040.conf b/boards/shields/adafruit_neopixel_grid_bff/boards/adafruit_qt_py_rp2040.conf new file mode 100644 index 0000000000..9ccb06fb7b --- /dev/null +++ b/boards/shields/adafruit_neopixel_grid_bff/boards/adafruit_qt_py_rp2040.conf @@ -0,0 +1 @@ +CONFIG_WS2812_STRIP_RPI_PICO_PIO=y diff --git a/boards/shields/adafruit_neopixel_grid_bff/boards/adafruit_qt_py_rp2040.overlay b/boards/shields/adafruit_neopixel_grid_bff/boards/adafruit_qt_py_rp2040.overlay new file mode 100644 index 0000000000..2b2aad5b74 --- /dev/null +++ b/boards/shields/adafruit_neopixel_grid_bff/boards/adafruit_qt_py_rp2040.overlay @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2024, Ian Wakely + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +&pinctrl { + pinctrl_bff_ws2812: pinctrl_bff_ws2812 { + ws2812 { + pinmux = ; + }; + }; +}; + +&pio0 { + status = "okay"; + + bff-ws2812 { + compatible = "worldsemi,ws2812-rpi_pico-pio"; + status = "okay"; + pinctrl-0 = <&pinctrl_bff_ws2812>; + pinctrl-names = "default"; + bit-waveform = <3>, <3>, <4>; + + bff_led_strip: bff_led_strip { + status = "okay"; + gpios = <&xiao_d 3 GPIO_ACTIVE_HIGH>; + chain-length = <25>; + color-mapping = ; + reset-delay = <280>; + frequency = <800000>; + }; + }; +}; diff --git a/boards/shields/adafruit_neopixel_grid_bff/doc/adafruit_neopixel_grid_bff.jpg b/boards/shields/adafruit_neopixel_grid_bff/doc/adafruit_neopixel_grid_bff.jpg new file mode 100644 index 0000000000000000000000000000000000000000..babd176c8c7620e264e43aca13ed45e82791816a GIT binary patch literal 43460 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�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 F|Jlw4pdSDL literal 0 HcmV?d00001 diff --git a/boards/shields/adafruit_neopixel_grid_bff/doc/index.rst b/boards/shields/adafruit_neopixel_grid_bff/doc/index.rst new file mode 100644 index 0000000000..f4648e9b02 --- /dev/null +++ b/boards/shields/adafruit_neopixel_grid_bff/doc/index.rst @@ -0,0 +1,69 @@ +.. _adafruit_neopixel_grid_bff: + +Adafruit 5x5 NeoPixel Grid BFF +############################## + +Overview +******** + +The `Adafruit 5x5 NeoPixel Grid BFF`_ is a 5x5 grid of WS2812B RGB LEDs, +which Adafruit refers to as "neopixels". The BFF series of shields are +designed to be compatible with any Adafruit Qt Py or Seeed Studio Xiao +board. + +.. figure:: adafruit_neopixel_grid_bff.jpg + :align: center + :alt: Adafruit 5x5 NeoPixel Grid BFF + + Adafruit 5x5 NeoPixel Grid BFF (Credit: Adafruit) + +Pin Assignments +=============== + ++-----------------------+---------------------------------------------+ +| Shield Connector Pin | Function | ++=======================+=============================================+ +| A3 | WS2812B driver pin [1]_ | ++-----------------------+---------------------------------------------+ + +.. [1] This is the default pin when the board is delivered as is by Adafruit. + It can be changed away from the default using the onboard solder jumpers, + but this shield will no longer work without a matching device tree update. + +Programming +*********** + +LED Strip Example +================= + +Set ``-DSHIELD=adafruit_neopixel_grid_bff`` when you invoke ``west build``. For example: + +.. zephyr-app-commands:: + :zephyr-app: samples/drivers/led_ws2812 + :board: adafruit_qt_py_rp2040 + :shield: adafruit_neopixel_grid_bff + :goals: build + +LED Display Matrix Example +========================== + +.. warning:: + + When using this example, all of the LEDs will be set to their maximum + brightness. Having all of the LEDs on at once can cause the PCB to overheat + or draw too much current from any on-board voltage regulators. + Adafruit does provide solder pads for your own power supply on the + underside of the BFF for this reason. It is not required, but is strongly + recommended if all of the LEDs are fully on for any significant amount of + time. + +Set ``-DSHIELD=adafruit_neopixel_grid_bff_display`` when you invoke ``west build``. For example: + +.. zephyr-app-commands:: + :zephyr-app: samples/drivers/display + :board: adafruit_qt_py_rp2040 + :shield: adafruit_neopixel_grid_bff_display + :goals: build + +.. _Adafruit 5x5 NeoPixel Grid BFF: + https://learn.adafruit.com/adafruit-5x5-neopixel-grid-bff/