Inquire: Call 0086-755-23203480, or reach out via the form below/your sales contact to discuss our design, manufacturing, and assembly capabilities.
Quote: Email your PCB files to Sales@pcbsync.com (Preferred for large files) or submit online. We will contact you promptly. Please ensure your email is correct.
Notes: For PCB fabrication, we require PCB design file in Gerber RS-274X format (most preferred), *.PCB/DDB (Protel, inform your program version) format or *.BRD (Eagle) format. For PCB assembly, we require PCB design file in above mentioned format, drilling file and BOM. Click to download BOM template To avoid file missing, please include all files into one folder and compress it into .zip or .rar format.
If you’ve been working with classic Bluetooth modules like the HC-05 for your Arduino projects and feel limited by their power consumption, the HM-10 BLE module is worth exploring. As someone who has designed numerous IoT prototypes over the years, I can tell you that Bluetooth Low Energy has become the go-to wireless protocol for battery-powered applications, and the HM-10 makes implementing BLE surprisingly straightforward.
Understanding Bluetooth Low Energy and Why It Matters
Bluetooth Low Energy, often abbreviated as BLE or Bluetooth Smart, operates fundamentally differently from classic Bluetooth. While traditional Bluetooth maintains a continuous connection that drains batteries quickly, BLE sends short bursts of data and then returns to a low-power sleep state. This architectural difference makes BLE ideal for sensors, wearables, and IoT devices where battery life is critical.
The HM-10 BLE module Arduino combination has gained popularity because it bridges the gap between complex BLE protocol implementation and simple serial communication. You get all the power-saving benefits of BLE without needing to understand the underlying protocol stack.
HM-10 BLE Module Technical Specifications
Before diving into the wiring and code, understanding what you’re working with helps avoid common pitfalls. The HM-10 is built around the Texas Instruments CC2540 or CC2541 System on Chip.
Parameter
Specification
Bluetooth Version
4.0 BLE
Operating Frequency
2.4GHz ISM Band
Modulation
GFSK (Gaussian Frequency Shift Keying)
Operating Voltage
2.0V to 3.7V (module)
Breakout Board Voltage
3.6V to 6V (with onboard regulator)
Logic Level
3.3V
Active Current
~8.5mA
Sleep Current
50µA to 200µA
Data Rate
2-6 KB/s
Communication Range
Up to 100 meters (open space)
Default Baud Rate
9600 bps
Operating Temperature
-20°C to +105°C
Module Dimensions
27mm x 13mm x 2.2mm
HM-10 BLE Module Pinout
The HM-10 typically comes mounted on a breakout board that makes interfacing with Arduino much simpler. Here’s what each pin does:
Pin
Name
Description
1
VCC
Power input (3.6V-6V on breakout boards)
2
GND
Ground connection
3
TXD
Transmit data to Arduino RX
4
RXD
Receive data from Arduino TX (3.3V logic)
5
STATE
HIGH when connected, LOW when disconnected
6
BRK
Break connection pin
The 3.3V Logic Level Issue
Here’s something that catches many beginners off guard: while the breakout board accepts 5V power input thanks to its onboard regulator, the RX pin operates at 3.3V logic. Connecting your Arduino’s 5V TX pin directly to the HM-10’s RX can cause erratic behavior or damage over time.
Use a simple voltage divider with a 1kΩ resistor in series and a 2.2kΩ resistor to ground. This combination safely steps down the 5V signal to approximately 3.3V.
Genuine vs Clone HM-10 Modules
This is something you need to know before purchasing. The market is flooded with clone HM-10 modules that look identical but behave differently. The easiest way to identify a genuine module is to look for a 32KHz crystal oscillator on the board. Genuine modules have this component, while most clones lack it.
Feature
Genuine HM-10
Clone HM-10
32KHz Crystal
Present
Usually absent
Firmware
Full AT command support
Limited commands
iOS Compatibility
Works out of box
May require firmware flash
Manufacturer Marking
“HM-10” on both layers
Often different markings
AT Command Response
Consistent
May vary
If you end up with a clone (often labeled as MLT-BT05 or similar), you’ll need to flash genuine firmware before it works reliably with smartphones and AT commands.
Wiring HM-10 BLE Module to Arduino
The connection is straightforward using software serial, which keeps the hardware serial port free for debugging.
HM-10 Arduino Connection Table
HM-10 Pin
Arduino Uno Pin
Notes
VCC
5V
Breakout board has voltage regulator
GND
GND
Common ground
TXD
Digital Pin 2 (RX)
Direct connection
RXD
Digital Pin 3 (TX)
Through voltage divider
STATE
Not connected
Optional status monitoring
BRK
Not connected
Optional disconnect control
Basic Arduino Code for HM-10 BLE Communication
Let’s start with a simple sketch that establishes bidirectional communication between your Arduino and a smartphone via the HM-10 BLE module.
#include <SoftwareSerial.h>
// Define HM-10 serial pins
SoftwareSerial BTSerial(2, 3); // RX, TX
int ledPin = 13;
void setup() {
// Initialize Serial Monitor
Serial.begin(9600);
// Initialize HM-10 serial communication
BTSerial.begin(9600);
pinMode(ledPin, OUTPUT);
Serial.println(“HM-10 BLE Module Ready”);
Serial.println(“Waiting for BLE connection…”);
}
void loop() {
// Receive data from HM-10 and display on Serial Monitor
if (BTSerial.available()) {
char data = BTSerial.read();
Serial.print(“Received: “);
Serial.println(data);
// LED control based on received data
if (data == ‘1’) {
digitalWrite(ledPin, HIGH);
BTSerial.println(“LED ON”);
}
else if (data == ‘0’) {
digitalWrite(ledPin, LOW);
BTSerial.println(“LED OFF”);
}
}
// Send data from Serial Monitor to HM-10
if (Serial.available()) {
char data = Serial.read();
BTSerial.write(data);
}
}
Connecting HM-10 BLE Module to Smartphone
Unlike classic Bluetooth modules, you cannot pair the HM-10 through your phone’s standard Bluetooth settings. BLE requires a dedicated app that supports the BLE protocol.
Step 1: Download a BLE terminal app. For Android, “Serial Bluetooth Terminal” or “BLE Terminal” works well. iOS users can use “LightBlue” or similar apps.
Step 2: Power up your Arduino with the HM-10 connected. The onboard LED should blink rapidly, indicating the module is advertising and ready for connection.
Step 3: Open your BLE app and scan for devices. Look for “HMSoft” or “HM-10” in the device list.
Step 4: Tap to connect. Once connected, the HM-10’s LED changes from rapid blinking to solid ON.
Step 5: Navigate to the service UUID 0xFFE0 and characteristic 0xFFE1 to send and receive data.
Step 6: Send “1” to turn the LED on and “0” to turn it off.
HM-10 AT Commands Configuration
The HM-10 supports an extensive set of AT commands for configuration. Unlike HC-05 modules, the HM-10 accepts AT commands without needing line endings (though newer firmware versions accept both formats).
Essential AT Commands Reference
Command
Function
Example Response
AT
Test communication
OK
AT+NAME?
Query device name
OK+NAME:HMSoft
AT+NAME[name]
Set device name
OK+Set:[name]
AT+ADDR?
Query MAC address
OK+ADDR:xxxxxxxxxxxx
AT+BAUD?
Query baud rate
OK+Get:0 (0=9600)
AT+BAUD[0-8]
Set baud rate
OK+Set:[value]
AT+ROLE?
Query role
OK+Get:0 (0=Slave)
AT+ROLE[0/1]
Set role (0=Slave, 1=Master)
OK+Set:[value]
AT+PASS?
Query password
OK+Get:123456
AT+PASS[xxxxxx]
Set 6-digit password
OK+Set:[value]
AT+RESET
Restart module
OK+RESET
AT+RENEW
Factory reset
OK+RENEW
AT+IMME?
Query work mode
OK+Get:0
AT+IMME[0/1]
Set work mode
OK+Set:[value]
AT+NOTI[0/1]
Enable/disable notifications
OK+Set:[value]
Baud Rate Values
Value
Baud Rate
0
9600 (default)
1
19200
2
38400
3
57600
4
115200
5
4800
6
2400
7
1200
8
230400
Arduino Code for AT Command Configuration
Use this sketch to send AT commands to your HM-10 module:
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3); // RX, TX
void setup() {
Serial.begin(9600);
BTSerial.begin(9600);
Serial.println(“HM-10 AT Command Mode”);
Serial.println(“Type AT commands in Serial Monitor”);
}
void loop() {
// Send AT commands from Serial Monitor to HM-10
if (Serial.available()) {
BTSerial.write(Serial.read());
}
// Display HM-10 response on Serial Monitor
if (BTSerial.available()) {
Serial.write(BTSerial.read());
}
}
Setting Up HM-10 as Master and Slave
One powerful feature of the HM-10 is its ability to function as either master or slave, enabling direct Arduino-to-Arduino wireless communication.
Configuring the Slave Module
Send these commands to the slave HM-10:
AT+ROLE0 (Set as peripheral/slave)
AT+ADDR? (Note the MAC address)
AT+IMME0 (Auto-start advertising)
Configuring the Master Module
Send these commands to the master HM-10:
AT+ROLE1 (Set as central/master)
AT+IMME1 (Wait for commands before connecting)
AT+CON[slave_address] (Connect to specific slave)
Once configured, power cycling both modules will establish an automatic connection. The LEDs on both modules will turn solid when connected.
Module not responding to AT commands: Verify your baud rate matches the module’s configuration. Try 9600 first, then 115200 for newer firmware. Ensure you’re not connected to any device, as AT commands only work when disconnected.
Cannot find module in smartphone scan: Make sure you’re using a BLE-compatible app, not standard Bluetooth settings. Verify the module is powered and the LED is blinking.
Garbled characters in serial monitor: Baud rate mismatch between Arduino code and HM-10 configuration. Use AT+BAUD? to check the current setting.
Module connects but no data transfer: Check that you’re accessing the correct characteristic (0xFFE1) in your BLE app. Some apps require you to enable notifications for that characteristic.
Frequently Asked Questions
Can HM-10 BLE module connect to HC-05 or HC-06?
No, the HM-10 uses Bluetooth 4.0 BLE protocol, which is incompatible with classic Bluetooth modules like HC-05 and HC-06. These operate on Bluetooth 2.0/2.1, and the protocols cannot communicate with each other. You need two BLE devices to communicate wirelessly.
What is the default password for HM-10 BLE module?
The default password (PIN) for the HM-10 module is “000000” (six zeros) or “123456” depending on the firmware version. You can check the current password using the AT+PASS? command and change it with AT+PASS followed by your new 6-digit password.
Why does my iPhone not see the HM-10 module?
iPhones do not display BLE devices in the standard Bluetooth settings menu. You need to use a dedicated BLE app like LightBlue or nRF Connect to discover and connect to the HM-10. This is normal behavior for all BLE peripherals on iOS.
How do I wake up HM-10 from sleep mode?
To put the HM-10 in sleep mode, send the AT+SLEEP command. To wake it up, send a long string of characters (more than 80 bytes) through the serial connection. Alternatively, you can toggle the module’s power or use the BRK pin if available on your breakout board.
What is the maximum data transmission speed of HM-10?
The HM-10 supports data transfer rates between 2-6 KB/s in typical operation. While this is significantly slower than classic Bluetooth, it’s sufficient for sensor data, control commands, and small file transfers. The speed limitation is a trade-off for the dramatically lower power consumption that BLE provides.
Final Thoughts
The HM-10 BLE module Arduino combination opens up possibilities that classic Bluetooth simply cannot match, especially for battery-powered projects. The dramatically lower power consumption means your projects can run for months on a single battery, and full iOS compatibility expands your potential user base significantly.
The learning curve is slightly steeper than HC-05 since you need BLE-specific apps and understanding of services and characteristics, but once you grasp these concepts, the HM-10 becomes just as easy to work with as any other serial communication module.
Start with the basic LED control example to verify your setup, then experiment with AT commands to customize the module’s behavior. From there, you can build sophisticated IoT devices, wearables, and smart home systems that leverage the efficiency of Bluetooth Low Energy.
Inquire: Call 0086-755-23203480, or reach out via the form below/your sales contact to discuss our design, manufacturing, and assembly capabilities.
Quote: Email your PCB files to Sales@pcbsync.com (Preferred for large files) or submit online. We will contact you promptly. Please ensure your email is correct.
Notes: For PCB fabrication, we require PCB design file in Gerber RS-274X format (most preferred), *.PCB/DDB (Protel, inform your program version) format or *.BRD (Eagle) format. For PCB assembly, we require PCB design file in above mentioned format, drilling file and BOM. Click to download BOM template To avoid file missing, please include all files into one folder and compress it into .zip or .rar format.