Archive | Arduino
My lantern collection
I have over 50 animated lanterns, which were made using tissue paper and various frames such as:
- Bamboo
- Grapevines
- 10 AWG wire with brazing
- Round reed
- Chicken wire
They have been on exhibition at the following venues:
- North Delta Luminary Festival
- Renfrew Stillmoon Festival
- Deer Lake Luminescent Art
- Secret Lantern Society Solstice Festival
- Maple Ridge Celebrate the Night
- Surrey Garden Light Festival
- Scouts Canada Watershed Fun Night
Click on images in the article to see an animated version. The animations are customizable via Wi-Fi.
Continue Reading →Arduino FFT – Post Processing
In using the Arduino FFT library for our ESP32 based project, we select the following sampling information:
SAMPLE_RATE = 10240
SAMPLES = 512
The reason we don’t go higher is that we just don’t need to. Mathematics says that this gives us frequency analysis up to 5120 Khz, and that’s a very high frequency to listen to.
Continue Reading →Addressable LED options for lanterns
There are several commercial and non-commercial options available to control LED displays. These range from small portable displays running on a dedicated microcontroller to large commercial ones that are controlled by custom applications running on a dedicated computer and multiple controllers. WLED is a non-comercial (open source) program and is the probably the best available for portable displays as it supports a wide variety of animations/colour palettes and can be controlled by your cell phone over WiFi. In order to make your own WLED displays, you will need a laptop/desktop and:
Continue Reading →WLED and FastLED
WLED is a relatively new platform for communicating with and animating LED’s without requiring a PC to drive them. As a FastLED afficionado, I’ve been developing my own code to communicate with several displays. The summer of 2019 was spent implementing an MQTT infrastructure that would support my FastLED sketches and after MUCH trial and error, I got it to work as shown here:
As a result of the challenges I faced, this effort took several months and I still didn’t accomplish my goal at the end.
Continue Reading →Cost of an Addressable LED Lantern Display
These links provide a rough pricing guideline for sourcing addressable LED electronic components from Lees Electornics locally (or Amazon):
- 1M of WS2812 addressable LED’s 60 led/M ($35)
- WeMOS D1 Mini ESP8266 board ($13)
- USB Powerbank ($20 varies)
- USB Programming Cable ($2.50)
- Optional wall charger ($13)
Cost of purchasing electronic components is approximately: $63.50 to $70.50 plus tax + shipping
plus tax + shipping
Lantern consumables include:
- Bamboo, grapevine, round reed
- Masking tape
- Zip ties
- Hot glue gun and glue
- White/vanilla/coloured tissue paper
- Specialty paper (tissue or mulberry)
- White glue or Mod Podge
- Optional acrylic matte finish
- Water
- Fishing line
- Table covering
Asynchronous ESP8266 based WiFi Communication with MQTT
Project:
To implement 30+ controlled portable lighting displays in an area where not all displays can communicate with each other, or a central router.
Continue Reading →Coordinating Displays with ESP8266’s and MQTT
My goal:
To be able to control multiple lanterns at the same time in order to create a coordinated display.
The Reality:
The MQTT client library I use for Arduinos (pubsubclient) is ‘blocking’ in that if your connectivity to the server is not reliable, then the display sometimes stutters and possibly stops. I’ve tried some non-blocking workarounds, but it’s not 100% reliable.
In addition, although I can control these lanterns in a lab environment, the message often doesn’t make it through to one of the 10 Arduinos I’m testing with and has to be resent. Therefore, a command for them to simultaneously reboot works maybe 1 in 5 attempts across those 10 lanterns.
As a result, I think that while controlling lanterns via wifi and MQTT is pretty good, controlling them for coordinated displays is not that reliable.
An MQTT Control Panel
This is the IoT MQTT Panel Pro layout I use for my FastLED based ‘mesh’ sketch. I’ve also got a physical control panel consisting of:
- 2 rotary encoders
- 2 potentiometers
- 4 pushbuttons

On Wiring up a New Project
I’ve been working on an interactive art project as a favour for a friend of mine that would allow you to push buttons, use rotary encoders, potentiometers and so on in order to control an animated light fixture elsewhere in the room.
These controls would allow you to change:
- Brightness
- Display mode
- Palettes
- Speed
- Toggle direction
- Toggle glitter
- and so on. . .
To do so, I’m using an ESP8266 enabled FastLED based lantern combined with an ESP32 based control panel. They’re both MQTT enabled, and I’ll be using an Android phone as the wifi hotspot and MQTT broker.
Here’s an email I sent about my progress in wiring and initial coding for the control panel:
I finished wiring up all the pins this morning and . . .
ABSOLUTELY NOTHING WORKED. Wouldn’t even upload to the ESP32. Got out the voltmeter and started measuring:
- LED was wired backwards (causing it to not upload), so I removed it temporarily.
- Some pins didn’t support internal pullup so I had to do some research and re-wiring.
- Didn’t set internal pullup correctly in the code. Found and fixed.
- Got digital pins working with basic digitalRead().
- Found an ESP32 button library, so I don’t have to worry about de-bouncing.
- Got that working with multiple buttons.
- Had to rename the analog ports and got the potentiometers working. Values were backwards, but math fixed that.
- Had previously successfully tested a rotary encoder library, so I added the code.
- One rotary encoder wasn’t working. Swapped wires, was the same encoder. Pins were OK.
- Had a rotary encoder soldering issue (solder blob). Fixed that and got both working as well.
- Soldered on a new WS2812 LED. Installed FastLED and got that working once I found a compatible pin.
- Got some ESP32 network code. It compiled.
- Got my old MQTT networking code. It compiled as well.
- Have smushed together my wifi/MQTT code with FastLED and the various inputs.
- Amazingly, it all still compiled.
Next step will be to start adding MQTT publishing functionality to each of those inputs.
So far so good. This shit takes time to do though. As <other friend> well knows, it can take a LOT of time.
In summary, things typically don’t go as expected, so it can boil down to troubleshooting techniques. Divide and conquer.
Update: The next day, I had the buttons and potentiometer working just peachy. Only problem is, that my mode selector was meant for buttons and I was trying to use a rotary encoder for that. Now have to change code for both the control panel as well as the lantern to accept the values provided by the rotary encoder. Have also got the LED on the control panel to show Red when there’s no network connectivity, Orange when it’s connected, and finally Green when both wifi and MQTT are connected.