← Back to Website

SIGNAL FORWARDER

Multi-Protocol Signal Router for Physical Computing

THE ARCHITECTURE

Signal Forwarder is a cross-platform desktop application that discovers, captures, and routes live signals: MIDI, OSC, Art-Net/DMX, and audio levels, over Bluetooth Low Energy (BLE) to ESP32 microcontrollers and other network endpoints. Use it to trigger physical actuators, haptics, and lights directly from VR headsets, instruments, DAWs, or live audio.

SIGNAL SOURCE
(MIDI / OSC / DMX / Audio)
♦ ───►
SIGNAL FORWARDER
(Routing Matrix)
♦ ───►
ESP32 / ENDPOINT
(BLE / Network)
Signal Forwarder Dashboard Screenshot

The Signal Forwarder dashboard: MIDI inputs, BLE control, signal routing matrix, and simulator.

DOWNLOAD

Windows: Download and double-click SignalForwarder.exe. Fully standalone; no Python needed.
♦ WINDOWS (.EXE) ♦ ♦ SOURCE CODE ♦

macOS

Open Terminal and paste this command:

curl -fsSL https://dillonsimeone.com/MiniProjects/SignalForwarder/install.sh | bash
What it does: Downloads the source code to ~/SignalForwarder/ (your home folder), creates a Python virtual environment, installs all dependencies, and launches the app. Requires Python 3.10+ (install via Homebrew: brew install python).
To run again: The installer creates a SignalForwarder.command file inside ~/SignalForwarder/. Double-click it in Finder to relaunch. No Terminal needed. You can also drag it to your Dock for quick access.

Prefer a downloadable file? Download SignalForwarder.command (may require chmod +x and clearing the quarantine flag).

I. THE HARDWARE

The companion ESP32-C3 Supermini firmware advertises over BLE and accepts PWM, MIDI note, and binary control commands in real time.

BLE Auto-Discovery: The ESP32 advertises as SignalForwarderESP32 with a custom Service UUID. Signal Forwarder highlights it with a green tint in the scan list.
Dynamic Pin Config: The device stores a JSON configuration in flash memory. Read and write pin mappings (GPIO, PWM frequency, resolution) directly from the app's config editor panel.
Binary Control Protocol: The control characteristic accepts low-latency binary packets: [0x01, pin, pwm_val] for instant PWM writes, or [0x02, pin, note, velocity, dur_hi, dur_lo] for timed note-on/off events.
Wiring: Connect a MOSFET gate to GPIO 1 with a noodle LED on the drain. The default config drives PWM at 5000 Hz / 8-bit resolution.
♦ ESP32 FIRMWARE (PlatformIO) ♦

II. THE SIGNAL ROUTER

The desktop app discovers all available signal sources and output targets, then lets you wire them together in a visual routing matrix.

Input Sources: MIDI ports (auto-detected), OSC senders (discovered on the network), Art-Net/DMX nodes, audio capture devices (microphone / line-in RMS), and a built-in multi-protocol signal simulator.
Output Targets: Connected ESP32 BLE devices, custom OSC endpoints (IP:Port), and discovered network clients. The dropdown only shows targets that are actually online and reachable.
Link Source → Target: Select a source signal and an output target, then click Link Source to Target. Toggle links on/off or delete them. All routes persist across app restarts.
Wildcards: Use All MIDI Inputs, All OSC Senders, or All DMX Senders to catch every signal of that protocol from any device.

III. TESTING & SIMULATION

Use the built-in Signal Simulator to test your routing and hardware without needing external sources.

SIMULATOR MODES

  1. MIDI Note: Set note number (0–127), velocity (0–127), and duration (ms). Default: Note 60, Velocity 50, 500ms.
  2. PWM Raw GPIO: Send a raw pin + value (0–255) command.
  3. OSC Packet: Specify an OSC path and float value.
  4. DMX (Art-Net): Set a DMX channel and level.

WORKFLOW

  • Ping Once: Sends a single simulated signal through the routing matrix.
  • Auto-Ping (1s): Continuously sends signals once per second. Leave it running while configuring hardware until the LED starts responding.
  • Important: Simulated signals only reach devices if you link Simulated Signal / Simulator to a target in the routing matrix. No hardcoded shortcuts.

IV. BRIDGING THE VR GAP

To integrate physical LEDs or haptics with your virtual instruments in Patchworld:

PATCHWORLD SETUP

  1. Create an execute block or sound-trigger node.
  2. Add a port_out 3330 action node.
  3. Direct the payload to your computer's local IP address.
  4. Bind the action to an interactive object like a virtual drum or button.

ADDRESS MAPPINGS

  • Toggle: Flip the pin state on each trigger. Perfect for room lamps.
  • Pulse: Quick pulse (e.g., 50ms) to actuate relays or solenoids.
  • PWM Fader: Maps 0.0–1.0 float values to LED brightness or motor speed.
♦ ♦ ♦
"The transition from virtual gestures to physical illumination completes the loop of spatial presence."
Signal Forwarder Integration Guide