Observability
Remora is a simple pseudo animation language that works as a companion to ORCΛ receiving UDP short instructions and sending animations to addressable LED stripes. This animations run entirely in the ESP32 controller and are initially aimed to be short so they can be triggered by Orca sequencer bangs.
Starting on Dec. 2019, the Remora project has been rebranded as Remora udpx, since now it supports also the Pixels protocol when it receives a udpx push. Any message that is>9 bytes will be interpreted as an animation frame. That means it can also receive video frames from open source udpx-app. You can simply install the udpx client from the Play store.
The beat detection is enabled by default but you can also control it with UDP short messages sending B1 to enable it or B0 to disable.
If you have any MIDI instruments then you might be interested in checking out Remora-Matrix where we are also proposing an MIDI to UDP middleware or a MIDI-Serial version to interact with music and RGB Led Matrixes.
As a partner project Remora Matrix uses MIDI to trigger geometrical drawings in RGB Led matrixes using FastLED.
Starting in December 2019 all the configuration in the master branches of the udpx Firmware line we create will be over Bluetooth. If you want to take advantage of this fast setup, there are detailed instructions in udpx repository. Please install one of this Applications in any Android device:
The benefit of using udpx is that it has Bluetooth WiFi configuration and also multicast DNS discovery, so you can discover the IP address after some seconds connected. The benefit of ESP32-WiFi-BLE is that it let's you setup 2 access points, in case you have a show and need to use your mobile Hotspot. In a nutshell:
That's it, if your WiFi name and password match you should be connected you get 1 GREEN led indicating you got an IP address. If the credentials are wrong or can't connect your first pixel will shine RED Have more devices? Just go back to point 2 and set up different controllers. You can also check this short video to get an idea of how to set it up with ORCΛ
Please note, if you want to use mDNS discovery for any other Firmware, follow this naming standard like we do here: SERVICE_PORT If that's the multicast host name, then you will be able to set both IP and Port in one click.
Credits are due: All logic doing the Firmware part is from Bernd Giesecke, since I followed his great example, to make Remora configurable per Bluetooth serial.
We took this decision since we find the Bluetooth way a much more standard way to configure IoT devices. Specially ESP32 that has BLE and Bluetooth serial included, should be in our philosophy the way to set fast things up and start using your controller. We refuse to keep on forcing people to connect to an access point to set up WiFi specially if you use your mobile phone as an access point.
If you want to test this fast using Android to send UDP messages, just download and install the udpx app from Play store: udpx esp32
This is updated at least once a month so maybe won't have the latest features. Luckycloud cloudstorage hosts the latest APK builds, if you want to check latest unstable features first uninstall the App, and download:
UDP will be hearing in port 49161 so you can send short instructions from Orca or any other program you desire. This project is mainly headed to receive short UDP commands from ORCΛ but on master and develop branches also udpx Pixel library coded by IoTPanic is included. So if the UDP payload is major than 9 pixels it will trigger the binary protocol. udpx video Demo
Please read the documentation of the UDPX Repository if you want to understand more about the communications protocol.
ping SERVICE_PORT.local
And see if the ESP32 responds to mark it's IP Address. That's how you can hit an animation from any device connected to the same network, sending an UDP message to that IP and default port 49161. Note that for windows you need to install Bonjour to resolve local mDNS to their IP Addresses. If mDns discovery it's not an option, then connect the ESP32 board to the PC and open Serial debbugging in port 115200 on Arduino or Plataformio. Reset the board and you can see the IP Address as soon it connects to WiFi.
If you use the UDP redirector described in this section Orca can still send UDP messages to localhost and can be redirected by this background Nodejs script, enabling also the possibility to send to multiple devices from a single point. If you want to use only one, then you can just update the IP to your controller IP using the ip: command from ORCΛ
Check further details on how this works on this blog post at fasani.de
If you want to have a bigger panel, you can of course use any Led Matrix, we suggest the brand BTF-Lighting since they have awesome 22x22 or 44x11 matrix at affordable pricing. That and soldiering 3 cables plus additing an optional 220v to 5VDC converter will do it. Usually the data cable is on the middle, so soldiering 5V positive, ground and data to GPIO19 in the ESP32 is the only electronic schema that you will need to make it work. Note: Check in others stores if you get a better price, in total should be not more than 19 € to put a one meter Stripe + Controller together.
[0-35 HSL Color angle] is optional and multiplied per 10 to give Hue angle. If it's not sent as default will play last color. Please check the base 36 table to understand how to go beyond 9 for duration and hue values. Default initial color is red.
1[ms*100][0-35 A Hue][0-35 B] Launch animation left with color A to B ex. 190O will take 900ms with one corner in red to blue
3[ms*100][0-35 A Hue][0-35 B] Launch animation right with color B to A ex. 350O will take 500ms with one corner in red to blue
4[ms*100][0-35 Hue] Launch animation left ex. 490 will take 900ms with red 4990 900ms with green (Hue 90°)
5[ms*100][0-35 Hue] Launch 2 chaser animations left to right and right to left
6[ms duration *100][0-35 HSL Color angle] Launch animation right ex. 610 will take 100ms with color red 69O 900ms with color blue (Hue 240° since O is 240) 69C same but with color 120° green
7[ms*100][0-35 Hue] Makes noise (random on/off) all along the stripe
8[ms*100][0-35 Hue] Turn all to desired Hue color and fade to black dissapearing on the center
9[ms*50] Short white flash
0[ms*100][Note:AG or ag][0-35 Hue] Divides the Lenght of the stripe in 7 and simulates the note being played. Ex. 02A0 will play an A note for 200 ms in red color (Hue 0)
x[coordinate] Light only one Led to last color and leave it on. Ex. ;x1 will light the first led on the stripe
X[coordinate] Light only one Led and fade in 100ms to black
To open a detailed list of Orca examples please check docs/Remora-commands.orca or check the preview and video in Patchstorage
Switch colors without doing any animation
Experimental and not thoughfully tested. Useful if you want to keep different animations running but trigger the colors universally.
r Switch color to red
b Switch color to green
g Switch color to blue
v Switch color to violet
y Switch color to yellow
w Switch color to white
In this branch we will emulate Orca's 36 increments. Operators using numeric values will typically also operate on letters and convert them into values as per the following table. This will be used for the color angle of Hue. For example N will represent 24*10=240 (blue)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
C | D | E | F | G | H | I | J | K | L | M | N |
12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
O | P | Q | R | S | T | U | V | W | X | Y | Z |
24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
Change directory to extras. Run:
nodejs udproxy.js
Configure your Id and IP combinations in ip-config.json
{
"1" : "192.168.0.2",
"2" : "192.168.0.3"
}
From Orca: Prepend your animations using this one character to lookup the IP Ex. ;152 Will lookup IP with id 1 and redirect the rest of the message (52) to 192.168.0.2 This will enable to run multiple ID stripes using a single IP address as a central point.
Testing this firmware after upload
If you find a bug please make a git issue explaining how to reproduce it. For any other support please send mention me in twitter and I will add you as a contact so you can send me a private message.
Please feel free to fork this and make it yours adding new animation ideas. Pull requests are welcome!
If you like this Firmware please consider becoming a sponsor where you can donate as little as 2 u$ per month. Just click on: ❤ Sponsor on the top right
♢ For cryptocurrency users is also possible to help this project transferring Ethereum:
0x68cEAB84F33776a7Fac977B2Bdc0D50933344086
We are thankful for the support and contributions so far! Every small quantity of digital gold helps to spend more time giving support and developing further this projects.