Noureddine RAMDI / Tether Rally: WebRTC remote control for ARRMA RC cars with clever hardware emulation

Created Sat, 23 May 2026 20:41:14 +0000 Modified Sat, 23 May 2026 20:41:27 +0000

roman01la/tether-rally

Tether Rally solves a problem many RC hobbyists face: how to take a highly integrated, closed RC vehicle and drive it remotely over the internet with low latency video and controls. ARRMA RC cars come with tightly integrated ESC/receiver units that don’t expose control signals openly. Instead of hacking the car’s internals, Tether Rally uses a clever hardware workaround — an ESP32 microcontroller with a 12-bit DAC mimics the analog joystick voltages on the physical transmitter side, turning a closed system into an open one without invasive modifications.

What Tether Rally does and how it works

At its core, Tether Rally is a WebRTC-based remote control system for ARRMA RC cars, accessible through a browser interface. The system streams a 720p video feed at 60 frames per second from a Raspberry Pi Zero 2W mounted on the car, providing a live first-person view (FPV) from the car’s perspective.

The Raspberry Pi runs Python code using the aiortc library to handle low-latency WebRTC video streaming. It captures the video from an attached camera and relays it over the network. On the control side, the Pi receives driving commands over WiFi/UDP and forwards them to an ESP32 microcontroller mounted on the physical transmitter. The ESP32 uses the MCP4728 12-bit DAC to generate precise analog voltages that emulate the joystick movements, effectively fooling the car’s original ESC/receiver into responding as if a human was driving.

This separation — Raspberry Pi handling video and network relay, ESP32 handling physical joystick emulation — is a smart architectural choice. It isolates responsibilities and allows reuse of existing hardware and protocols.

Networking uses Cloudflare Workers for signaling and TURN server capabilities to handle NAT traversal, ensuring peers can connect reliably over the public internet. Access control is managed via token-based authentication, and the system includes a race management state machine to coordinate driving sessions.

Adding to the technical depth, the system supports optional sensor inputs on the car, including an inertial measurement unit (IMU) and hall effect sensors. These feed into software driving assists like traction control, stability control, ABS, and hill hold functions, enhancing the driving experience. GPS telemetry overlays on a track map provide real-time location data.

The hardware cost totals around $60-80, making this a relatively affordable entry point for remote FPV driving enthusiasts.

Technical strengths and design tradeoffs

The standout technical element is the ESP32-as-analog-transmitter-emulator hack. ARRMA cars do not expose their ESC or receiver signals for direct digital control, and attempting to hack into the car’s internals would be invasive and complex.

Generating analog joystick voltages with a 12-bit DAC on the ESP32 side elegantly sidesteps this. It’s a hardware-software hybrid solution that requires no soldering on the car itself, preserving warranty and physical integrity. The DAC’s 12-bit resolution provides fine-grained control over joystick positions.

Using WebRTC through aiortc on the Raspberry Pi offers real-time, low-latency video streaming and control command relay. The Raspberry Pi Zero 2W is a cost-effective platform, though it can be a bottleneck in CPU usage for encoding 720p@60fps H.264 video. The reported latencies are around 30-100ms for control commands over the internet, 10-15ms on LAN, and about 150ms glass-to-glass video latency over 4G — quite reasonable for this kind of remote driving.

Cloudflare Workers are an interesting choice for signaling and TURN servers. This serverless approach simplifies deployment and scaling but introduces a dependency on Cloudflare’s infrastructure and free-tier limits.

The driving assist system is a bonus layer that demonstrates how software can augment a purely hardware-focused project. Using IMU and hall effect sensors to implement traction control, ABS, and stability control is ambitious and adds complexity but improves real-world usability.

Tradeoffs include the complexity of setting up multiple hardware components (ESP32, MCP4728 DAC, Raspberry Pi, sensors) and the need to manage networking via Cloudflare, which might be a barrier for less experienced users. The system’s reliance on WiFi and UDP means network reliability can impact control experience.

Quick start

The README provides a clear multi-step quickstart for setting up the system:

1. ESP32 Setup

  • Copy main/config.h.example to main/config.h and add your WiFi credentials.
  • Install the Adafruit MCP4728 library in the Arduino IDE.
  • Upload the main/main.ino firmware to the ESP32.
  • The ESP32 broadcasts a beacon on UDP port 4211.

2. Raspberry Pi Setup

  • Flash Raspberry Pi OS Lite (64-bit) and enable SSH.
  • Install dependencies:
    sudo apt update && sudo apt install -y python3-pip
    pip3 install aiortc aiohttp pyyaml pyserial pynmea2
    
  • Install MediaMTX for video streaming.
  • Install cloudflared and create a tunnel.
  • Deploy control-relay.py as a systemd service.

3. Cloudflare Setup

  • Obtain TURN credentials from the Cloudflare Dashboard.
  • Deploy the Worker with:
    cd arrma-relay && npm install
    npx wrangler secret put TURN_KEY_ID
    npx wrangler secret put TURN_KEY_API_TOKEN
    npm run deploy
    
  • Copy public/config.js.example to config.js and configure your URLs.

4. Generate an Access Token

TOKEN_SECRET="your-secret-key" node generate-token.js 60

The README also includes instructions for Steam Deck setup to use its built-in controls with the browser interface, which is a nice touch for alternative control options.

verdict

Tether Rally offers a thoughtfully engineered solution for remote control of closed-system RC cars with real-time video and command feedback. The hardware hack using an ESP32 DAC to emulate joystick voltages is particularly clever and worth studying for anyone interested in bridging closed hardware with open control.

The project is best suited for makers and hobbyists comfortable with embedded systems, Arduino IDE, Raspberry Pi Linux setup, and Cloudflare configuration. It’s not a turnkey consumer product but an open source platform that requires some technical proficiency to assemble and maintain.

Latency and video quality are good enough for practical remote driving, especially on LAN or decent internet connections. The driving assist sensors and software add real-world usability enhancements but raise the project’s complexity.

If you want to experiment with remote FPV driving, learn about WebRTC in embedded contexts, or explore hardware emulation of analog controls, Tether Rally is a solid, well-documented project to dive into.


→ GitHub Repo: roman01la/tether-rally ⭐ 32 · Python