Remote WS2812b LED Display for Control Over ESP-NOW

by tekyinblack in Circuits > Microcontrollers

38 Views, 0 Favorites, 0 Comments

Remote WS2812b LED Display for Control Over ESP-NOW

IMG_2798.JPEG
Comms description.png

The purpose of this instructable is to make a reusable LED display that can be controlled remotely over Wifi to be updated by a wide range of information sources but that the user cannot see. This is just the display idea, easy to make and program but with a range of uses as wide as the builder wants.

The housing has been 3D printed for use in a home environment and made such that the display can either be through the casing or reflected off a rear wall.

The idea uses the ESP-NOW functionality of Espressif microcontrollers to easily transmit information over it's own Wifi system described in overview in the picture. The central controller receives updates from other information sources based on Espressif microcontrollers with Wifi, which is most models of ESP8266 and ESP32. The information is only display instructions to the central controller. This allows the display to be added to existing projects easily as all display components are self contained in this unit.

The LED display consists of a strip of WS2812b neopixel LEDs in a plastic shroud controlled by an ESP-01S microcontroller, really an ESP8266 in minimalist configuration, and powered over an USB-C connection.

Being controlled over Wifi, the display can be placed somewhere convenient, such as indoors, elsewhere in a home, remote from where the information source is.

This is really an idea for use in many other projects, but a demonstration application is described below.

It's programmed in Micropython using the Thonny IDE which makes it suitable for use with many current STEM education projects as a reusable display.

If all the components are available, it can be built in an afternoon and easily made into a kit.

Code for the project is held on github here

Supplies

strip.JPEG
IMG_2784.JPEG
IMG_2785.JPEG
IMG_2786.JPEG
IMG_2787.JPEG
DHT11-ESP01.png

WS2812b LED strip - user to choose the number of LEDs and shape

ESP-01S microcontroller - this could be any ESP8266 MCU but the ESP-01S is small and compact.

ESP-01 programmer

7333 LDO 3.3V regulator

10u capacitor

10k resistor

2x4 way socket if reusability is important

USB-C socket

stripboard - a matrix of strips three holes long was used, see picture

Optional 3D printed housing - or whatever suits. This instructable covers only one strip of 12 but multiple strips could be configured and a housing built for all of them.

Make the LED Strip Holder

This is optional but if making all the project in an afternoon is the place to start as the rest of the project can be constructed while the holder is being made.

The holder was designed on TinkerCAD and a link is attached. Also attached is an .stl file should that be preferred.

The LED strip holder described here is 3D printed but isn't essential and the LED strip used also came with a sticky strip on the back meaning it could be attached to any suitable surface.

The 3D printed holder was partly made to create a 'stick' display which would be self supporting but also to shield the observers eyes as the WS2812 LEDs can be very bright.

Two versions are presented here, one as a standalone display, and one with a channel for a return wire so that multiple display strips can be joined together an run from one controller.

The Controller Circuit

Display strip_bb.png
Display strip string.png

The controller circuit is mostly a power supply for the ESP01 microcontroller. The power supply is 5V supplied from a USB socket, which is fed to a 7333 LDO voltage regulator outputting 3.3V for the ESP01. A 10k resistor is used to enable the controller and is wired to the 3.3V supply as well.

The 5V supply also feeds the WS2812b LED string directly as this is expected to be the biggest power consumer in the unit.

The circuits described are based on a string of 12 WS2812b LEDs but this can be extended to many more if power supplies permit and could be just one string or more than two if the control program is updated, see the actual program for instructions. It is expected that each LED string will be the same length though.

An idea connecting additional display strings using USB-C connectors is shown in the diagram.

Wiring the Controller

display controller 2.png
IMG_2744.JPEG
IMG_2788.JPEG
IMG_2789.JPEG
IMG_2790.JPEG
IMG_2791.JPEG
IMG_2792.JPEG
IMG_2793.JPEG

The controller circuit is built on a small piece of stripboard which has sockets fitted for the power supply, to connect to the LED string, and a socket to daisy chain two strings together. There's probably enough room to add another daisy chain socket if required.

Wiring a LED Strip

IMG_2795.JPEG

Wiring Additional Displays

Display strip string.png

Multiple displays can be wired together using USB-C cables. These carry the power for the LED string as well as the control signal.

A small piece of stripboard is used to connect the LED string and sockets together. A wire is connected from the end of the LED string to the data connection of the output USB-C socket.

Loading the ESP01 With Code

Code for this project is held on github here.

It is recommended that Thonny, downloaded from here, is used to load Micropython onto the controllers and to edit the project code.

Micropython for ESP-01 can be obtained automatically by Thonny when loading, or can be downloaded directly from the Micropython website here.

Reliable instructions for loading Micropython onto Espressif controllers in available on Instructables or from Random Nerd Tutorials here.

Demonstration Display

The demonstration uses the output from a readily available DHT11/ESP01 temperature and humidity combination module.

This module is sold configured to display the temperature and humidity on a web page hosted by the ESP01. For the demonstration, the ESP01 is loaded with micropython and a program to send the information to the display controller. This can be used to say display the temperature and humidity outside where it may be inconvenient to see. A second module can be configured to also send data, and this could instead be configured to display the inside temperature via the same controller thus creating an inside/outside temperature display.