A custom web-based controller for Shell Motorsports Collection RC cars — replacing the bloated official app with a lightweight, no-install web UI that works on any device with a browser and Bluetooth.
Features • Quick Start • Compatibility • How It Works • Contributing
|
🎮 Custom Controls 🔋 Battery Indicator 🔵 Web Bluetooth 🔒 AES-128 Encryption |
⚡ Turbo Mode 📱 Mobile Friendly 🔌 Connect / Disconnect |
The official Shell Racing app works, but where's the fun in that?
- 🗑️ No bloat — The official Shell app includes games and extra content you don't need just to drive your car
- 📦 No installation — Just open the URL in Chrome, no app store, no downloads
- 🌐 Works everywhere — Any device with Chrome and Bluetooth works, unlike the official app which is limited to iOS and Android app stores
- 🛠️ Build something yourself — Learn Web Bluetooth API by doing
- 🎨 Custom UI — Design your own controller layout
- 🔓 Open source — Understand exactly how BLE RC car control works
- 🚀 Extendable — Add your own features the official app doesn't have
This project reverse engineers the BLE protocol used by Shell Motorsports Collection RC cars and reimplements it as a clean, open web app. 🏁
Hardware:
- Shell Motorsports Collection RC car (micro-USB model)
- Any device with Chrome browser and Bluetooth
1. Open the controller
Visit: https://himc29.github.io/Shell-Motorsports-Collection-Web-Controller
No installation needed — just open the link in Chrome!
2. Connect your car
- Turn on your RC car
- Click Connect and select your
QCAR-XXXXXXdevice from the Bluetooth picker
3. Drive!
- Use the WASD buttons to control the car
- Toggle Turbo for full speed
⚠️ Important: Web Bluetooth requires Chrome browser. Firefox, Safari, and iOS browsers are not supported.
| Platform | Browser | Status |
|---|---|---|
| Android | Chrome | ✅ Supported |
| Windows | Chrome | ✅ Supported |
| Linux | Chrome | ✅ Supported |
| macOS | Chrome | ✅ Supported |
| iOS | Any | ❌ Not supported (Web Bluetooth unavailable) |
| Firefox | Any | ❌ Not supported |
| Safari | Any | ❌ Not supported |
| Model | Connector | Status |
|---|---|---|
| Shell Motorsports Collection (micro-USB) | Micro-USB | ✅ Tested |
| Shell Motorsports Collection (USB-C) | USB-C |
The car communicates over Bluetooth Low Energy (BLE) using the following:
Service UUID: 0000fff0-0000-1000-8000-00805f9b34fb
Control Char UUID: d44bc439-abfd-45a2-b575-925416129600
Battery Char UUID: d44bc439-abfd-45a2-b575-925416129601
Each command is a 16-byte packet sent every 100ms:
Byte Value Description
────────────────────────────
[1] 0x43 Fixed header
[2] 0x54 Fixed header
[3] 0x4c Fixed header
[4] 0/1 Forward
[5] 0/1 Backward
[6] 0/1 Left
[7] 0/1 Right
[8] 1 Lights (untested and set to 1 because my car doesn't have lights)
[9] 0x50 Normal speed / 0x64 for turbo
Before sending, the packet is encrypted with AES-128 ECB using a fixed key.
Shell-Motorsports-Collection-Web-Controller/
├── index.html — Main UI
├── LICENSE — MIT License
├── README.md — Project documentation
├── styles/
│ └── styles.css — Styling
└── js/
├── main.js — UI logic, key handling, send loop
├── bluetooth.js — BLE connection and disconnection
├── command.js — Command byte building
└── crypto.js — AES-128 encryption utilities
| Button | Action |
|---|---|
| W | Forward |
| A | Left |
| S | Backward |
| D | Right |
| Turbo | Toggle turbo mode |
| Connect | Connect / Disconnect |
💡 Tip: Multiple buttons can be held simultaneously for diagonal movement!
- 📳 Haptic feedback on button presses
- 🐛 Fixed initial movement glitch after connecting
- ⌨️ Added WASD and arrow key support
- 🔋 Battery indicator with real-time updates
- 🏗️ Modular file structure (bluetooth.js, command.js, crypto.js)
- 🔌 Improved connection and disconnection handling
- 🎉 Initial release
- Basic forward, backward, left, right controls
- Turbo mode
- Connect / Disconnect
Contributions are welcome! If you have a different Shell RC car model and want to test compatibility, open an issue or PR.
- Fork the Project
- Create your Feature Branch
git checkout -b feature/AmazingFeature
- Commit your Changes
git commit -m 'Add some AmazingFeature' - Push to the Branch
git push origin feature/AmazingFeature
- Open a Pull Request
- 🎨 Better UI / themes
- 📳 Haptic feedback on mobile
- 🕹️ Virtual joystick instead of buttons
- 🚗 USB-C model support
- 🌐 PWA support for offline use
- Make sure you're using Chrome browser
- Make sure you're on HTTPS or localhost, not
file:// - Enable Web Bluetooth in
chrome://flags
- Make sure the car is turned on
- The car should appear as
QCAR-XXXXXX - Try turning the car off and on again
- Make sure commands are being sent (check console for errors)
- Reconnect the car
Distributed under the MIT License. See LICENSE for more information.
- DarkNikGr — Original HTML controller proof of concept
- scrool/qcar-docs — BLE protocol documentation