From 28758a9b853062bb7620ec76379e048c03c53862 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Mon, 11 Sep 2023 12:20:15 +1000 Subject: [PATCH] SPI RGB LED component description (#3147) * APA102 description * Add note about miso * Rename apa102 to spi_rgb_led * Rename to spi_led_strip * Update TOC, add reference to SPI LED Strip in Fastled doc. * More cross-refs * Add image * Resize image * Format. * Formatting... --- components/light/fastled.rst | 5 ++- components/light/images/apa102.jpg | Bin 0 -> 30033 bytes components/light/neopixelbus.rst | 3 +- components/light/spi_led_strip.rst | 68 +++++++++++++++++++++++++++++ images/apa102.jpg | Bin 0 -> 9950 bytes index.rst | 1 + 6 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 components/light/images/apa102.jpg create mode 100644 components/light/spi_led_strip.rst create mode 100644 images/apa102.jpg diff --git a/components/light/fastled.rst b/components/light/fastled.rst index 5cceb0992..41c61a060 100644 --- a/components/light/fastled.rst +++ b/components/light/fastled.rst @@ -24,7 +24,7 @@ FastLED Light FastLED does **not** work with ESP-IDF. - For addressable lights, you can use :doc:`esp32_rmt_led_strip`. + For addressable lights, you can use :doc:`esp32_rmt_led_strip` or for SPI LEDs see :doc:`spi_led_strip`.. .. _fastled-clockless: @@ -110,6 +110,8 @@ SPI The ``fastled_spi`` light platform allows you to create RGB lights in ESPHome for a :ref:`number of supported chipsets `. +See :doc:`/components/light/spi_led_strip` for an alternative component that works on ESP-IDF (and Arduino.) + SPI FastLED lights differ from the :ref:`fastled-clockless` in that they require two pins to be connected, one for a data and one for a clock signal whereas the clockless lights only need a single pin. @@ -169,6 +171,7 @@ See Also -------- - :doc:`/components/light/index` +- :doc:`/components/light/spi_led_strip` - :doc:`/components/power_supply` - :apiref:`fastled_base/fastled_light.h` - `Arduino FastLED library `__ diff --git a/components/light/images/apa102.jpg b/components/light/images/apa102.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9db00a6c9897a86af4bbc1d856a3fc19b5492873 GIT binary patch literal 30033 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 literal 0 HcmV?d00001 diff --git a/components/light/neopixelbus.rst b/components/light/neopixelbus.rst index 3eed9eff0..b5c420d26 100644 --- a/components/light/neopixelbus.rst +++ b/components/light/neopixelbus.rst @@ -9,7 +9,8 @@ NeoPixelBus Light NeoPixelBus does **not** work with ESP-IDF. - For addressable lights, you can use :doc:`esp32_rmt_led_strip`. + For clockless lights, you can use :doc:`esp32_rmt_led_strip`, and for SPI LEDs see :doc:`spi_led_strip`. + The ``neopixelbus`` light platform allows you to create RGB lights in ESPHome for an individually addressable lights like NeoPixel or WS2812. diff --git a/components/light/spi_led_strip.rst b/components/light/spi_led_strip.rst new file mode 100644 index 000000000..18f10fc26 --- /dev/null +++ b/components/light/spi_led_strip.rst @@ -0,0 +1,68 @@ +SPI LED Strip Light +=================== + +.. seo:: + :description: Instructions for setting up SPI LED RGB lights in ESPHome. + :image: ../components/light/images/apa102.jpg + +The ``spi_led_strip`` light platform drives one or more SPI interfaced RGB LEDs. These LEDs are often used in strips, where +each LED is individually addressable. This component requires an SPI interface to be configured. + +This component has been tested with APA102 LEDs and should also work with HD107 and SK9822 type LEDs, or any others +with a similar interface - SPI, 8 bits per colour and BGR ordering. + +.. figure:: images/apa102.jpg + :align: center + :width: 75.0% + +.. code-block:: yaml + + # Example configuration entry + spi: + mosi_pin: GPIO3 + clk_pin: GPIO9 + + light: + - platform: spi_led_strip + num_leds: 30 + color_correct: [80%, 60%, 100%] + id: rgb_led + name: "RGB LED Strip" + data_rate: 1MHz + +Color Correction +---------------- + +It is often favourable to calibrate/correct the color produced by an LED strip light as the +perceived intensity of different colors will generally vary. This can be done by using +``color_correct`` to adjust the relative brightness of the RGB components. + +Configuration variables: +------------------------ + +- **name** (**Required**, string): The name of the light. +- **num_leds** (*Optional*, int): The number of LEDs attached. The default is 1. +- **effects** (*Optional*, list): A list of :ref:`light effects ` to use for this light. +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. +- **data_rate** (*Optional*): Set the data rate of the SPI interface to the display. One of ``80MHz``, ``40MHz``, ``20MHz``, ``10MHz``, ``5MHz``, ``2MHz``, ``1MHz`` (default), ``200kHz``, ``75kHz`` or ``1kHz``. +- All other options from :ref:`Light `. + +You may also need to configure an ``output`` GPIO pin to control power to the LEDs, depending on your hardware. The +APA102 and friends do not have a ``CS`` input, and are write-only so the SPI ``miso`` pin should not be specified. + +See Also +-------- + +.. figure:: images/rgb-detail.jpg + :align: center + :width: 75.0% + +- :doc:`/components/light/index` +- :doc:`/components/output/ledc` +- :doc:`/components/output/esp8266_pwm` +- :doc:`/components/output/pca9685` +- :doc:`/components/output/tlc59208f` +- :doc:`/components/output/my9231` +- :doc:`/components/output/sm16716` +- :apiref:`rgb/rgb_light_output.h` +- :ghedit:`Edit` diff --git a/images/apa102.jpg b/images/apa102.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30c90d3316583a8a71b485b66b10c239ee686da8 GIT binary patch literal 9950 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 literal 0 HcmV?d00001 diff --git a/index.rst b/index.rst index 354322acc..ad418e58d 100644 --- a/index.rst +++ b/index.rst @@ -547,6 +547,7 @@ Light Components FastLED Light, components/light/fastled, color_lens.svg, dark-invert NeoPixelBus Light, components/light/neopixelbus, color_lens.svg, dark-invert Light Partition, components/light/partition, color_lens.svg, dark-invert + SPI LED Strips, components/light/spi_led_strip, apa102.jpg Tuya Dimmer, components/light/tuya, tuya.png Shelly Dimmer, components/light/shelly_dimmer, shellydimmer2.jpg