The B2EMO Logic Light System is intended for Michael Baddeley B2EMO V1.
It consists of:
- Control board
- Large circular logic light
- Small circular logic light
- 3 rectangular body lights
- Small “triangular” logic panel
The control board uses an ESP32 as a brain and can therefore also be connected wirelessly to the body (currently no code available).
The Logic lights are controlled ivia a three -wire cable. Connected either via pin header or screw terminal.
Furthermore, 4 pins are available for other use.
It is controlled either via wifi, I2C or serial commands.
Also on board is a DF player that can be controlled by the ESP32 and has a lineout via 3.5mm headphone jack or pins.
Supply voltage are stable 5V









The existing print files may have to be revised or replaced with the print files linked below.
Available at shop.printed-droid.com
B2EMO Controller: User Manual & Command Reference
Welcome to the user manual for your B2EMO Controller! This system is designed to give you maximum flexibility in controlling your droid’s light and sound effects.
Basic Interaction:
- All control is handled via the Serial Monitor in the Arduino IDE.
- Ensure the baud rate in the monitor is set to 115200 and the line ending is set to Newline or Both NL & CR.
- Type commands into the input bar at the top of the Serial Monitor and press Enter to send them.
1. Basic Commands
These commands handle general system functions.
| Command | Description | Example |
help | Displays the full list of all available commands and parameters. | help |
sound <number> | Immediately plays a specific sound file. For example, the file 0003.mp3 in the /mp3 folder on the SD card is triggered with the number 3. | sound 3 |
sound random | Plays a random sound file from the /mp3 folder. | sound random |
chat <level> | Sets the “chattiness” level for how often the droid plays random sounds on its own. Levels are off, low, medium, and chatty. | chat low |
2. Controlling Light Effects
There are two primary ways to control lights: procedural effects (dynamic and configurable) and Jukebox effects (pre-scripted and fixed).
2.1. Procedural Effects (effect command)
These are dynamic effects whose behavior can be modified with parameters. The command structure is effect <name> [parameter=value] [parameter=value]....
Available Effect Names (<name>):
off,static,breathe,flicker,rainbow_cycle,cylon,core_pulse,scanning_eye,living_logic,fire,twinkle,scrolling_text,bounce_text,rainbow_text
Available Parameters ([param=value]):
speed=<ms>: Sets the speed of the animation (lower is faster).brightness=<0-255>: Sets the master brightness.r=<0-255>,g=<0-255>,b=<0-255>: Sets the color using RGB values.font=<latin|aurebesh>: Selects the alphabet for text-based effects.
Examples:
effect static r=255 g=0 b=0– Sets the eye to a static red color.effect breathe speed=3000 brightness=128– Starts a slow, dim breathing effect.effect scanning_eye r=255 g=0 b=0– Starts the red scanning eye on the front panel.effect scrolling_text font=aurebesh– Starts the “B2EMO ONLINE” marquee in Aurebesh.
2.2. Jukebox Effects (play command)
These are fixed, pre-programmed animations with a specific number. They are great for reliable, screen-accurate effects. The command is play <number>.
Key Jukebox Numbers:
play 0: Turns all effects off.play 1: Runs the full “Wakeup” sequence (this also runs automatically on startup).play 2: Activates the “Emotional Eye” mode (the canonical, flickering gold look).play 3: Activates the “Core Pulse” eye effect (outer ring dim, inner ring pulsing).play 28–play 34: Various static effects for the eye rings.play 57–play 61: Various static patterns for the logic display.
3. The Sequencer: Creating Custom Choreographies
This is the most powerful feature. You can build a sequence of steps, where each step has its own light effect, sound, and duration. These sequences are then saved permanently.
Step 1: Start Creating (sequence_create)
First, you tell the system you want to start building a new sequence and give it an ID number (from 1 to 10). This prepares a temporary “slot” in memory.
Warning: This command will erase any unsaved work on a sequence.
Command: sequence_create <id>
Example: sequence_create 5
(You are now building Sequence #5)
Step 2: Add Steps (sequence_add)
Now, you add steps one by one. This is the most complex command. The key parameters are duration (in milliseconds) and the optional sound.
Syntax: sequence_add <type> <id/name> duration=<ms> [sound=<nr>] [params...]
Example A: Adding a Jukebox Step with Sound
Let’s add Jukebox effect #2 (“Emotional Eye”) for 5 seconds, while playing sound file #4.
sequence_add jukebox 2 duration=5000 sound=4
Example B: Adding a Procedural Effect Step
Now let’s add a slow, red “breathe” effect that lasts for 10 seconds, with no sound.
sequence_add effect breathe speed=4000 r=255 g=0 b=0 duration=10000
Example C: Adding a Text Effect Step
Finally, let’s add the “bouncing text” effect in Aurebesh. For blocking effects like this, the animation determines its own length. The duration parameter is just used to tell the sequencer when to move on.
sequence_add effect bounce_text font=aurebesh duration=6000 sound=8
Step 3: Save the Sequence (sequence_save)
Once you have added all your steps, you must save the sequence. This writes it from temporary memory to the permanent EEPROM storage.
Command: sequence_save
(The ESP32 will confirm that Sequence #5 has been saved.)
Step 4: Play the Sequence (sequence_play)
You can now trigger your custom choreography at any time by using its ID.
Command: sequence_play <id>
Example: sequence_play 5
(The droid will now run the sequence we created.)
4. Full Tutorial: Creating a “Distress” Sequence
Let’s create a complete “distress” sequence in slot #7.
- Start:sequence_create 7
- Step 1: The eye quickly flashes red twice, with a siren sound (0005.mp3).sequence_add jukebox 31 duration=300 sound=5sequence_add jukebox 0 duration=200sequence_add jukebox 31 duration=300sequence_add jukebox 0 duration=500
- Step 2: The front panel shows a red scanning eye for 6 seconds while a “worried” droid sound (0006.mp3) plays.sequence_add effect scanning_eye r=255 g=0 b=0 duration=6000 sound=6
- Step 3: The animation ends by transitioning to the default “Emotional Eye” state.sequence_add jukebox 2 duration=1000
- Save:sequence_save
- Play:sequence_play 7
5. Important Notes
- SD Card: For sound to work, you must have an SD card inserted into the DFPlayer Mini module. It must contain a folder named
/mp3, and your sound files must be named with four digits, starting from 0001 (e.g.,0001.mp3,0002.mp3, etc.). - Power: The NeoPixel LEDs can draw a lot of power. Ensure your ESP32 and LED strips are powered by a sufficient power supply, not just the USB port of your computer.
