HM-10
HM-10 is a Bluetooth module which can be operated on low energy. The biggest advantage of low energy Bluetooth module is that it can work on master as well as slave mode. It can be easy interfaced with android phones and I phone and the operating voltage on which it works is 2.7 to 3.6v (50 mA) .It has a range of 100 meters.
BLE is intended for light duty cycle devices that support small data throughput and operate a long time on a coin-sized battery. It is design in such a way that it’s supports all the platforms starting from windows pc, mac operating system.
What is HM10 BLE 4.0 Module?
The HM10 is a serial BLE module (Bluetooth-Low-Energy) which is intended to use for the low power consumption applications and can last long even with a coin-sized battery. The HM10 is a Bluetooth 4.0 module based on the Texas Instruments CC2540 or CC2541 BLE System SoC (System on Chip). The firmware and design of the module is made and managed by Jinan Huamao Technology. The module comes with serial/UART layer which makes the device to be able to interface with different microcontrollers. The HM10 is ideal for creating simple connections and using it with or as an iBeacon.
Internal Structural diagram:


CC2540 Bluetooth radio low cost chip, efficient Bluetooth chip which consume very low power.
It contains a UART interface and with baud rate setup function (9600s). The CC2540 combines an excellent RF transceiver with an industry-standard enhanced 8051 MCU, in-system programmable flash memory, 8-KB RAM, and many other powerful supporting features and peripherals. It can be operated on low power mode in which it consumes very low power.
Low Power
- Active Mode RX Down to 19.6 mA
- Active Mode TX (–6dBm): 24 mA
- Power Mode 1 (3-µs Wake-Up): 235 µA
- Power Mode 2 (Sleep Timer On): 0.9 µA
- Power Mode 3 (External Interrupts): 0.4 µA
- Wide Supply Voltage Range (2 V–3.6 V)
Full RAM and Register Retention in All Power Modes
Difference between HM10 and other Bluetooth Module
The major difference HM10 possess is the Bluetooth Version. The HM10 is Bluetooth 4.0 module, so it comes with all Bluetooth Version 4.0 features such as speed, throughput and range. The HM10 offers a data rate of up to 24 Mbps with low-energy/low-power consumption. Along with this the HM10 offers a distance range of 100 meters in open space. Compare to other Bluetooth modules such as HC-05 which is a Bluetooth 2.0 based module, the HM10 certainly performs better than the HC-05. The HC-05 only offers 3 Mbps compared to HM10 which is quite less.
Bluetooth module HC-05 and HC-06 are still very popular among makers and hobbyists as they are cheap and easy to interface. We also made many projects using HC-05/06 and interfaced them with many other microcontrollers:

Today we will interface HM-10 BLE Module with Arduino Uno to control an LED wirelessly using Bluetooth protocol. The On/Off commands will be sent by Smartphone.
Components Required
Hardware:
- Arduino UNO
- HM10 Bluetooth Module
- Resistors(1 kΩ, 470 Ω)
- Jumper Wires
Software:
- Arduino IDE
- Arduino Bluetooth Controller(HM-10 Module) Android App
- Android Smart phone
Interfacing with Arduino:
Circuit diagram for connecting Arduino and HM-10 Bluetooth module is very simple as shown below.

Arduino Bluetooth Controller (HM-10 Module) Android Application
The Arduino Bluetooth Controller (HM-10 Module) is an android application which is available free on Google Play Store. This app is having easy and simple interface for HM-10 BLE Module. While testing, it was able to find HM-10 quickly and it connected instantly with HM-10. The app has some cool feature like you can create a button and customize it with custom name and functions. Here we will how to create two buttons in this Bluetooth controller app to turn on and off the LED connected with Arduino.
How to setup Arduino Bluetooth Controller (HM-10 Module) Android App:
- The Home page of the app will look like below where you can find features like, connect Device, Search Icon, Delete Icon, Device Status, Send Text, Add Template etc. Start with searching the Device either by clicking on Search Icon or by clicking to three dots on the upper right corner and choose connect Device.

- All available devices will be shown in the screen. Choose the correct HM-10 Module.

Now the HM-10 will be successfully connected and you will be able to see the status of HM-10 in the Top of Screen

- Now either you can directly send a text or String by writing on the text section and hit arrow to send or you can create a custom template.

- To create a custom template to save time. Click on the “+” icon on upper right corner and fill the details. The “Name” is button name, the “Text” field is for texts or string which will be sent to HM-10 and “Description” is just the button description that how the button will function.

- Firstly, create a button for turn LED ONand give it a Green Color. The Button will send “N” letter to HM-10 which will turn on the LED connected to Arduino. Similarly create a button for LED OFF and give it a Red Color. . The Button will send “F” letter to HM-10 which will turn off the LED connected to Arduino.

- Now you can see the two buttons created just below the Text Field. Now if you want to control LED then just click on the Buttons.

This finishes the setting up android app to control the HM-10 module. Now we will start with the programming Arduino Uno to get the characters from Android App.
Code:
#include <SoftwareSerial.h>
SoftwareSerial HM10(2, 3); // RX = 2, TX = 3
char appData;
String inData = “”;
void setup()
{
Serial.begin(9600);
Serial.println(“HM10 serial started at 9600”);
HM10.begin(9600); // set HM10 serial at 9600 baud rate
pinMode(13, OUTPUT); // onboard LED
digitalWrite(13, LOW); // switch OFF LED
}
void loop()
{
HM10.listen(); // listen the HM10 port
while (HM10.available() > 0) { // if HM10 sends something then read
appData = HM10.read();
inData = String(appData); // save the data in string format
Serial.write(appData);
}
if (Serial.available()) { // Read user input if available.
delay(10);
HM10.write(Serial.read());
}
if ( inData == “F”) {
Serial.println(“LED OFF”);
digitalWrite(13, LOW); // switch OFF LED
delay(500);
}
if ( inData == “N”) {
Serial.println(“LED ON”);
digitalWrite(13, HIGH); // switch OFF LED
delay(500);
digitalWrite(13, LOW); // switch OFF LED
delay(500);
}
}
Applications of HM-10 Module
- Robotics
- Mobile Phone Accessories
- Servers
- Computer Peripherals
- Sports and Leisure Equipment
- USB Dongles
- Health Care and Medical
Reference:
https://components101.com/wireless/hm-10-bluetooth-module
https://www.instructables.com/id/How-to-Use-Bluetooth-40-HM10/
http://www.martyncurrey.com/hm-10-bluetooth-4ble-modules/