Addressable RGB LED Strip Controller (The Lantern Project)

by Northstrix in Circuits > Microcontrollers

2054 Views, 20 Favorites, 0 Comments

Addressable RGB LED Strip Controller (The Lantern Project)

IMG_20230226_124702.jpg

The lantern project is an ESP-based addressable RGB LED strip controller. It consists of two ESPs. ESP32 serves as a remote, and ESP8266 is the receiver that drives the addressable RGB LED strip. The Lantern project offers its users 32 different modes, 14 lock screens, and a basic level of security (at least it prevents separate transmitter-receiver pairs from interfering with one another).


Before you continue reading this tutorial, let me make one thing clear. I did not make any effects demonstrated in this tutorial. I took them all from here. All effects demonstrated in this tutorial are the property of their respective owners.

And by the way, if you have any questions about the lantern project, don't hesitate to ask them in the comment section.

Supplies

Supplies for the transmitter:

  • ESP32 x1;
  • 1.77 Inch TFT LCD with ST7735 x1;
  • 4x4 Keypad x1;
  • 10µF capacitor x1 *optional.


Supplies for the receiver:

  • ESP8266 x1;
  • 580 Ohm resistor x1;
  • WS2812 LEDs x(as much as you need).

Install Drivers and Configure Arduino IDE *Optional

If you've never flashed ESP32 or ESP8266 before you'll need to configure Arduino IDE and install drivers to upload the firmware to the boards, you can find drivers here:

CP210x driver for ESP32: https://www.silabs.com/developers/usb-to-uart-brid...

CH340 driver for ESP8266: https://sparks.gogo.co.nz/ch340.html

In case you don't have Arduino IDE, you can download it here: https://www.arduino.cc/en/software

Configuring IDE isn't a part of this tutorial, you can read about it here:

ESP32: https://randomnerdtutorials.com/installing-the-esp...

ESP8266: https://randomnerdtutorials.com/how-to-install-esp...

Download Firmware

You can download the firmware for Lantern from one of these sources:

SourceForge: https://sourceforge.net/projects/the-lantern-project/

OSDN: https://osdn.net/projects/lantern/

GitHub: https://github.com/Northstrix/Lantern

If you just need the firmware for the lantern alongside the RNG, then I would advise you to download a 0.5 MB archive either from SourceForge or OSDN.

But if you need the firmware for the lantern alongside the extra code, photos, GIFs, and diagrams, in that case, I would advise you to download the 79.1 MB archive from GitHub.

Download and Install the Libraries

Adafruit-GFX-Library: https://github.com/adafruit/Adafruit-GFX-Library

Adafruit_BusIO: https://github.com/adafruit/Adafruit_BusIO

Adafruit-ST7735-Library: https://github.com/adafruit/Adafruit-ST7735-Library

Keypad: https://github.com/Chris--A/Keypad

FastLED: https://github.com/FastLED/FastLED

The process of unpacking libraries is typical. You can unpack the content of the archive into the folder: ...\Arduino\libraries. Or open the Arduino IDE, click to the Sketch -> Include Library -> Add .ZIP Library... and select every archive with libraries.

The "serpent by peterferrie" library is already located in the folders with the firmware. You don't need to install it.

Install ESP32 Filesystem Uploader

FNR7RGFLDSTRGLA.png

The primary purpose of the ESP32 Filesystem Uploader is to let you upload files into ESP's filesystem. In this tutorial, the purpose of this tool is to upload an empty SPIFFS image into ESP.

Download the file called ESP32FS-1.0.zip from https://github.com/me-no-dev/arduino-esp32fs-plugin/releases/

And then extract the content of the archive into the "...\Arduino\Tools\" folder.

After that, restart the Arduino IDE.

Switch the Partition Scheme to the "No OTA (2MB APP/2MB SPIFFS)"

partscheme.png

You have to switch the partition scheme to the "No OTA (2MB APP/2MB SPIFFS)" before you continue working with ESP32 because the firmware for the vault is too big for the default partition.

Format ESP32'S Built-In Flash Memory

format.png

Connect the ESP32 that you're going to use as a core of the vault to the computer. Click Tools -> ESP32 Sketch Data Upload. Then click Yes in the pop-up window. The program is going to format the built-in flash memory.

Some boards will flash without any problems.

Unfortunately, that's not the case for all boards. If you configured IDE correctly, installed drivers, selected the corresponding port, and still keep getting this error: A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header. Connect a 10µF capacitor to the board while flashing.

Connect the positive lead of the capacitor to the EN pin of the ESP32;

Connect the negative lead of the capacitor (usually indicated by the gray stripe) to the GND pin of the ESP32.

Don't forget to disconnect the capacitor after the board flashes.

Clear the ESP8266's EEPROM

clear eeprom.png

To ensure that Lantern will work as intended, you must clear the ESP8266's EEPROM before uploading the firmware.

To clear the EEPROM, upload the sketch from the "Clear_EEPROM" folder into the ESP8266 and reboot the board.

Generate Keys

keygen.png

To ensure that an attacker won't be able to hack lantern by simply discovering the receiver's MAC address and to prevent separate transmitter-receiver pairs from interfering with one another: it's crucial to generate the unique keys for each transmitter-receiver pair.

It's entirely up to you how to generate the keys. I can only offer you an option to do so.

I've modified one of my previous projects to work as a random number generator, the generated output seems "random enough" for me, but I haven't run any tests. So, I can't guarantee that it's random.

Use it at your own risk!

To generate the keys - launch gen.exe from the "Untested RNG" folder and click the "Generate keys for Lantern" button. The background turns from dark gray to light gray when you press that button.

Get the Receiver's MAC Address

FGBQFVFLCAJ161S.png

To get the receiver's MAC address, upload this code into the ESP8266.

#include <ESP8266WiFi.h>

void setup(){
Serial.begin(115200);
Serial.println();
Serial.println(WiFi.macAddress());
}

void loop(){

}

Then open the Serial Terminal, and reboot the board.

If done correctly, you should see the MAC address in the console.

The MAC address of this board is 5C:CF:7F:FD:85:1D

Modify the Firmware

m_tr.png
m_rec.png

Open the firmware from the "Firmware_for_transmitter" and "Firmware_for_receiver" folders.

In the "Firmware_for_transmitter" you need to replace the keys and the receiver's MAC address in the "uint8_t broadcastAddress[] = {0x5C, 0xCF, 0x7F, 0xFD, 0x85, 0x1D}; // Receiver's MAC address" line.

In the "Firmware_for_receiver" you need to replace the keys and the number of LEDs in the strip in the " #define LED_COUNT 32 // Number of LEDs in the strip" line.

Flash the Transmitter

ftr.png

Upload the firmware from the "Firmware_for_transmitter" folder into the ESP32.

Flash the Receiver

frec.png

Upload the firmware from the "Firmware_for_receiver" folder into the ESP8266.

Assemble the Transmitter

Receiver Circuit Diagram.png

Assembling the transmitter shouldn't be hard. Just connect the display and the 4x4 keypad to the ESP32, and you're ready to go.

Assemble the Receiver

Receiver Circuit Diagram.png

That should be even easier than the transmitter assembly.

Power the Receiver Up

Smooth Rainbow.png

Make sure that the power supply can provide enough current for the strip before connecting the assembled receiver to it. You can do it by multiplying the number of LEDs in the strip by 0.06. In my case, it's 0.06 x 32 = 1.92A.

And I would strongly discourage you from supplying the assembled receiver from the USB port because even the USB 3.0 port can barely supply 0.9 Amps.

Power the Transmitter Up

IMG_20230226_130826.jpg
IMG_20230226_130832.jpg
IMG_20230226_130839.jpg
IMG_20230226_130855.jpg
IMG_20230226_130913.jpg
IMG_20230226_130924.jpg
IMG_20230226_130942.jpg
IMG_20230226_130949.jpg
IMG_20230226_131015.jpg
IMG_20230226_131031.jpg
IMG_20230226_131114.jpg
IMG_20230226_131121.jpg
IMG_20230226_131143.jpg
IMG_20230226_131236.jpg

Unlike the receiver, the transmitter can be supplied even from the USB 2.0 port.

Transmitter offers you 14 lock screens. A lock screen is randomly chosen at startup.

*Credit for photos:

Austin:

Photo by MJ Tangonan on Unsplash

Dallas:

Photo by Max Fray on Unsplash

Dallas_1:

Photo by R K on Unsplash

Dallas_2:

Photo by Braden Egli on Unsplash

Dallas_3:

Photo by Erin Hervey on Unsplash

Denver:

Photo by Jakob Rosen on Unsplash

Kuwait City:

Photo by Ahmad Mohammed on Unsplash

Miami:

Image by JORGE TAPIA from Pixabay

Minneapolis:

Photo by Steijn Leijzer on Unsplash

Montreal:

Photo by Michael Beener on Unsplash

Salt Lake City:

Image by RobinSaville from Pixabay

Singapore:

Photo by Mike Enerio on Unsplash

Saint Paul:

Photo by Matt Jones on Unsplash

Tel Aviv:

Image by ran from Pixabay

Set Password

IMG_20230226_131746.jpg
IMG_20230226_131824.jpg

To use the lantern, you first need to set the password to the transmitter.

While entering the password, press the '*' key to erase the last character, and press the '#' key to set the password.

Choose Mode

IMG_20230226_131946.jpg
IMG_20230226_131959.jpg
IMG_20230226_132013.jpg
IMG_20230226_132022.jpg

Once you unlock the lantern, you get to the main menu. Press the '8' key on the 4x4 keypad to move up the menu, press the '0' key to move down the menu, and press the '#' key to set the chosen mode.

At first, I wanted to briefly describe each mode, but then I decided to show you some of the modes instead.

In steps 20 to 37, you can find GIFs with some of the modes utilized by lantern.

Set Brightness

IMG_20230226_132942.jpg
IMG_20230226_132948.jpg

By default, the brightness is set to 63 out of 255. To change the brightness, scroll down the menu, select the "Set Brightness" line, press the '#' key, enter the value for brightness in the range of 0 to 255, and press the '#' key to set the brightness. The receiver stores the value for the brightness in the non-volatile memory, which means that the receiver retains it even after the power is removed.

While entering the value for the brightness, press the '*' key to erase the last character, press the '#' key to set the brightness, and press the 'C' key to cancel.

Rainbow Fade

Rainbow Fade.gif

Rainbow Loop

Rainbow Loop.gif

Smooth Rainbow

Smooth Rainbow.gif

2PX Police Lights

2PX Police Lights.gif

Circular Police Lights

Circular Police Lights.gif

Flicker

Flicker.gif

White to Red

White To Red.gif

Color March

Color March.gif

American Carnival

American Carnival.gif

Fire

Fire.gif

Shooting Stars

Shooting Stars.gif

Emergency Strobe

Emergency Strobe.gif

Circular Run

Circular Run.gif

Jumping Red

Jumping Red.gif

Ascending Green

Ascending Green.gif

Green Ring

Green Ring.gif

Theater Chase

Theater Chase.gif

Strobing Moon

Strobing Moon.gif

Shining Moon

IMG_20230226_141000.jpg

The shining moon mode sets each LED in the strip to the maximum brightness.

I suggest you don't turn it on for long because it may damage the strip.

That's it for this tutorial.

If you like this tutorial, please share it.

Thank you for reading this tutorial.