install fastled, install esp8266 support in your arduino IDE, be lazy :tada:
nothing fancy, just a modified fastled demoreel
same code as the rgb strip, just change this #define to
~~~~
#define LED_TYPE TM1809
~~~~
chicken tubes are on display in the space they have their own 12v powerpack.
## Lightbrellas
This is basically an esp8266 acting as a UDP -> UART bridge towards a bluepill
used a bluepill cause i needed 15 pwm channels, we had some in the hardware selfvending cabinet. i like STM32, byte me :p
ESP code :
~~~~
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
const int ledPin = LED_BUILTIN;
char ssid[] = "HSBXL-IoT"; //SSID of your Wi-Fi router
char pass[] = "unguessable_password"; //Password of your Wi-Fi router
byte packetBuffer[16];
const long interval = 1000;
volatile int ledState = LOW;
WiFiUDP Udp;
volatile unsigned long previousMillis = 0; // will store last time LED was updated
volatile unsigned long currentMillis;
char incomingPacket[255];
void connectAP(){
Serial.println();
Serial.println();
Serial.print("Connecting to...");
Serial.println(ssid);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Wi-Fi connected successfully");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println(WiFi.subnetMask());
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
connectAP();
digitalWrite(ledPin, ledState);
Udp.begin(1234);
}
void loop() {
// put your main code here, to run repeatedly:
//
currentMillis = millis();
int packetSize = Udp.parsePacket();
if (packetSize)
{
int len = Udp.read(incomingPacket, 255);
if (len > 0)
{
incomingPacket[len] = 0;
if(incomingPacket[0] =='b'){
Serial.write("b");
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite(ledPin, ledState);
}
}
}
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
int s = WiFi.status();
if( (s == WL_DISCONNECTED) || (s == WL_CONNECTION_LOST) ){
// WiFi.stop();
connectAP();
}
}
delay(5);
}
~~~~
bluepillcode
[here](https://github.com/Jegeva/bytelights)
program with a recycled stm32 devboard or a blackmagic or a cheap stlink clone...
connections :

the 5 umbrellas plug in the cross, yeah have 1 power (green cable) 1 ground (brown cable) that cannot be mixed thanks to male femal connector.
The long multicolored ribbon goes to the logic board.

umbreallas calbes are numbers 1 to 5, 1 is in the center and after that just go in order.
on the logic board 1 goes to the side without the black cable (ground , not used afte rdev, was just for my scope) then 2,3,4 and 5 last pin is NEXT to the black cable.

plug in the wall :p
## Bass detection circuit
Thanks and Kudos to LenarT for the help with the opamp design, i suck at analog
It have an esp8266 with an interrup attached on a pin, waits for it, broadcasts an UDP bass packet, other stuff blinks
Arduino code
~~~~
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
IPAddress local_IP(192,168,4,1);
IPAddress gateway(192,168,4,254);
IPAddress subnet(255,255,255,0);
const int ledPin = LED_BUILTIN;// the number of the LED pin
const int interpin = 15;
// Variables will change:
volatile int ledState = LOW; // ledState used to set the LED
// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
volatile unsigned long previousMillis = 0; // will store last time LED was updated