Table of Contents

EMB8: Controlling Smart LED stripe

A Smart LED stripe (also referenced as Digital LED or NEOPIXEL) is a chain of connected LEDs, commonly RGB, but other combinations such as RGBWW (Red+Green+Blue+Warm White+Cold White) or WWA (Warm White+Cold White+Amber) exist. They are controlled with just one pin/GPIO. GPIO drives a first LED in a chain and the LED relays configuration to the next one, and so on.
The most common type of LED stripes is WS2812B (RGB). Initially LED Stripes were powered with 5V, but that limits the length of the chain up to some 1-2m (because of the voltage drop), so nowadays LED stripes powered with 12V and even 24V are getting more and more popular.

In this scenario you will learn how to control a small LED RGB Stripe, composed of 8 Smart (Digital) LEDs.

Prerequisites

Familiarise yourself with a hardware reference: this LED Stripe is controlled with a single GPIO (GPIO 34), as presented in the “Table 1: ESP32-S3 SUT Node Hardware Details” on the hardware reference page. To control a WS2812B LED stipe, we will use a library:

lib_deps = freenove/Freenove WS2812 Lib for ESP32@^1.0.5
Note, this library can also control other RGB LED stripes than WS2812B.

There are at least two ways (algorithms) to implement this task:

Suggested Readings and Knowledge Resources

Hands-on Lab Scenario

Task to be implemented

Implement a rainbow of colours flowing through the LED Stripe.

Note, do not change colours too fast, as you won't be able to observe changes via the video stream. An update once per second is usually suitable.

Start

When booking a device, ensure the LED stripe is visible in the camera.

Due to the low camera dynamics, do not use the full brightness of the LEDs: off is equivalent to 0, and the full brightness of the colour is 255 (8-bit resolution, per colour). We suggest to use up to 60 or max 100.
Because of the camera and human eye characteristics, the same numerical brightness set for one colour can bring a much different brightness experience on another, so setting up 60 to channel Red will have a different overall experienced brightness than setting 60 to channel Blue or Green.

Steps

Below, we provide a sample colour configuration that does not reflect the desired effect that should result from the exercise. It is just for instructional purposes. You need to invent how to implement a rainbow effect yourself.

Step 1

Include necessary library:

#include "Freenove_WS2812_Lib_for_ESP32.h"

Step 2

Declare configuration and a controller class:

#define WLEDS_COUNT    8
#define WLEDS_PIN     34
#define WLEDS_CHANNEL  0
 
static Freenove_ESP32_WS2812 stripe = Freenove_ESP32_WS2812(WLEDS_COUNT, WLEDS_PIN, WLEDS_CHANNEL, TYPE_GRB);

Step 3

To switch a particular LED, use the following function:

  stripe.setLedColorData(1,60,0,0); //light Red of the 2nd LED
  stripe.show(); //Writes colours to the LED stripe

Parameters are: setLedColorData(int index, u8 r, u8 g, u8 b);.

Note that the index is 0-based, so in the case of our device, valid indexes are 0…7.

If you want to set all LEDs in the stripe to the same colour, there is a handy function: setAllLedsColorData(u8 r, u8 g, u8 b);.
Remember to use the show(); function afterwards.

Result validation

Observe the flow of the colours via the stripe.

FAQ

I cannot see the colour via the video camera - everything looks white…: Try to lower the LED's brightness.

Project information


This Intellectual Output was implemented under the Erasmus+ KA2.
Project IOT-OPEN.EU Reloaded – Education-based strengthening of the European universities, companies and labour force in the global IoT market.
Project number: 2022-1-PL01-KA220-HED-000085090.

Erasmus+ Disclaimer
This project has been funded with support from the European Commission.
This publication reflects the views of only the author, and the Commission cannot be held responsible for any use that may be made of the information contained therein.

Copyright Notice
This content was created by the IOT-OPEN.EU Reloaded consortium, 2022,2024.
The content is Copyrighted and distributed under CC BY-NC Creative Commons Licence, free for Non-Commercial use.