-
Drag-and-Drop Control Pad Creation
Design your control pads by dragging and dropping components like buttons, sliders, switches, Joystick and D-PAD. -
Multi-Protocol Support and Seamless Server Connections
Easily configure your control pad to support network protocols such as Bluetooth LE, WebSocket, MQTT, TCP, and UDP. Once connected, you can interact with the control pad’s components—including buttons, sliders, switches, joysticks, and D-PADs—to send real-time commands directly to the connected server or BLE client, where these commands can be processed. -
Switch Connection Type Anytime
You can change the connection type of a control pad at any time without creating a duplicate for a different connection.
- Switch
- Button
- Slider
- DPAD
- Joystick
- Steering Wheel
Start by creating a new control pad. Provide a unique name to identify your control pad.


After creating the control pad, click on the Build icon and use the drag-and-drop interface to add components like switches, buttons, and sliders etc.


Assign a unique ID to each component. This ID will be sent to the server during interactions.

Tap 'Settings, choose a connection type (TCP, Bluetooth LE, UDP, WebSocket, or MQTT), enter the server address and port. You can switch between connection types anytime


a. Click on the Play icon to start interacting with your control pad.
b. Tap the Connect button in the bottom-right corner to establish a connection with the server.



When users interact with the control pad, JSON-formatted or CSV messages are generated based on the type of component used. These string messages enable receivers to understand and process interactions sent from the control pad. Below are the formats and details for each interaction:
Toggling a switch generates the following JSON:
{
"id": "the id you specified",
"type": "SWITCH",
"state": true
}
For Bluetooth and Bluetooth LE connections, toggling a switch generates a CSV
message in the format: <id>,<state>
.
- The
state
field indicates whether the switch is on (true
) or off (false
).
Pressing or releasing a button generates this JSON:
{
"id": "the id you specified",
"type": "BUTTON",
"state": "PRESS"
}
For Bluetooth and Bluetooth LE connections, pressing or releasing a button generates a CSV
message in the format: <id>,<state>
.
- The
state
field can have following values:- "PRESS": When the button is being pressed (finger on the button).
- "RELEASE": When the button is released (finger lifted off after pressing).
- "CLICK": Indicates tap gesture
Pressing or releasing a button on DPAD generates this JSON:
{
"id": "the id you specified",
"type": "DPAD",
"button": "RIGHT",
"state": "CLICK"
}
For Bluetooth and Bluetooth LE connections, pressing or releasing a button on DPAD generates a CSV
message in the format: <id>,<button>,<state>
.
- The
state
field can have following values:- "PRESS": When the button is being pressed (finger on the button).
- "RELEASE": When the button is released (finger lifted off after pressing).
- "CLICK": Indicates tap gesture
- The
button
field can be "LEFT","RIGHT","UP" or "DOWN"
Rotating a steering wheel generates this JSON:
{
"id": "your id",
"type": "STEERING_WHEEL",
"angle": 45.233445
}
For Bluetooth and Bluetooth LE connections the CSV
is <id>,<angle>
- where
angle
is rotation angle of the steering wheel in degrees- Positive values indicate clockwise rotation
- Negative values indicate counter-clockwise (anti-clockwise) rotation
Moving joystick handle generates this JSON:
{
"id": "the id you specified",
"type": "JOYSTICK",
"x": 0.71150637,
"y": -0.13367589
}
For Bluetooth and Bluetooth LE : <id>,<x>,<y>

Note : Joystick is not rotatable in the Builder Screen
The values of x and y range:
- From -1.0 to 1.0 for both axes.
- Positive x values indicate movement to the right, and negative values indicate movement to the left.
- Positive y values indicate upward movement, and negative values indicate downward movement.
Dragging the slider thumb generates the following JSON:
{
"id": "the id you specified",
"type": "SLIDER",
"value": 1.4
}
For Bluetooth and Bluetooth LE connections, dragging the slider thumb generates a CSV
message in the format: <id>,<value>
.
- The
value
field represents the current position of the slider. - The value is always within the range of the minimum and maximum values specified during the slider's configuration.
Accelerometer data is sent in the following JSON format:
{
"type": "ACCELEROMETER",
"x": 0.31892395,
"y": -0.97802734,
"z": 10.049896
}
For Bluetooth and Bluetooth LE : ACCELEROMTER,<x>,<y>,<z>
x
: Acceleration force (in m/s²) applied along the x-axis, including the force of gravity.y
: Acceleration force (in m/s²) applied along the y-axis, including the force of gravity.z
: Acceleration force (in m/s²) applied along the z-axis, including the force of gravity.
Gyroscope data is sent in the following JSON format:
{
"type": "GYROSCOPE",
"x": 0.15387291,
"y": -0.22954187,
"z": 0.08163925
}
For Bluetooth and Bluetooth LE : GYROSCOPE,<x>,<y>,<z>
x
: Rate of rotation around the x-axis in radians per second (rad/s).y
: Rate of rotation around the y-axis in radians per second (rad/s).z
: Rate of rotation around the z-axis in radians per second (rad/s).
A long Bluetooth device name can cause advertisement failure (In case of BLE). To avoid this issue, use a shorter name. In your device's Bluetooth settings, change the Bluetooth device name to five or fewer characters, such as dev
.
For devices running Android 12 or higher, you also need to ensure that your app has the necessary Bluetooth permissions. To do this, go to the app's system settings and grant the required Nearby Devices permission. Without this permission, the app won't be able to advertise Bluetooth LE services or access paired devices when using Bluetooth Classic.
You can test the connections with Websocket,TCP, UDP servers and BLE client provided in https://github.com/umer0586/droidpad-python-examples
- A Tank controlled by an Arduino Uno R4 WiFi using the DroidPad App https://github.com/Klixxy/ArduTank by Klixxy
- TouchPad