An iOS/Android app for controlling Arduino over bluetooth

1. Description

ArduinoBlue is an easy to use iOS/Android application that allows Arduino control over bluetooth. This app can be used to control your Arduino by sliders, buttons, and a joystick. Custom sliders and buttons can be used to interface with electronics components such as actuators and sensors connected to the Arduino.

This app is compatible with iOS/Android devices with bluetooth low energy (BLE). It interfaces with the Arduino via any HM-10 or HM-11 bluetooth module. If you're curious about the difference between the HM-10 and HM-11, take a look at this Reddit post. The HM-19 is yet to be tested, but it should work as well.

[Joystick to control movement]

[UI with custom buttons and sliders]

Check for compatibility:

  • If your iOS devices is newer than iPhone 4s, iPad 3rd gen, or iPod touch 5th gen, BLE should be supported.
  • For Android, simply install the app “BLE Checker”.

Key features include:

  • Tilt and joystick control
  • Customizable sliders and buttons (upto 200 buttons and 200 sliders)
  • Text communication with Arduino and mobile device


3. Physical Connection

[Arduino Uno Connections using pins 7 and 8]

4. Installing the library

Follow these steps in the official Arduino IDE or another Arduino compatible IDE of your choice.

1. Using Library Manager (Recommended):

Sketch → Include Library → Manage Libraries → search ArduinoBlue → Install

If the above does not work, please do a manual Installation as follows:

Download the latest version of the library from

and extract the containing folder to the Arduino libraries folder. For more help refer to this page.

If you used Library Manager to install the library, close the “Library Manager.”

5. Interfacing the ArduinoBlue app to HM-10 and Arduino

1. Go to

File → Examples → ArduinoBlue → ArduinoBlue_basic.ino

or copy and paste the code below

This will load a basic example code in the IDE.

[Command layout in edit mode]

[Command layout after editing]

2. Press any button or drag a slider, you will see something like this in the serial monitor window:

[Button 0 pressed; slider 1 moved from 123 to 51; button 1 pressed; slider 0 touched at 174]

3. Test the Drive feature

Simply use the joystick on the “Drive” page and joystick throttle and steering values will be displayed as they change.

[When joystick moves the throttle and steering values change]

4. Test the tilt control

Settings → Tilt Control on → Drive

The left red box displays the throttle and the right the steering. As you tilt, the box positions will change.

[Titl control mode]

6. Example Usage

Here are some example programs you can test out.

Control a Multi-colored LED

1. Put the circuit together as shown in the screenshot below

[Circuit for LED switch example code]

2. Upload the following Arduino sketch.

3. Connect to the phone and create the control layout with the following buttons:

0 - red LED

1 - green LED

2 - blue LED

Two Wheel Differential Drive Robot

This two wheel drive robot uses differential steering and two continuous rotation micro servos. You can steer the robot using the drive feature of the app.

1. Build the two wheel drive chassis with the wheels on the continuous rotation micro servo.

2. Put the circuit together as shown on the photo.

[Circuit for two wheel drive robot example]

3. Upload the example code:

File → Examples → ArduinoBlue → two-wheel-drive-robot

Or copy and paste the code below.

4. Connect the app to the robot and drive it.

Virtual Path Following

This two wheel drive robot uses PreciseMover (PreMo) library which utilizes pure pursuit algorithm for easy path following for differential drive robots. The library features methods to move the robot in specified movements: forward or reverse by a certain distance, and turn or twist by a certain angle.

This two wheel drive robot uses DC Motors instead of continuous rotation micro servos. The user can use the "Path" section inside the ArduinoBlue app to draw a path that the robot will trace.

1. The complete tutorial can be found here.

7. Rename HM 10

1 . Connect HM 10 to Arduino (refer to step 3)

2. File → Examples → ArduinoBlue → rename → change xxxxxx to a desired name or copy paste code below.

3. Upload program and wait 30 seconds after the program uploads.

4. Unplug the Arduino.

8. Updating the Arduino library

1. Navigate to the library manager:

Sketch → Include Library → Manage Libraries → Search for ArduinoBlue and click it → Update (update button will be shown when a newer version is available)

9. Troubleshooting

Below are the list of common possible issues and solutions.

My phone can not connect to the HM 10.

  • Make sure that the HM 10 is not connected to another device. By default the HM 10 indicator LED should be flashing if it is not connected.
  • Try restarting the HM 10 by unplugging and re-plugging power.

The HM 10 bluetooth module keeps disconnecting from my phone.

  • The power supply may not be sufficient and the HM 10 might be losing power at times.
    • Make sure sufficient power is supplied to both the Arduino and other components.
  • The circuit has noise that is interfering with the HM 10.
  • You are using the HM 10 out of range. Bluetooth 4.0 BLE is rated for 100 meters outside.
  • The bluetooth connection may be interfering with other devices using the 2.4 GHz spectrum.
  • You have configured the pin using pinMode function for BLUETOOTH_TX or BLUETOOTH_RX. Don't do this. This will cause SoftwareSerial to not function.

I do not see the throttle, steering, slider, or button values on the serial monitor when I run the example sketch.

  • Make sure that you changed the BLUETOOTH_TX and BLUETOOTH_RX constants in the example sketch to the pins HM 10 TX and RX pins connected to the Arduino.
  • Make sure that the pins used to interface with the HM 10 are supported by the SoftwareSerial library and pins 1 and 0 are not used. Refer to section 2 Physical Connection of this document.

There is some other issue or my program behaves erratic.

  • Update the app and the Arduino library. Refer to section 7 to update the library.
  • Run the basic example program shown in section 4 and test that it is working. If the example program is working, then most likely there is a problem with your code.