Since I first posted about the HM-10 the firmware has been update several times and some of the commands have changed. Therefore, I decided to redo the guide. For this update I am using modules with firmware 5.49 (regular) except the one I am using for the firmware update guide which started with v5.40 and becomes 5.47.
Firmware version 5.49 is now available from the Jinan Huamao website. There are 2 versions; regular and long name. The regular firmware does not have an updated read me so I don’t know what changes, if any, have been made. The long name firmware adds, you guessed it, long names. Device names can now be up to 29 characters. At the same time the iBeacon function and the ANCS function have been removed. Unless you desperately need long names I suggest you stay with the regular firmware.
2017-07-26 Firmware 5.50 now available.
2017-09.01 Firmware 6.01 now available (bug fixes, no new commands)
2017-10.xx Firmware 6.03 now available Extended the CO command. Added AT+MPIO (multi PIO control). See the readme file for details. The manual has not been updated at this time (Nov 2017).
2018-03-24. Jinan Huamao support say that the HM-10 (original ones, not copies) are compatible with Android 8. I do not have Android 8 so have not tried and cannot confirm.
They have now added a comment on their website saying the HM-10 works with Android 8.
2018-03 HM-10s with firmware 6.05 are now available but Jinan Huamao are not releasing the firmware. Not sure if this is just for now or permanently. v6.03 is still the latest firmware available for download.
It appears that Jinan Huamao are cracking down on fakes. Apart from not releasing the latest firmware the latest HM-10s have “HM-10″ screen printed on the PCB.
Image taken from the Jinan Huamao website
Bluetooth 4 BLE
HM-10 Services and Characteristics
Get Started With the HM-10
Getting an Arduino talking to the HM-10
HM-10 AT Commands: Using the Arduino’s serial monitor to talk to the HM-10
Scanning for other HM-10s
Arduino to Arduino using HM-10s
HM-10 to HM-10: Turning an LED on and off
HM-10 Programmable Pins
HM-10 Stand-alone MODE 2 and Controlling LEDs
HM-10 Stand-alone: Remote Light Sensor
HM-10: Add a second Custom Characteristic
Using the HM-10 with non-HM-10 modules (not fully working)
HM-10 as an iBeacon
HM-10 Updating the firmware
The HM-10 is a small 3.3v SMD Bluetooth 4.0 BLE module based on the TI CC2540 or CC2541 Bluetooth SOC (System On Chip). The HM-10 is made by Jinan Huamao and is one of many Bluetooth devices they produce including the HM-11 which is operationally the same as the HM-10 but has a smaller footprint with fewer pins broken out.
There are 2 versions of the HM-10; the HM-10C and the HM-10S
The HM-10C does not have the pads along the bottom (the usb connections) and has 26 pads instead of 34 which makes it a little cheaper to produce. There may be other differences (such as the type of crystal used) due to the date of manufacture. Operationally the two are the same though.
HM-10 Basic specs
- +2.5v to +3.3v
- Requires up to 50mA
- Uses around 9mA when in an active state
- Use 50-200uA when asleep
- RF power: -23dbm, -6dbm, 0dbm, 6dbm
- Bluetooth version 4.0 BLE
- Default baud rate for the serial connection is 9600
- Default PIN is 000000
- Default name is HMSoft
- Based on the CC2540 or the CC2541 chip
The latest HM-10s all appear to the the CC2541 chip. This is the same as the CC2540 except it is lower power and has a shorter range. The CC254x is based on the 8051 and runs at 32MHz.
The HM-10 is has become a very popular Bluetooth 4 BLE module for use with the Arduino. In part due to the standard UART serial connection that makes it fairly straight forward to connect to an Arduino. The UART layer is a good thing and a bad thing, it allows ease of use but it hides the BLE layer so you have no control over the actual BLE side of things. The HM-10 is Bluetooth version 4.0 only. This means it cannot connect to Bluetooth 2/2.1 modules such as the HC-06 and HC-05.
The HM-10 is controlled via AT commands which are sent over the serial UART connection. There are a host of commands, some simple, some more complex, and these are covered later.