Design any controller. No code.

Arduino Remote Studio

Build custom Bluetooth & WiFi remote controls for Arduino, ESP32, ESP8266, Raspberry Pi, robots, drones and smart-home boards — by dragging widgets onto a canvas and typing the command each one should send. This manual walks you through every screen and feature.

Bluetooth Classic WiFi / TCP 9 widget types 6 starter templates No-code Offline

1 · What Arduino Remote Studio is

Arduino Remote Studio turns your phone into a programmable remote for any device that speaks plain serial over Bluetooth Classic (HC-05, HC-06, ESP32 BT) or WiFi/TCP (ESP8266, NodeMCU, or any TCP socket). You place controls — buttons, joysticks, a D-pad, sliders, gauges — on a canvas, type the text command each one sends, then connect and drive.

There is nothing to flash on the phone side and no XML to write. Your firmware just reads commands like FWD:80 or LIGHT_ON and, optionally, prints back KEY:VALUE lines that the app shows live.

2 · 60-second quick start

  1. Install & open. On first launch you'll see a short onboarding, then the Home screen with categories and your remotes.
  2. Open a template. Tap Robot Driver (or any starter template) to load a ready-made layout.
  3. Connect. Tap Connection → pick your HC-05 from the paired Bluetooth list, or enter the IP & port of your ESP32/ESP8266.
  4. Drive. Push the joystick or hold the D-pad — commands stream to your device. Watch the battery gauge update if your firmware reports it.
  5. Make it yours. Open the designer, drop a new widget on the canvas, type its command, and you have a custom remote.

3 · App tour

Home

Category shortcuts (Robot, Smart Home, RC Car, Drone, CNC, LED) and your recent remotes. The launch pad for everything.

Templates

Your remote library — open, duplicate, rename, delete, import or export. Includes the 6 starter templates.

Designer

The drag-and-drop canvas where you add, move, resize and configure controls. Undo/redo every change.

Runner

The live remote. Sends commands as you tap, shows incoming sensor data, and hosts the Emergency Stop.

Connection

Choose Bluetooth or WiFi, scan for devices, pair from a QR code, and manage saved connection profiles.

Logs

A scrollable history of commands sent and lines received — handy for debugging your firmware.

4 · Connecting over Bluetooth

Arduino Remote Studio uses Bluetooth Classic (SPP) — the same serial profile HC-05, HC-06 and ESP32 BT-Classic modules expose.

  1. Pair in Android Settings first. Bluetooth Classic modules must be paired in your phone's system Bluetooth settings (PIN is usually 1234 or 0000) before they appear in the app.
  2. Grant permissions. On Android 12+ the app asks for Nearby devices (BLUETOOTH_CONNECT / SCAN). Allow it so it can list and connect to your module.
  3. Pick the device. Connection → Bluetooth tab → tap your module (e.g. HC-05). Connected status turns green.
Note: This app uses Bluetooth Classic, not BLE. HM-10 / nRF BLE-only modules are not supported — use an HC-05/06 or an ESP32 (which does both Classic and WiFi).

5 · Connecting over WiFi (TCP)

For ESP8266, NodeMCU, ESP32-WiFi or a Raspberry Pi, the app opens a raw TCP socket to your device. Your firmware runs a TCP server and reads the commands the app sends, line by line.

  1. Put your phone and the device on the same WiFi network.
  2. Connection → WiFi tab → enter the device IP address and port (e.g. 192.168.1.50 : 8080).
  3. Tap Connect. Or skip the typing and use auto-discovery below.

6 · Auto-discovery & QR pairing

Find devices automatically Premium

Tap Scan for devices and the app finds boards on your WiFi two ways at once:

  • mDNS / DNS-SD — devices advertising the _arduinoremote._tcp service appear by name, no IP needed.
  • UDP broadcast — the app broadcasts a probe; firmware that replies with its details shows up in the list.

You can attach a device-type filter to a template (e.g. car, drone) so a scan only surfaces matching boards.

Pair from a QR code Premium

Have your sketch print a QR encoding the connection details; point your phone at it and the IP/port (or Bluetooth target) auto-fills. The app reads pairing URIs of the form it generates internally, so a QR your firmware prints from the same scheme will connect in one tap.

7 · Saved connections

Save a connection as a profile for one-tap reconnects. Free users can keep 1 saved connection; Premium removes the limit, so you can store your robot, your LED controller and your drone separately.

8 · Starter templates

Six ready-to-drive remotes ship with the app (Premium). Each is laid out on a reference canvas and rescales to your screen automatically.

TemplateWhat's on itEmergency cmd
Robot DriverTank-drive D-pad (ramped speed), speed slider, light toggle, gripper cycle button, horn, battery gauge, temperature display and a serial monitor.STOP
Smart Home HubLiving/Bedroom/Fan/AC toggles, brightness & fan-speed sliders, 4-scene selector, indoor temp, humidity and a power-draw gauge.ALL_OFF
RC CarJoystick steering, throttle slider, drive-mode selector, headlights, horn and a live speed gauge with battery and lap readouts.STOP
Drone PilotTwin sticks, arm toggle, takeoff/land cycle, return-to-home, camera-gimbal slider, altitude & battery gauges, signal and ground-speed.EMERGENCY
CNC PendantXYZ jog cross, live X/Y/Z position, step-size selector, feed-rate slider, spindle toggle, RPM gauge and a big red E-Stop.ESTOP
LED StripPower, 4 animation modes, brightness & speed, full RGB mixer and one-tap colour presets.POWER_OFF

Open any template to drive it as-is, or duplicate it and edit in the designer to match your wiring.

9 · The designer

Placing & arranging

  • Add a widget from the palette — it drops onto the canvas.
  • Drag to move; drag a corner to resize.
  • Undo / redo every change.
  • Group controls so they move together as one unit.
  • Rotate the canvas between portrait and landscape; layouts scale live to any screen size.

Per-control properties

  • Label, colour, and the command(s) it sends.
  • Haptic strength — off / light / medium / strong.
  • Destructive flag — adds a confirm dialog before sending.
  • Conditional visibility — show only when the device reports a value.
  • Widget-specific options (ranges, formats, gauge thresholds, D-pad ramp).
Mirror mode: flip the runner canvas horizontally for left-handers or thumb-only driving — labels stay readable.

10 · Widget reference

WidgetWhat it doesTier
ButtonSends a command on tap. Supports a separate long-press command and multi-state cycling (each tap advances to the next label/colour/command).Free
ToggleTwo-state switch; sends an on command and an off command.Free
SliderSends a live value via a format string, e.g. SPEED:{value}.Free
LabelStatic text for grouping or captions.Free
Joystick2-axis pad; streams {x}/{y} via a format like X:{x},Y:{y}.Premium
D-Pad4-button directional pad. Hold to ramp a value up; release to ease it down. Each direction can send its own ramping command (FWD:{value}) or act as an X/Y axis. Optional diagonals.Premium
GaugeArc gauge driven by an incoming KEY:VALUE. Turns amber at the warn threshold and red at the danger threshold.Premium
DisplayShows the latest value for a key, with an optional unit (°C, %, V).Premium
Serial MonitorA resizable panel showing live sent/received traffic on the canvas.Premium

11 · Commands & live data

Outgoing: command formats

Most widgets send a plain text command. Sliders, joysticks and D-pads build the command from a format string with live placeholders:

WidgetFormatSends
SliderSPEED:{value}SPEED:75
JoystickX:{x},Y:{y}X:50,Y:-30
D-pad (axis)DRIVE:{x},{y}DRIVE:0,80
D-pad (per-dir)FWD:{value}FWD:80

You can send plain text, JSON, hex or any templated string your sketch expects.

Incoming: two-way data

If your firmware prints lines in the form KEY:VALUE (newline terminated), the app routes each value to any Gauge, Display, or conditional control listening for that key.

// Arduino — report telemetry the app can show
Serial.println("BATTERY:82");   // → battery gauge / display
Serial.println("TEMP:28");      // → "Temp" display, shows 28°C
Serial.println("RPM:18500");    // → RPM gauge (amber/red on thresholds)

12 · Safety: Emergency Stop & failsafe

🛑 Emergency Stop

Every template has a tappable E-Stop that fires its emergency command (e.g. STOP, ESTOP) immediately.

🔌 Failsafe on disconnect

If Bluetooth or WiFi drops mid-drive, the app auto-fires the failsafe command so your robot or car doesn't run away.

⚠️ Destructive confirm

Mark any control destructive to require a confirmation dialog before it sends — good for "launch", "reset" or "estop".

📳 Haptics

Per-control tactile feedback (light, medium, strong) so you feel each press without looking.

Always test the E-Stop and failsafe before driving real hardware. Make sure your firmware actually halts motors on the stop command and on a silent connection.

13 · Macros Premium

Record a sequence of commands as you operate the remote, then save it as a one-tap macro — "park the car", "scene: movie night", a robot demo routine. Replay the whole sequence with a single press.

14 · Usage heatmap Premium

The app counts how often each control is used and visualises it, so you can see at a glance which buttons you actually reach for and redesign the layout around them.

15 · Conditional controls Premium

Hide a control until your device reports a specific value. Set a visible-when key (and optional value) on the control; it only appears in the runner once the device sends a matching KEY:VALUE. Use it to build progressive UIs that reveal options only when they're relevant — e.g. show "ABORT LANDING" only while STATE:LANDING is active.

16 · Import, export & sharing Premium

Remotes are portable .json files. Export one to share via WhatsApp, email or Drive, or import a friend's. The layout carries its design canvas size, so it auto-rescales to the receiving phone's screen — no broken positions. Everything works offline; your designs live on your device.

17 · Free vs Premium

The core is free, with generous limits to build and drive a real remote. Premium is a single one-time purchase — no subscription, no ads — that unlocks everything.

Free

  • Up to 2 remotes, 6 controls each
  • Button, Toggle, Slider, Label widgets
  • Bluetooth & WiFi/TCP connection
  • 1 saved connection
  • Emergency Stop & failsafe
  • No ads, ever

Premium one-time

  • Unlimited remotes & controls
  • All widgets — Joystick, D-Pad, Gauge, Display, Serial Monitor
  • 6 ready-made starter templates
  • Record & play macros
  • WiFi auto-scan + device-type filter
  • Import, export & QR sharing
  • Usage heatmap, grouping & conditional controls
  • Unlimited saved connections

Purchases are processed by Google Play. Already bought Premium on another device? Use Restore purchases on the Premium screen.

18 · Firmware example

A minimal Arduino sketch that reads commands from the app and reports battery back. Wire an HC-05's TX/RX to a SoftwareSerial pair (or use Serial directly).

void setup() {
  Serial.begin(9600);   // match your HC-05 baud (often 9600 or 38400)
}

void loop() {
  if (Serial.available()) {
    String cmd = Serial.readStringUntil('\n');
    cmd.trim();

    if (cmd == "STOP")        stopMotors();
    else if (cmd == "LIGHT_ON")  digitalWrite(LED, HIGH);
    else if (cmd == "LIGHT_OFF") digitalWrite(LED, LOW);
    else if (cmd.startsWith("SPEED:"))
      setSpeed(cmd.substring(6).toInt());   // "SPEED:75" → 75
    else if (cmd.startsWith("X:"))
      drive(cmd);                            // "X:50,Y:-30"
  }

  // Report telemetry every second → gauges/displays update live
  static unsigned long t = 0;
  if (millis() - t > 1000) {
    t = millis();
    Serial.print("BATTERY:"); Serial.println(readBatteryPct());
  }
}
Tip: commands are sent newline-terminated. Read with readStringUntil('\n') and trim() to strip the terminator before comparing.

19 · Troubleshooting

SymptomFix
My HC-05 isn't in the listPair it in Android Settings → Bluetooth first (PIN 1234/0000), then return to the app. Grant the Nearby devices permission on Android 12+.
Connects then immediately dropsBaud mismatch is the usual cause — make sure your Serial.begin() rate matches the module's configured baud.
WiFi device won't connectConfirm phone and board are on the same network, the IP is current (DHCP can change it), and your firmware's TCP server is listening on that port.
Gauges/displays never updatePrint exact KEY:VALUE\n lines and make sure the widget's data key matches the KEY exactly (case-sensitive).
Commands arrive glued togetherRead with readStringUntil('\n') rather than reading byte-by-byte without a delimiter.
A control is invisible in the runnerIt likely has a conditional visibility rule — it only shows once the device sends the matching value. Clear the rule in its properties to always show it.
Can't add more widgets / remotesYou've hit a free-tier limit (2 remotes, 6 controls, 1 connection). Unlock Premium to remove them.

20 · Privacy

No login. No ads. No analytics or advertising SDKs. Your templates, connection profiles and command logs stay on your phone unless you choose to export them. Connecting to your own devices is entirely local. The only network call the app makes itself is a version check on launch (to tell you when an update is required), which sends basic app/device info. Premium is a one-time in-app purchase processed by Google Play. See the full Privacy Policy for the exact details.

Arduino Remote Studio — User Manual v1.0 · Black & White Studio · Home · Privacy · Terms · blacknwhitestudio.com · info@blacknwhitestudio.com

© 2026 Arduino Remote Studio · Black & White Studio. All rights reserved. Arduino® is a trademark of Arduino S.r.l.; this app is an independent controller and is not affiliated with or endorsed by Arduino.