Picture of How to Create an Arduino Compatible Bluetooth 4.0 Module

UPDATE: Wrote an Instructable on Connecting an HM-10 to an iPhone

UPDATE: I published a free iOS serial terminal app for a client, but it works well for other applications.

I've also created a walkthrough on how to write an iOS app for the HM-10.

UPDATE: I had some people mention I screwed-up and posted the wrong breakout board. For that I'm sorry, please email me and we'll talk.

I have corrected the link with a new version of the breakout that should correct "all" issues (working RX/TX LEDs).

But I'll add, please use this Instructable at your own risk. I'm a Psychology major :P

I had been looking for a cheap alternative to some of the Arduino Bluetooth devices I'd seen, which in my opinion are overpriced.

Redbear's Mini: $39.95 (Note: This is a uC and BLE combo).
Redbear's Uno Shield: $29.95
BLEDuino: $19.95 (if part of Kickstarter)
Bluegiga Shield: $69.95

After seeing these, I thought I'd try to make one; this is my bumbling process for making an Arduino Bluetooth 4.0 device at home:

I highly recommend reading details about the HM-10 and interfacing with it:

Variants of the PCB can be found here; though, many are untested.

This is a fellow to keep an eye on. He is working on creating open-source firmware to replace the HM-10 firmware.

Step 1: How to Create an Arduino Compatible Bluetooth 4.0 Module

This guide is intended to show how to interface one of these HM-10 Bluetooth Low Energy modules to an Arduino.

I started working with these little Bluetooth modules in attempt to add Bluetooth 4.0 to my robot projects.

1-40 of 43Next »
perryg11 month ago


I have Arduino Uno R3 and BLE 4.0 module(Please refer to Photos attached) with breakout board attached. When powered and searched, it broadcasts its name as CC41-A. I am pretty new to hardware. What I am trying for now is to change any default properties (for example name) of this BLE module which this is broadcasting. I am also unable to execute any AT commands in serial monitor of Arduino IDE. No AT Command is responding anything. My connections are as follows:

Rx of BLE Module <-> Tx of Arduino (Pin 11 in my case)

Tx of BLE Module <-> Rx of Arduino (Pin 10 in my case)

GND of BLE Module <-> GND of Arduino

+5V of BLE Module <-> 5V of Arduino

(Left 2 pins of BLE Module unconnected - MCU-INT and CLEAR)

My code is as follows:

#include <SoftwareSerial.h>
SoftwareSerial BLE_Serial(10, 11); // RX | TX
void setup()
pinMode(9, OUTPUT); // this pin will pull the Module pin 34 (key pin) HIGH to switch module to AT mode
digitalWrite(9, HIGH);
Serial.println("Enter AT commands:");
BLE_Serial.begin(38400); // Module default speed in AT command more
void loop()
// Keep reading from Module and send to Arduino Serial Monitor
if (BLE_Serial.available())
// Keep reading from Arduino Serial Monitor and send to Module
if (Serial.available())

I am getting "Enter AT commands" message, but not getting anything further when I enter AT commands. Please help. Its urgent. Please tell me whether there is something wrong in my code or in my connections. Thanks. :)


rshnk903 months ago

Hi Ladvien, I recently bought TinySine Bluetooth LE module ( supposed to be a HM-10, I guess) from http://www.tinyosshop.com/index.php?route=product/product&path=65_110&product_id=705

and it doesn't work with Arduino. Their support is not responding as well. I hope you could show some light on where to proceed.

Please check your Private Message. I sent you more details.

looking forward for you reply.


achand84 months ago

Datasheet has it that the CC2541 has a 8051 in it? Can we use it as a microcontroller in our projects? Is there any info about it ?

Ladvien (author)  achand84 months ago
It requires IAR tool chain. A very costly tool chain.
achand8 Ladvien4 months ago

What about TI's code composer Studio?

bparth.944 months ago

is this compatible with ccdebugger??? can i flash the firmware using cdebugger?

Ladvien (author)  bparth.944 months ago


You might find more info here: Open-Source HM-10 Firmware

bparth.94 Ladvien4 months ago

Thank you :) will try making this and get back

ZephS4 months ago

I'm missing some simple core understanding here. The HM-10 module sounds like it works similarly to the SPP serial data stream in conventional bluetooth - use AT commands to set things up, then pump bytes through the stream.

But when I read about BLE / BT4.0, it involves reading and writing from services, characteristics, and attributes. And that there is no standard serial port emulation.

Of course you could build your own custom service which sent packets of stream data to an attribute of a custom service - but nobody else would be using the same UUIDs and higher level protocol (eg: on iOS or Android apps).

So what's up? In what manner is a transparent byte stream implemented on top of services, characteristics and attributes? Is there some newer profile I can read about?

Ladvien (author)  ZephS4 months ago

In short, the HM-10 firmware assigns characteristics for RX/TX--so, in essence, it is a simple serial stream. That stated, Jnhuamoa is on their way to adding a customizable characteristics. We'll see. The CC254X chip is more than capable.

Anyway, I'd suggest you read through the most recent datasheets to learn Jnhuamoa's latest implementations.

ZephS Ladvien4 months ago

So if the HM-10 defines a custom service and passes serial data (eg: around 20 bytes at a time) as attributes, then (1) it's probably incompatible with any (other) existing serial BLE implementation, and (2) given the service and attribute IDs one could perhaps communicate with it from other more general BLE interfaces.

Is there any doc for their protocol (atop GATT) for serial? Like the UUIDs they use, any framing or flow control headers used over the air, etc? I don't find those in the datasheets on the website.

Thanks for this Instructable!

Brock_lee12 months ago

Hi. Item #5 in the BOM says 20k and the silkscreen on the PCB says 20k but the digikey link is to a 220k resistor. Which one is correct?

Ladvien (author)  Brock_lee8 months ago

Addressed, my apologies.

Also, item #6 says 470 but the link is to a 220 ohm. Thanks.

moris_zen1 year ago

Hi Ladvien ,

Thanks for posting your work .

I purchased 3 PCBs v0.93 but could not get them to work .

I wanted to bypass the regulator and some resistors - what I need is just a breakout to properly connect to the small pitch of the HM-10 .

Can you pls share the schematics of the breakout you made and mention the latest correct version ?


B.T.W - What Android SW did you use for the BLE ?

Ladvien (author)  moris_zen1 year ago

The v0.93 had some mistakes. I've a later version boards (v0.9.9) I'll send you if you like, but if you are looking to make a dead-simple breakout, my Eagle files can be found on my Github. The linik is above :)

Hi Ladvein ,
I downloaded the PCB file but would like to better understand where and regulator is connected and which resistors I can short to work only with 3.3V .
I would appreciate if you can send me the schematics .
My email is moriszen[AT]gmail[DOT]com.
B.T.W - would you be interested to make a small PCB Arduino + BLE for a project I am working on (paid) ?
schmoofer1 year ago

Has anyone at all gotten the commands "AT+DISC?" or "AT+ALLO?" to work? I've gotten almost every other command to work but those. I'm running v526 firmware and tried it both on an HM-10 and HM-11 module with CC2541 chips, but to no avail. I get no response with those commands (already switched to "Master/Central" role).

Ladvien (author)  schmoofer1 year ago

I've not played with either feature. I'm sure I'll get around to them, though.

But speaking from general experience, I'm guessing the firmware is incomplete; keep an on eye on future updates.

Thanks for letting me know. The firmware changelogs mentioned those commands being added around v523, so it wouldn't make sense to make such a bold statement and not implement them. Oh well.

dtrotzjr1 year ago

Quick update. I spent some time tonight doing some basic tests of Thomas' latest board schematic and the latest version does light up the LED's fine. :-)

Ladvien (author)  dtrotzjr1 year ago

Good to hear. I'll have the next iteration tested and posted by Tuesday.

dtrotzjr1 year ago

All of these tips were great!

One tip I have for the SM LEDs is to put a dab of of hot solder on one of the pads and while it is still hot carefully place the LED onto the pad with the tweezers, let it cool then solder the other side, once the other side is done come back and make sure the initial side is soldered well. Also be sure to note the polarity of the SM LED which is not as easy to determine as it is with their through hole counterparts.

dtrotzjr1 year ago

When you post the update, be sure to update the BOM to reflect the single 20K resistor and the optional 2x 0.1uF caps as well. Good work!

stvmac111 year ago

I really enjoyed reading this project. I'm all about diy. I've worked with bluetooth serial projects in the past, and I figured this wouldn't be any different. I see there might have been a few board versions floating around. I was able to order the 0.9.3 before you took it off OSHPark (I assume because of the non-functional TX,RX lighting - which is fine, I don't need to see them.)

Do you happen to see anything wrong with the board? I bridged 1 joint, left one open, and soldered 4 10k resistors. I'm using an arduino with a 3.3v source (no need for a voltage divider)

It powers on OK, the IO1 LED flashes when not connected, and stays HIGH when connected, but I'm unable to send or receive any AT query or communicate at all. I use SoftwareSerial - HM-10 RX to Arduino TX, and HM-10 TX to Arduino RX.

Being unable to communicate seems to be a problem with the TX, RX. Do I have the resistors on the correct joint?

Any help would be greatly appreciated! Keep up the good work!

Ladvien (author)  stvmac111 year ago

The reason I took the board down is because I had linked the wrong version. As dtrotzjr pointed out. The board version I linked still works as you have it soldered, except of course the RX/TX LEDs don't work. I'm currently working on corrections and will have new boards sent off by end of day. If you are able to Skype: thomas_ladvien. I would like to replace your boards for you :)

What a simple fix! I switched the RX and TX lines and now we're rolling. TY

dtrotzjr1 year ago

Parts are starting to roll in, but I didn't realize that your latest boards do not properly light the TX/RX LEDs is that correct? Can you please update this instructable to reflect this? Can you update the board too?

Ladvien (author)  dtrotzjr1 year ago

Yes, yes, and yes.

I might need a day or two. I apologize, I thought I put a note in the Instructable stating they didn't work. I'll create a board with working TX/RX LEDs and post it, but I wont order myself. Sorry, too many irons in the fire right now.

musawir1 year ago

I purchased a BLE module that is based off of the same TI CC2540 chip you used in your project, but has a different PCB package which I don't quite understand. Here is the thing I have bought: http://www.aliexpress.com/snapshot/310173495.html

I have a couple of questions if you don't mind answering. First, are ALL the pins on these modules needed? Can't I just solder some wires out of the pin slots that I will use and leave the rest alone? Secondly, the debugger pins on my module are listed as: GND, 3.3V, P2.2, P2.1, RESET
How do I interface this to the FTDI?

dtrotzjr1 year ago
This is awesome! Thank you for sharing! I ordered all my parts tonight. I'll let you know how it goes!
danasf1 year ago
Thanks for this tutorial, it was super helpful.

I managed to get a HM-10 working with Android 4.4, Arduino and a RGB LED strip using Google's BLE sample code. It's very rough at the moment (first attempt at putting together an Android app) but it does function: https://github.com/danasf/hm10-android-arduino
Ladvien (author)  danasf1 year ago
Glad it was helpful. Thank you so much for sharing. Now I just gotta get me an Android device with BLE. :)
sjúnior41 year ago
Hi cbrittain1,

First of all, congrats for your nice work here !

I would like to ask you for some help. I bought a BLE Shield for Arduino from (http://imall.iteadstudio.com/development-platform/arduino/shields/im130704001.html). They made this shield using your Hm-10 Bluetooth module. But I have no idea on how to program it or send AT commands from Arduino.

I read the “AT commands” at the datasheet and I tried to send "AT commands” from arduino to BLE shield using this code ( http://arduino.cc/en/Reference/SoftwareSerial ) but I only received the commands back.

Do you have any arduino sketch handling this that you can share with me ?

Thanks in advanced,
Ladvien (author)  sjúnior41 year ago
I should clear up; I didn't make the HM-10, just a stupid ole' breakout.

That said, I'd personally start playing with with a serial specific program (such as RealTerm). I've looked over their shield schematic, it's pretty similar, though, they do include a linear voltage-regulator, which in my opinion defeats some great attributes of BLE (like the LE part). So, in theory, you could plug directly into the shield with an FTDI breakout and talk to the HM-10 without the Arduino involved mucking up the works.

The HM-10 has been created by JNHuamao (nice folk, by the way , www.jnhuamao.cn) and they've had several different firmware versions. Not all firmware have the same AT commands.

I can state, all of the have the

Send: "AT"
Get: "AT+OK"

As a confirmation that the connection is good.

After that, it's a matter of programming the Arduino correctly. A good thread to read is here: http://forum.arduino.cc/index.php?topic=161151.0

Your shield schematic is here:

Let me know how it goes. They are great little modules :)
I will study this stuff and came back later.

Thanks for your answer and tips !
DJJules1 year ago
Nice Work here
alinke1 year ago
well done, nice job!
you call yourself all hack, I hope you mean that as a compliment to yourself. The smd soldering advice alone makes this valuable. Good work, I look forward to more of your hacks.
1-40 of 43Next »