INDUSTRIES

Automotive

Aviation

Finance

Gaming

MedTech

IoT

Digital Products

USE CASES

For Enterprise

For Individuals

For Teams

For education

KEY FEATURES

Hardware & System Integration

Beta

ProtoPie MCP

Multi-Device Prototyping

Interaction Logic

Developer Handoff

ProtoPie AI

New

User Testing

PLUGINS

Figma

Sketch

Adobe XD

INSIGHTS & INSPIRATION

Blog

eBooks

Clients Success Stories

Events & Webinars

ProtoPie Gallery

PRODUCT LEARNING & SUPPORT

ProtoPie School

Download ProtoPie

Product Documentation

Community

INDUSTRIES

Automotive

Aviation

Finance

Gaming

MedTech

IoT

Digital Products

USE CASES

For Enterprise

For Individuals

For Teams

For education

KEY FEATURES

Hardware & System Integration

Beta

ProtoPie MCP

Multi-Device Prototyping

Interaction Logic

Developer Handoff

ProtoPie AI

New

User Testing

PLUGINS

Figma

Sketch

Adobe XD

INSIGHTS & INSPIRATION

Blog

eBooks

Clients Success Stories

Events & Webinars

ProtoPie Gallery

PRODUCT LEARNING & SUPPORT

ProtoPie School

Download ProtoPie

Product Documentation

Community

Tutorials
•

8

min read

How to Add Real Wheel Force Feedback to ProtoPie

Driving Fanatec Wheel Force Feedback from ProtoPie for Autonomous-Driving Experience Prototypes

Bella.Liu, Marketing Manager at ProtoPie

This tutorial is based on the open-source project fanatec-ffb-bridge. It walks you step by step through setting up a "ProtoPie prototype → real Fanatec wheel force feedback" demo environment. No racing game and no SimHub required — once it's set up, you can control the wheel's steering force, vibration, and angle directly from a Send Message trigger in ProtoPie Studio.

By the end of this tutorial you'll be able to:

  • Make the wheel produce real-time steering force and vibration alerts driven by your ProtoPie scenario

  • Kick off the whole demo with a physical push-button (wired to an Arduino) for extra realism

  • Troubleshoot the most common connection and permission issues

Estimated time: 30–45 minutes (not counting hardware procurement).

1. Prerequisites

Before you start, make sure you have:

  1. A Windows PC — the bridge talks to the wheel via DirectInput, so it only supports Windows

  2. A Fanatec wheelbase, connected via USB and powered on

  3. Python 3.9 or newer, available from python.org

  4. ProtoPie Connect, running locally and reachable on port 9981

  5. FanaLab and Fanatec Control Panel closed — both of these can grab an exclusive FFB lock and block the bridge from opening the wheel

  6. (Optional) An Arduino board (Uno, Nano, Leonardo, etc.) and a push-button, for physical button triggering

2. Step One: Download and Install the Bridge

  1. Clone or download the repository:
    git clone https://github.com/JubzMajulee/fanatec-ffb-bridge.gi
    cd fanatec-ffb-bridge

  2. (Recommended) Create a virtual environment to keep things isolated from your system Python:
    python -m venv .venv
    .venv\Scripts\activate

  3. Install dependencies:pip install -r requirements.txt

3. Step Two: Power On the Wheel and Run the Bridge

  1. Plug in and power on your Fanatec wheel.

  2. Start ProtoPie Connect and confirm it's listening on http://localhost:9981.

  3. From the project folder, run:

    python main.py

If everything is working, you should see output similar to this:

=== ProtoPie -> Fanatec FFB Bridge ===
ProtoPie Connect: http://localhost:9981
Wheel keyword:    fanatec

—————————————————————————————

[FFB] 2 joystick(s) detected:
       [0] Fanatec ...
       [1] Fanatec ...
[FFB] Haptic opened on [1] Fanatec ...
[FFB] Constant force armed (signed -1..+1, ramp 1.00/sec)
[FFB] Sine vibration armed (0..1, period=50ms)
[FFB] Centering wheel (1500ms)...
[FFB] Wheel centered
[SocketIO] Connected to http://localhost:9981

The wheel will briefly self-center, then sit idle waiting for messages. Press Ctrl + C at any time to stop the program.

  • Seeing "No joysticks detected"? Windows isn't seeing the wheel. Check the USB cable and power, and confirm the device shows up under Windows' "Set up USB game controllers."

  • Seeing "None of the candidates would open for haptic"? This is almost always FanaLab or Fanatec Control Panel holding an exclusive FFB lock — close them and try again. Also make sure no racing game is running in the background.

4. Step Three: Send Control Messages from ProtoPie Studio

Once the bridge is running, it continuously listens for messages broadcast by ProtoPie Connect. In your ProtoPie Studio prototype, add a Send Message trigger and set the Message ID and Value according to the table below:

Message ID

Value Range

Effect

set_ffb

-1.0 to +1.0

Pulls the wheel left (negative) or right (positive). 0 = no force. Smoothly ramps toward the target.

set_ffb_speed

e.g. 0.5, 1.0, 5.0

How fast set_ffb ramps toward its target — higher values feel closer to instant. Default 1.0.

set_vibration

0.0 to 1.0

Wheelbase vibration intensity, applied immediately.

set_angle

degrees, e.g. -90, 45

Parks the wheel at a specific angle and holds it there.

set_angle_strength

0.0 to 1.0

How firmly set_angle holds the wheel. 0 releases it.

A Few Common Combinations
  • Simulate the system correcting to the right: send set_ffb = 1.0

  • Make the correction feel gentler: send set_ffb_speed = 0.3 first, then set_ffb = 0.0 (a slow drift back to center)

  • Simulate an urgent turn-in: send set_ffb_speed = 8.0 first, then set_ffb = 0.7 (near-instant)

  • Lane-departure vibration alert: send set_vibration = 0.6, then set_vibration = 0.0 to stop

  • Autonomous takeover, wheel turns to 30° and locks: send set_angle = 30 first, then set_angle_strength = 0.7

As long as your ProtoPie prototype is connected to ProtoPie Connect, any message it sends will be picked up by the bridge and translated into real force feedback on the wheel.

5. (Optional) Step Four: Wire Up a Physical Button with Arduino

If you want the demo to feel more immersive — for example, using a real button to kick off an "autonomous takeover" scenario — you can add an Arduino as follows.

Wiring

Just two wires:

Arduino Pin

Connect To

A0

One leg of a momentary push-button

GND

The other leg of the button

A0 uses the chip's internal pull-up resistor, so no external resistor is needed. Any Arduino board with a USB serial connection works (Uno, Nano, Leonardo, Pro Micro, etc.).

Flashing the Sketch
  1. Install the Arduino IDE.

  2. Open Arduino/pushButtonDemo.ino from the repository.

  3. Tools → Board — select your board.

  4. Tools → Port — select the COM port your board enumerated as.

  5. Click Upload (the right-arrow icon).

  6. Open Tools → Serial Monitor at 9600 baud and press the button — you should see Arduino||1 on press and Arduino||0 on release. Close the Serial Monitor afterward, since it holds the COM port open.

Connecting It to ProtoPie Connect
  1. In ProtoPie Connect, open Add Device → Serial (naming may vary slightly by version).

  2. Select the Arduino's COM port and set the baud rate to 9600.

  3. In your ProtoPie Studio prototype, add a Receive Message trigger with Message ID = Arduino. Use the message's value (1 = pressed, 0 = released) to kick off your autonomous-driving simulation scenario.

Once wired up, the full chain looks like this: press the physical button → Arduino sends Arduino||1 → ProtoPie Connect forwards it → the ProtoPie prototype starts the scenario → the scenario sends set_ffb, set_vibration, etc. → the bridge translates those into real force feedback on the wheel.

6. Adjusting the Defaults

If the default feel doesn't match what your demo needs, you can edit the top of main.py:

PROTOPIE_URL = "http://localhost:9981"   # ProtoPie Connect URL
WHEEL_KEYWORD = "fanatec"                # substring match for the wheel device name
And in ffb_driver.py, FanatecFFB exposes these constructor parameters:

  • force_ramp_rate=1.0 — default ramp rate for set_ffb

  • center_on_start=True — whether to auto-center the wheel at startup

  • center_duration_ms=1500 — how long the centering spring runs

  • wheel_range_deg=900 — full lock-to-lock range; this must match your Fanatec driver's setting, or set_angle will map incorrectly

7. Troubleshooting Quick Reference

Symptom

Likely Cause

Fix

No joysticks detected

Windows doesn't see the wheel

Check the USB cable and power; confirm the device appears under "Set up USB game controllers"

None of the candidates would open for haptic

FanaLab / Fanatec Control Panel holding an exclusive lock

Close both programs and make sure no racing game is running

[SocketIO] Failed to connect to http://localhost:9981

ProtoPie Connect isn't running, or is on a different port

Open Connect and confirm the port; if different, edit PROTOPIE_URL in main.py

Wheel doesn't react to messages

Message isn't reaching the bridge, or the wheel/driver itself has an issue

Check whether the terminal logs a line like [ProtoPie] set_ffb -> 0.5. If it does, the issue is on the wheel/driver side; if not, check your ProtoPie connection and messageId spelling

Wrong device gets picked

Multiple Fanatec devices, or a non-standard device name

Change WHEEL_KEYWORD in main.py to a more specific substring of the device name (case-insensitive)

Summary

The whole setup boils down to three lightweight layers: Arduino (optional physical trigger) → ProtoPie (scenario logic and message orchestration) → the bridge (translating messages into wheel force feedback). Each layer is simple on its own, and the cost to set it all up is low — but put together, they let a reviewer or test participant feel, within minutes, what "the wheel taking over during autonomous driving" actually feels like. That's exactly the kind of persuasive power a prototype needs.

👉 Want to see it in action? Book a session and watch how real hardware and prototypes work together in real time.