v1.0 · Android 9+

Drive your RC project.Simple as Bluetooth.

Offline-first Android remote for Arduino-style RC builds. Pair once using classic Bluetooth SPP, choose your bonded module, and send single-byte commands — no cloud, no account, no extra hub.

No sign-in No analytics or ads Works fully offline
Android phone showing Bluetooth Car Controller, paired with a small Arduino-based RC vehicle
Material Design 3 · Jetpack Compose
No analytics, ads, or bundled crash SDKs
Requires Android 9 (Pie) or newer
Bonded devices only — pairing stays in your control
Features

Made for the bench — not for someone else's servers.

Clear pairing, honest error states, and layouts that stay readable whether your phone is in hand or on a mount.

  • Bonded devices only

    Shows modules you already paired in Android settings — no broad scan of every nearby Bluetooth device.

  • Clear Bluetooth states

    Handles radio off, permission denied (Android 12+), empty lists, and socket failures with a single-tap retry.

  • Light · Dark · System

    Three theme choices using Material You color roles.

  • Turkish · English · Arabic

    Pick a language in the app or follow the device default.

  • Portrait and landscape

    Portrait: directional controls. Landscape: two columns — steering on one side, speed and extras on the other.

  • Command reference built in

    The byte-level protocol is documented in the app so you are not switching between code and a wiki mid-build.

Getting connected

From prototype wiring to first drive in four steps.

  1. 01

    Firmware speaks classic SPP

    Your module should advertise the standard Serial Port Profile UUID (RFCOMM): 00001101-0000-1000-8000-00805F9B34FB.

    00001101-0000-1000-8000-00805F9B34FB
  2. 02

    Pair once in Android

    Use system Bluetooth settings to pair common modules such as HC-05, HC-06, or BT-05 — usual PIN, usual flow.

  3. 03

    Open the app and connect

    On Android 12 or newer, grant the Bluetooth Connect permission when prompted, pick your bonded device, tap connect.

  4. 04

    Drive

    Hold a direction to move, release to stop. Adjust speed with the slider. That is the whole loop.

Inside the app

Screenshots

Main controller, pairing, and day-to-day screens — taken directly from the Android app.

Screenshot: main driving and connection screen
Screenshot: Bluetooth device selection or settings
Screenshot: secondary controls or reference

For makers and hobbyists

One press, one byte — keep the wiring simple.

While you hold a direction button, the app sends one ASCII command; on release it sends a neutral stop. The speed slider sends a raw byte from 0 through 100. Mirror that in your firmware switch statement and you are moving.

Full protocol inside the app
command_map.ino
// hold to move, release = stop
switch (cmd) {
  case 'F': forward(); break;
  case 'B': backward(); break;
  case 'L': left(); break;
  case 'R': right(); break;
  case 'S': stop(); break;
  // speed: raw byte values 0–100
  default: setSpeed(cmd);
}

Permissions & privacy

Straightforward wording — not fine-print theater.

BLUETOOTH_CONNECT (Android 12+)

Needed only to reach hardware you already paired. Requested in context, typically once.

Classic Bluetooth on older releases

Standard manifest entries for Android 11 and earlier — nothing unusual.

Preferences stay on-device

Theme and language choices are stored with Jetpack DataStore on your phone — not synced to us.

No routine networking

Normal driving does not require internet access or background uploads.

Safety & compatibility

You are responsible for wiring, firmware, and safe operation. Bluetooth Car Controller forwards UART-style bytes over RFCOMM — it is not an OBD-II tool or a vehicle diagnostics suite. Match baud rates, bench-test before field tests, and never aim a fast RC model toward people or animals.