Contact Sales & After-Sales Service

Contact & Quotation

  • 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.
Drag & Drop Files, Choose Files to Upload You can upload up to 3 files.

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.

HM-10 BLE Module Arduino: Low Energy Bluetooth

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.

ParameterSpecification
Bluetooth Version4.0 BLE
Operating Frequency2.4GHz ISM Band
ModulationGFSK (Gaussian Frequency Shift Keying)
Operating Voltage2.0V to 3.7V (module)
Breakout Board Voltage3.6V to 6V (with onboard regulator)
Logic Level3.3V
Active Current~8.5mA
Sleep Current50µA to 200µA
Data Rate2-6 KB/s
Communication RangeUp to 100 meters (open space)
Default Baud Rate9600 bps
Operating Temperature-20°C to +105°C
Module Dimensions27mm 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:

PinNameDescription
1VCCPower input (3.6V-6V on breakout boards)
2GNDGround connection
3TXDTransmit data to Arduino RX
4RXDReceive data from Arduino TX (3.3V logic)
5STATEHIGH when connected, LOW when disconnected
6BRKBreak 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.

FeatureGenuine HM-10Clone HM-10
32KHz CrystalPresentUsually absent
FirmwareFull AT command supportLimited commands
iOS CompatibilityWorks out of boxMay require firmware flash
Manufacturer Marking“HM-10” on both layersOften different markings
AT Command ResponseConsistentMay 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 PinArduino Uno PinNotes
VCC5VBreakout board has voltage regulator
GNDGNDCommon ground
TXDDigital Pin 2 (RX)Direct connection
RXDDigital Pin 3 (TX)Through voltage divider
STATENot connectedOptional status monitoring
BRKNot connectedOptional 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

CommandFunctionExample Response
ATTest communicationOK
AT+NAME?Query device nameOK+NAME:HMSoft
AT+NAME[name]Set device nameOK+Set:[name]
AT+ADDR?Query MAC addressOK+ADDR:xxxxxxxxxxxx
AT+BAUD?Query baud rateOK+Get:0 (0=9600)
AT+BAUD[0-8]Set baud rateOK+Set:[value]
AT+ROLE?Query roleOK+Get:0 (0=Slave)
AT+ROLE[0/1]Set role (0=Slave, 1=Master)OK+Set:[value]
AT+PASS?Query passwordOK+Get:123456
AT+PASS[xxxxxx]Set 6-digit passwordOK+Set:[value]
AT+RESETRestart moduleOK+RESET
AT+RENEWFactory resetOK+RENEW
AT+IMME?Query work modeOK+Get:0
AT+IMME[0/1]Set work modeOK+Set:[value]
AT+NOTI[0/1]Enable/disable notificationsOK+Set:[value]

Baud Rate Values

ValueBaud Rate
09600 (default)
119200
238400
357600
4115200
54800
62400
71200
8230400

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:

  1. AT+ROLE0 (Set as peripheral/slave)
  2. AT+ADDR? (Note the MAC address)
  3. AT+IMME0 (Auto-start advertising)

Configuring the Master Module

Send these commands to the master HM-10:

  1. AT+ROLE1 (Set as central/master)
  2. AT+IMME1 (Wait for commands before connecting)
  3. 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.

HM-10 vs HC-05: Key Differences

FeatureHM-10HC-05
Bluetooth Version4.0 BLE2.0 + EDR
Power Consumption~8.5mA active, 50-200µA sleep~30mA active
Phone PairingRequires BLE appStandard Bluetooth settings
iOS CompatibilityFull supportNot supported
RangeUp to 100m~10m
Data Rate2-6 KB/sUp to 3 Mbps
Battery LifeExcellentModerate
Cross-compatibilityBLE onlyClassic Bluetooth only

Useful Resources and Downloads

ResourceDescription
HM-10 Datasheet (JNHuaMao)Official manufacturer documentation
Martyn Currey’s HM-10 GuideComprehensive AT command reference
Serial Bluetooth Terminal AppAndroid BLE terminal
LightBlue App (iOS)iOS BLE explorer
Arduino SoftwareSerial LibraryOfficial library documentation

Troubleshooting Common HM-10 Issues

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Contact Sales & After-Sales Service

Contact & Quotation

  • 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.

Drag & Drop Files, Choose Files to Upload You can upload up to 3 files.

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.