Skip to content
Buy 10+ on select items — save 10% auto-applied
Free US shipping on orders $35+
Order by 3pm ET — ships same-day from the US
Skip to main content

Arduino Nano HM-10 BLE: Control from iPhone | ShillehTek

May 17, 2026 25 views

Arduino Nano HM-10 BLE: Control from iPhone | ShillehTek
Project

Build an iPhone-controlled Arduino Nano project using the HM-10 BLE module to send simple commands that toggle outputs over BLE with ShillehTek parts.

25 min Beginner3 parts

Project Overview

Arduino Nano + HM-10 BLE module: In this project, you will use an HM-10 Bluetooth Low Energy (BLE 4.0) module to send commands from an iPhone to an Arduino and toggle an LED (or trigger other actions) on demand.

Apple blocks Bluetooth Classic for most hobby devices on iOS, which is why modules like the HC-05 will not pair with an iPhone. The HM-10 uses BLE, which iOS supports, while still giving you a simple UART-style serial connection to the Arduino.

  • Time: ~25 minutes
  • Skill level: Beginner
  • What you will build: An Arduino that reads BLE commands from your iPhone and turns an output on or off (example: built-in LED, relay, motor driver).
HM-10 BLE module used to control an Arduino from an iPhone over Bluetooth Low Energy
HM-10 BLE 4.0 module for iPhone-compatible Bluetooth control.

Quick reference: HM-10 is BLE 4.0 and iPhone compatible; HC-05 is Bluetooth Classic and not iPhone compatible for typical hobby pairing.

Parts List

From ShillehTek

External

  • iPhone or iPad
  • LightBlue app (free from the App Store) - BLE scanner/tester used to connect and send data
  • 2 x 1 kΩ resistors (optional) - for a voltage divider on the HM-10 RX pin if your Arduino logic is 5 V

Note: The HM-10 uses BLE 4.0, which is what iOS allows for third-party Bluetooth. HC-05 is Bluetooth Classic and will not pair with an iPhone for typical maker projects due to Apple's restrictions.

Step-by-Step Guide

Step 1 - Inspect the Module

Goal: Identify the HM-10 pins and confirm it is a 3.3 V logic BLE module.

What to do: Check that your HM-10 breakout exposes the typical 6-pin header and note that it is based on the TI CC2541. Plan your wiring so TX/RX will cross correctly to the Arduino.

Top view of an HM-10 BLE module showing the CC2541-based breakout and its header pins
HM-10 (TI CC2541) with 3.3 V logic.

Expected result: You know which pins are VCC, GND, TX, and RX before wiring.

Step 2 - Wire It Up

Goal: Connect the HM-10 to the Arduino over UART using SoftwareSerial pins.

What to do: Wire power and ground first, then cross TX/RX. If your Arduino runs 5 V logic, use a resistor divider into the HM-10 RX pin.

HM-10 BLE module wired to an Arduino with TX and RX cross-connected for serial communication
UART hookup: Arduino TX to HM-10 RX, and Arduino RX to HM-10 TX.
  • HM-10 VCC to 3.3 V or 5 V (the breakout has a regulator)
  • HM-10 GND to GND
  • HM-10 TX to Arduino D2 (Arduino RX via SoftwareSerial)
  • HM-10 RX to Arduino D3 (Arduino TX via SoftwareSerial) - use a divider if your Arduino runs 5 V logic

Expected result: The module is powered and connected to Arduino pins D2 and D3 for BLE serial data.

Step 3 - Upload the Arduino Sketch

Goal: Make the Arduino read incoming BLE characters and toggle the built-in LED on pin 13.

What to do: Upload the sketch below. It listens on SoftwareSerial for characters from the HM-10. Send 1 to turn the LED on and 0 to turn it off.

Code:

#include <SoftwareSerial.h>

SoftwareSerial ble(2, 3);   // RX, TX
const int LED = 13;

void setup() {
  Serial.begin(9600);
  ble.begin(9600);
  pinMode(LED, OUTPUT);
}

void loop() {
  while (ble.available()) {
    char c = ble.read();
    Serial.write(c);
    if (c == '1') digitalWrite(LED, HIGH);
    if (c == '0') digitalWrite(LED, LOW);
  }
  while (Serial.available()) ble.write(Serial.read());
}

Expected result: The Arduino is ready to respond to BLE characters and you can view received data in the Serial Monitor.

Step 4 - Connect from Your iPhone (LightBlue)

Goal: Discover the HM-10 in a BLE app and write characters to its UART-like characteristic.

What to do: Open LightBlue, tap the HM-10 device, then locate the writable characteristic and send text values.

LightBlue iOS app scanning BLE devices and showing an HM-10 device named HMSoft
In LightBlue, the HM-10 typically appears as "HMSoft" with an RSSI value.
  1. Open LightBlue on your iPhone
  2. Tap the HM-10 entry (default name: "HMSoft")
  3. Find the writable characteristic FFE1
  4. Send the text 1 to turn the Arduino LED on
  5. Send 0 to turn it off

Expected result: Your iPhone is connected over BLE and can write data to the HM-10.

Step 5 - Test the Live Control

Goal: Confirm the Arduino responds immediately to BLE commands.

What to do: In the LightBlue write field for the FFE1 characteristic, repeatedly send 1 and 0 and observe the LED on the Arduino.

Expected result: The LED turns on with "1" and turns off with "0" in real time.

Step 6 - Where to Take It Next

Goal: Extend the same BLE command link to real projects.

What to do: Use the same approach (write to FFE1, read characters on the Arduino) and expand what each command does.

  • Build a custom iOS Swift app that talks to characteristic FFE1 for app-based control
  • Swap the LED for a relay for smart-plug-style control from your phone
  • Use the HM-10 AT commands to rename the device, set a password, or lower broadcast power
  • Pair with an L298N motor driver for an iPhone-controlled RC car
  • Add a temperature sensor and let your iPhone read live temperature over BLE

Expected result: You have a working BLE-to-Arduino control channel you can apply to relays, motors, and sensors.

Conclusion

You built an iPhone-compatible Arduino controller using an Arduino Nano and the HM-10 BLE module, then used LightBlue to write characters (FFE1) that toggle an output in real time. This is the practical BLE alternative to Bluetooth Classic modules when iOS compatibility matters.

Want the exact parts used in this build? Grab them from ShillehTek.com. If you want help customizing this project or building something for your product, check out our IoT consulting services.

Photo credit: HM-10 photos and wiring are credited to Instructables.