Bluetooth Modules

Updated: 21.07.2017

new Bluetooth Modules

There are many very similar Bluetooth modules available and sometimes it can be difficult finding out, not only which one you have, but also how yo use them. Here I look at some of the modules I have and try to show the basic settings.

Getting Started
Connecting To A Computer
Android Apps

Bluetooth 2.0/2.1 EDR Modules
    HC-06 (ZG-B23090W) Bluetooth 2.0 EDR modules
    HC-05 (ZG-B23090W) Bluetooth 2.0 EDR modules
    SPP-C HC-06 / BT06 HC-06
    HC-06 zs-040 hc01.com v2.0
    HC-05 zs-040 hc01.com V2.1
    HC-05 FC-114 and HC-06 FC-114
    HC-05 and HC-06 zs-040 Bluetooth modules

Bluetooth 4 / BLE Modules
    HM-10
    HM-11
    BT05-A mini BLE Bluetooth V4.0 iBeacon
    AT-09 Bluetooth V4.0 CC2541

 

Getting Started

Determining what modules you have and what firmware they are running is key to getting them to work and there are various things you can use to find more information.
1. Markings on the board or the breakout board.
2. Number and type of pins on the breakout board.
3. The type of Bluetooth.
4. The chip(s) used.
5. Talking to the module.

But the first thing you should do is try it. Power it up, make sure it works and see what name it transmits. If it transmits “HC-06″ or “HC-05″ you know it will be Bluetooth 2.0 or 2.1. HMSoft, AT-09, BT05, CC2540, CC2541 all mean BLE.

I am an Android user (sorry I can’t help with IOS) so all the examples will be from Android devices.

On Android devices (that have Bluetooth), all Bluetooth 2.0/2.1 devices should show up in Settings => Bluetooth => Scan for devices. BLE modules may or may not show up depending on the Android device you have and the version of Android it is running.

For BLE you should use one of the many BLE apps. I generally use BLE Scanner or B-BLE but there are many others.

Markings on the board / breakout board

There are many different modules available and a few have become fairly popular. These general have a brand or some kind of marking on the board; either on the small SMD Bluetooth board or the breakout board. Commons ones are:

  • zs-040
  • FC-114
  • JY-MCU
  • CZ-HC-0x
  • SJ
  • Keyes Bluetooth 4.0
  • HM-10

Of course, some of these are pretty obvious. If your module has HM-10 clearly stamped on it the chances are it’s a HM-10. It gets tricky when there are no markings or when the same board gets used again. I now have several different modules (BT 2 and BT 4) that all use the zs-040 breakout board and modules using the FCC-114 boards have at least 2 different firmwares.

Number and type of pins on the breakout board

The number and type of pins can give you some information. For Bluetooth 2 modules HC-05s tend to have 6 pins and HC-06s tend to have 4 pins.
The pin labels can also help. Besides the common TX,RX, GND and vcc, there may be EN, WAKEUP, STATE, BRK, KEY, or LED pins

Type of Bluetooth and chip used

This should be obvious but you never know. The chances are, if you bought a BLE module then you will get a BLE module just maybe not the HM-10 you thought you ordered. If you are not sure, start it up and use a Android device to scan and see what appears. The chip used on the small Bluetooth board (the daughter board) can help. Google the chip name and you will soon have a datasheet.

Talking to the module

To configure any of the modules you need to talk to it using a serial UART connection (see below for more on this). This can also be frustrating because different modules have different requirements for the format of the AT command. Some require uppercase, some lowercase. Some like line ending characters, other do not. Most default to 9600 baud rate but some have a different rate (38400 is also common). When trying new modules I have kind of settled on the following routine.

I start with 9600, line endings, and uppercase. If no joy, I try lower case. If no joy, I remove the line endings and try uppercase again. After going through the various options at 9600 I try 38400. 9600 and 38400 are the 2 most frequent baud rates. If I still don’t get anywhere I will try the other baud rates.

I will also cycle the power while connected with a serial connection. Some modules, like the ones that use a Bolutek firmware, have a start up message.

Getting garbage characters is a sign that you have the wrong baud rate.

 

Connecting To A Computer

Please note that I am a Windows user so all examples use a Windows system.

There are a couple of ways you can connect the serial Bluetooth modules to a computer; either via a serial UART to usb adapter, or with an Arduino + serial in – serial out sketch (or any other similar microprocessor). I tend to use an Arduino.

I have a few slightly different sketches but I start with a very basic one. This takes wha ever you enter in the serial monitor and sends it to the connected module. Anything it receives from the module it displays in the serial monitor main window.

Basic Serial Communication Sketch

Hardware serial is used to talk to the host computer/Arduino serial monitor and AltSoftSerial is used to talk to the Bluetooth module. The sketch can be used to talk to any module that uses serial communication.

The sketch can be used to talk to any module that uses serial communication.

//  Basic serial communication sketch using AltSoftSerial (ASS). 
//  Uses hardware serial to talk to the host computer and ASS for communication with the Bluetooth module
//
//  When a command is entered in the serial monitor on the computer 
//  the Arduino will relay it to the Bluetooth module and display the result in the serial monitor.
//
//  Pins
//  BT VCC to Arduino 5V out. 
//  BT GND to GND
//  Arduino D8 ASS RX - BT TX no need voltage divider 
//  Arduino D9 ASS TX - BT TX through a voltage divider
//
 
#include <AltSoftSerial.h>
AltSoftSerial BTSerial; 
 
char c=' ';
boolean NL = true;
 
void setup() 
{
    Serial.begin(9600);
    Serial.print("Sketch:   ");   Serial.println(__FILE__);
    Serial.print("Uploaded: ");   Serial.println(__DATE__);
    Serial.println(" ");
 
    BTSerial.begin(9600);  
    Serial.println("BTserial started at 9600");
 
    // If using an HC-05 in AT command mode the baud rate is likely to be 38400
    // Comment out the above 2 lines and uncomment the following 2 lines. 
    // BTSerial.begin(38400); 
    // Serial.println("BTserial started at 38400");
 
    Serial.println("");
 
}
 
void loop()
{
 
    // Read from the Bluetooth module and send to the Arduino Serial Monitor
    if (BTSerial.available())
    {
        c = BTSerial.read();
        Serial.write(c);
    }
 
 
    // Read from the Serial Monitor and send to the Bluetooth module
    if (Serial.available())
    {
        c = Serial.read();
        BTSerial.write(c);   
 
        // Echo the user input to the main window. The ">" character indicates the user entered text.
        if (NL) { Serial.print(">");  NL = false; }
        Serial.write(c);
        if (c==10) { NL = true; }
    }
 
}

Connections

All modules are connected in a similar way.
vcc to 5V
GND to GND
TX to Arduino RX (pin D8 when using AltSoftSerial)
RX to voltage divider then to Arduino TX (pin D9 when using AltSoftSerial)

On some modules like the HM-10, the pin order may be reversed. Just make sure the above connections are used.

Bluetooth_basicConnections

 

Trouble Shooting

If you can’t get communication with the Arduino working, try the following:
1 – Check your connections. Make sure you have Arduino TX to BT RX and Arduino RX to BT TX.
2 – Check the value of the resistors.
3 – Check that the resistors are in the correct order (the 1K ohm resistor connects to the Arduino).
4 – Different baud rates. Not all modules use 9600 as the default.
5 – Change the line endings (\r\n). Some modules need them, other don’t.
6 – Try upper and lower case.
7 – Check your connections.

 

Android Apps

B-BLE(BLE4.0 Scan) can be downloaded from Google Play
BLE Scanner is also available
HM BLE Terminal is available here. Please note I have some minor issues with AT commands appearing by themselves. Not sure if it is the app or me.
Bluetooth spp tools pro is another serial terminal app that I have not tried yet but looks quite good.

 
 
 
 

Bluetooth 2.0/2.1 EDR Modules

 
 

HC-06 (ZG-B23090W) Bluetooth 2.0 EDR modules

HC-06 - ZG 1643 - B23090W_001_800

HC-06 (ZG-B23090W): Basic Specs

Slave only module
Bluetooth 2.0 EDR
Based on the csr BC417 chip
Firmware is linvor V1.8 which is (I think) created by Wavesen and getting a little old.
Default baud rate for serial UART is 9600
AT commands need to be uppercase without line endings.

Hard to know if these are copies or not (I suspect they are). Wavesen are the manufactures of the original HC series of Bluetooth modules and their modules now feature the HC logo screen printed on the Bluetooth SMD board (the small daughter board) and a blue LED at the top right. Since these modules do not have the logo nor the blue LED I presume they are copies. But, the photos in the data sheet feature modules without the logo. Bare in mind the data sheets are from 2010 and 2011.

For more information see the HC-06 (ZG-B23090W) Bluetooth 2.0 EDR modules post.

 
 

HC-05 (ZG-B23090W) Bluetooth 2.0 EDR modules

HC-05 - ZG1643 - B23090W_001_800
These have a standard SMD Bluetooth module and are using the older HC/Wavesen 2010 firmware.

HC-05 (ZG-B23090W): Basic Specs

Bluetooth 2.0 EDR
Based on the csr BC417 chip
Firmware is VERSION: 2.0-20100601 which is by Wavesen.
Can be a slave or a master device
Has 2 modes: AT mode and communication mode.
Default baud rate for AT mode is 38400
Default baud rate for communication is 9600
AT commands can be either lowercase or uppercase
AT commands require “\r\n” line endings

For more information see the HC-05 (ZG-B23090W) Bluetooth 2.0 EDR modules post

 
 

SPP-C HC-06 / BT06 HC-06

I purchased 2 sets. One set sold as SPP-Cs and one sold as BT-06s. Both have the same firmware and show up as either BT-04A or ??04-A

When I purchased these I only saw them on taobao and I only saw the HC-06 versions. Now there are HC-05 versions and both the HC-06 and HC-05 are available on the usual sites like ebay and dx.com. The sites I have checked show the same incorrect data sheets as you get from the taobao sellers. Next time I order I may add a couple of the HC-05s to see if there is any difference.

BT06-SPP-C

Uses the zs-040 breakout board and has the Bolutek Bluetooth V2.1 version firmware. These are HC-06 slave only modules and the ones I have are 4 pin versions; no STATE pin, no EN pin.

Features the Beken BK3231 chip which is a Bluetooth 3.0 HID device.
Bluetooth v2.1 + EDR
Default baud rate is 9600.
Default PIN is 1234.
Firmware is reported as BOLUTEK Firmware V2.2, Bluetooth V2.1
The firmware is by Bolutek so AT+HELP gets you a list of the available commands.
The modules report themselves as BT04-A or ??04-A

Default to AT mode when powered on. AT commands require line ending characters (\r\n).

If you open the serial monitor and then cycle the power to the module you get

+READY
+PAIRABLE

SPP-CA_SM_02

AT+HELP gets you a list of the available commands
SPP-CA_SM_03

Not sure if this is a full list or if the firmware is different to other “Bolutek Bluetooth v2.1 firmwares. If you Google this you quickly find data sheets that show a different command set.

Sony Z3 Compact:
Listed in Settings => Scan for Bluetooth devices as BT04-A. Can be paired the same as other Bluttooth v2 modules. Once paired they can connect to a Bluetooth 2/2.1 serial terminal app.

Huawei honor pro 4
Takes a while to show up in Settings => Scan for Bluetooth devices. Initally listed by the mac address which then changed to ??04-A.

Windows 8.1
Able connect to a PC running Windows 8.1 with Bluetooth and show up as BT04-A

Pins

SPP_CA-HC-06_Pins_01
PO 5 MCU-INT goes HIGH when a connection is made.
The LED blinks 800ms / 800 ms off when waiting for pairing or for a connection. When a connection is made the LED turns on (no blink).

Downloads

Bolutek SPP-CA hardware Guide Chinese only. This is for the Bolutek version but looks to be the same as the Beken BK3231 chip version.
BK3231 data sheet

Further Information

The BK3231 chip is a highly integrated single-chip Bluetooth HID device. It integrates the high-performance transceiver, rich features baseband processor, and Bluetooth HID profile. Features:
1. Operation voltage from 2.8 V to 3.6 V
2. Bluetooth 2.1 compliant
3. -88dBm sensitivity for 1 Mbps mode and 2 dBm transmit power
4. HID v1.0
5. 16 MHz crystal reference clock

Beken BK3231 product page on the international site
The Bolutek Chinese website has a SPP-CA module but it has a different layout so I suspect the ones I have are copies or they have repurposed the Bolutek firmware.

 
 

HC-06 zs-040 hc01.com v2.0

These look like the common HC-05/HC-06 on the zs-040 breakout boards but have a different firmware.

zs-040_hc01.com_v2.0_01_1200

These use the genuine HC SMD Bluetooth module and (at the time of writing) have the latest HC firmware

The modules here were sold as HC-06s and do not have STATE pins or EN pins.

Uses the CSR BC04 (BC417) chip
Bluetooth version v2.0 + EDR
Firmware hc01.comV2.0. The firmware is SLAVE only version by Wavesen
Default baud rate is 9600
Default PIN is 1234
Default name is HC-06
The small Bluetooth boards have a blue LED at the top left.

zs-040_hc01.com_v2.0_02

AT commands are required to be in upper case and nl/cr line endings not required.

AT+LED turns off the on board LED. This is the blue LED on the small daughter board not the red LED on the larger breakout board. I originally though the 2 LEDs were linked but if you turn off the blue LED the red LED keeps flashing.

AT+LED0 – turn off the blue LED, returns LED ON
AT+LED1 – turn on the blue LED, returns LED ON

Other commands can be found in the data sheet.

Interesting there is a ROLE command;
AT+ROLE=S puts the module in to SLAVE mode, returns OK+ROLE:S
AT+ROLE=M puts the module in to MASTER mode, returns OK+ROLE:M
The commands are accepted and I originally thought this may mean the modules can be used as HC-05s but I cannot get any of the usual HC-05 commands to work; ROLE, AT+ROLE, AT+ROLE=, AT+ROLE? doesn’t work for example.

Downloads

Chinese Data Sheet
English Data Sheet.Data sheet for the 1.8 firmware but the commands seem to be the same.

The modules I have match the photo in the Chinese data sheet. The photo in the English data sheet would appear to be an older version.

Further Information

Guangzhou HC website (Chinese only but google translate works)
Website download page (Chinese only again). Note the English docs are not as up-to-date as the Chinese docs.
Wavesen product page.This shows the older no blue LED version. Wavesen and HC01 are the same company.

 
 

HC-05 zs-040 hc01.com V2.1

Another version of the HC-05 on the zs-040 breakout board but this ones uses the real HC SMD Bluetooth board (you can tell by the logo and the blue LED).

zs-040_HC-05_hc01.com_V2.1_01_1200

The hardware is basically the same as the HC-06. The difference is the firmware. The HC-05s can operate as MASTER or SLAVE devices.

These start in communication mode and need to be put in to AT mode by bringing pin 34 HIGH. This can be done by closing the small button switch as you power the modules. When in AT mode the baud rate is set to 38400.
Unlike the other zs-040 HC-05 modules I have it looks like bringing pin 34 HIGH after the modules have started does not put them in AT mode. I haven’t really investigated this properly though.

Uses the CSR BC04 (BC417) chip
Bluetooth version v2.0 + EDR
Firmware hc01.comV2.1. by Wavesen.
Default communication baud rate is 9600
AT mode baud rate is 38400
Default PIN is 1234
Default name is HC-05
The small Bluetooth boards have a blue LED at the top left.

The EN pin when briefly brought LOW, breaks an active connection and resets the module.
The STATE pin goes HIGH when a connection is made.

zs-040_HC-05_hc01.com_V2.1_02

AT commands require the nl/cr line endings and can be in upper case or lower case.

Downloads

Chinese data sheet
English data sheet
Chinese AT command guide
English AT command guide

As with the HC-06s the Chinese data sheets are more up-to-date than the English ones.

Further Information

Guangzhou HC website (Chinese only but google translate works)
Website download page (Chinese only again). Note the English docs are not as up-to-date as the Chinese docs.
Wavesen product page.Only the first photo shows the the correct (with LED) version. The other photos still show the the older no blue LED version.

 

HC-05 FC-114 and HC-06 FC-114

HC-05_FC-114_&_HC-06_FC-114_001_1600

These use the same breakout board as the zs-040 but have a different label. They also have different pins soldered between the Bluetooth module and the breakout board.

The modules I have have the Bolutek v2.43 firmware but FC-114 modules are also available with the linvor/HC firmware.

For more information see:
HC-05 FC-114 and HC-06 FC-114. First Look
HC-05 FC-114 and HC-06 FC-114. Part 2 – Basic AT commands
HC-05 FC-114 and HC-06 FC-114. Part 3 – Master Mode and Auto Connect

HC-05 and HC-06 zs-040 Bluetooth modules

HC-05 & HC-06 - ZS-040

These were the first modules I bought that used the zs-040 breakout board. Since then there have been other modules using the same board.

The HC-06 is running the HC/linvor V1.8 firmware and the HC-05 the HC 2.0-20100601 firmware.

HC-05 & HC-06 First Look
HC-06
HC-05 (ZS-040) Bluetooth module – AT MODE

Since the firmwares are the same as the ZG-B23090W modules you can use the guides for the ZG-B23090W ones.

 
 
 
 

Bluetooth 4 / BLE Modules

 
 

HM-10

There are 2 versions of the HM-10; the S version and the C version. There are slight component differences and the HM-10C does not have the pads along the bottom (26 pads instead of 34) but operationally they are the same. More details here.

The HM-10Cs I have have the Keyes branding.

HM-10S

HM-10S

HM-10C

HM-10C

When compared to other Bluetooth modules the pins are reversed and there is a BRK pin rather then a EN or KEY pin.

The STATE pin is connected to the on board LED. Blinking when waiting for pairing or a connection. Solid on when connected and just after pairing.
The BRK pin allows you to reset a connection. When there is an active connection, bring the BRK pin momentarily LOW breaks the connection. When there is no connection making the BRK HIGH or LOW has no effect.

CC2540 or CC2541 chip.
Bluetooth version 4.0
Firmware HMSoft V540
Default baud rate is 9600
Default PIN is 000000
Default name is HMSOFT
AT commands need to be uppercase
The HM-10 does not like line end characters (\r\n).

The HM-10 is a Bluetooth 4.0 BLE module and not compatible with Bluetooth 2.0 or 2.1. The model I received includes the CC2541 chip as opposed to the CC2540 chip.

HM-10_01

For more information see the HM-10 Bluetooth 4 BLE Modules post

 
 

HM-11. Non break out version.

For a future project I wanted a Bluetooth module that was as small as possible and the HM-11 without a breakout board looked suitable. However, After playing with them for a while I decided to stick with Bluetooth v2 and will use a HC-05 without the breakout board instead.

HM-11_800

Basically the same as the HM-10 but in a small package.

CC2540 or CC2541 chip.
Bluetooth version 4.0
Firmware HMSoft V540
Default baud rate is 9600
Default PIN is 000000
Default name is HMSOFT
AT commands need to be uppercase
The HM-11 does not like line end characters (\r\n).

The HM-11 is Bluetooth 4.0 BLE only and not compatible with Bluetooth 2.0 or 2.1. The model I received includes the CC2541 chip as opposed to the CC2540 chip.

HM-11_04_sm_01

Pins

Since there is no break out board all pins are 3.3v
HM011_02
HM-11_03

The minimum connections to get the modules working are TX, RX, VCC and GND. I also added a LED to pin 15 so that I had visual confirmation that the module was on. The extra white wire is attached to pin 16 (SYSTEM KEY) but this is not connected in the below photos. The wire is single core wire wrap wire which I find very convenient for this kind of work.
HM-11_07_Breadbaord_01_1200
HM-11_07_Breadbaord_02_1200

The HM-11 is operationally the same as the HM-10 and there is more information in the HM-10 guide.

 
 

BT05-A mini BLE Bluetooth V4.0 iBeacon

Similar modules sold as DX-BT05. This module is based on the Bolutek CC41-A. This is the same form factor as the HM-11, however, the layout is different. The BT05 is sometimes sold as a HM-10 and regarded as a copy of the HM-10, however, I don’t see these as copies more like a different version of the same thing. Not sure where these originate from as I can’t find this version on the bolutek website nor can I find a manufacturer (didn’t spend too long looking though).

BT-05A_iBeacon

The break out pins are standard layout with a STATE pin and a EN pin.

CC2540 or CC2541 chip.
Bluetooth version 4.0
Firmware is reported as Firmware V3.0.6,Bluetooth V4.0 LE.
Default baud rate is 9600
Default PIN is 000000
The modules report themselves as BT05-A.

This is a Bluetooth 4.0 BLE module and not compatible with Bluetooth 2.0 or 2.1. The model I received includes the CC2541 chip as opposed to the CC2540 chip.

BT-05A_iBeacon_SM_001

AT commands require line ending characters (\r\n). Since the firmware is by Bolutek AT+HELP gets you a list of the available commands.
BT-05A_iBeacon_SM_002

The modules boot in to AT mode and go in to communication mode when a connection is made.

These are smaller than most other modules. Both the breakout board and the actual Bluetooth board are smaller than similar modules. The modules include a small push button switch which I have not investigated yet. A Google search for “DX-BT05 4.0″ will get results for similar boards using the regular sized breakout board.

The STATE pin is LOW when no connection and HIGH when there is an active connection.
The EN pin looks like it is connected to pin 16 on the small Bluetooth board (not confirmed), when brought LOW, it will break an active connection. It does not disable the module though.

Pins

DX-BT05_4.0_pin_diagram

Pin 16 (P0_6)
When the module is in sleep mode, briefly bringing PIN 16 LOW will wake up the module and the module will respond with “+WAKE\r\nOK\r\n”.
When there is a connection, briefly bringing PIN 16 LOW will initiate a disconnection request.

Sleep Mode

Sleep mode is entered using “AT+SLEEP\r\n”. The module will return “+ SLEEP\r\nOK\r\n”
To wake, either send a string of 80 or more characters (the string cannot contain AT commands) or bring pin 16 LOW for a short period. If the module wakes successfully it will return “+WAKE\r\nOK\r\n”

LED in master mode

– quick flash 300ms on, 300ms off – searching/waiting for a connection.
– on – connected.

LED in slave mode

– slow flash (800ms on, 800ms off) – waiting for pairing
– on – connected

According to the seller this is compatible with Android 4.3 or later as long as the device supports Bluetooth 4.0/BLE. It is compatible with iphone 4s onwards and also ipad 3,4,and the ipad minis.

If your Android device does not find the BT module the module may be in master/central mode. Change to slave/peripheral mode using the command AT+ROLE0

Sony Z3 Compact:
The modules show up in Settings => Bluetooth as “BT05-A” but it does not pair (I think is it not required). If you try to pair you briefly get a “trying to pair message” and then it goes back to just showing the name.
BT-05A_02

The B-BLE app connects without the need for the PIN.
BT-05A_03_800

Huawei honor 6 pro:
The BT-05A does not show up in the Settings => search for Bluetooth devices. It does show up in the B-BLE app as a BT05-A
BT-05A_01_800

Serial Connection:
The HMBLE Terminal app on the Sony finds and connects to the BT-05A and serial communication works as expected:
BT-05A_04
BT-05A_05_800

A PC running Windows 8.1 with Bluetooth BLE finds and connects. A PIN is not required to make a connection.
BT-05A_iBeacon_PC_001
BT-05A_iBeacon_PC_002

Downloads

Basic spec sheet in Chinese
AT Commands (Chinese)
BLE-CC41-A basic AT commands

Further Information

Arduino forum: Hm-10 ble device not working
Bolutek website
Uploading firmware. Not tested.

 
 

AT-09 Bluetooth V4.0 CC2541

Also sold as Bluetooth v4.0 BLE CC2540/CC2541 iBeacon and another module that is similar to the HM-10. Has the same firmware as the BT-05A above.

Another one where I bought twice due to the same module being sold under a different name.

AT-09 BT05 Bluetooth 4.0 BLE iBeacon

Uses the zs-040 breakout board.
Features the CC2541 chip.
Default baud rate is 9600.
Default PIN is 000000.
AT commands require line ending characters (\r\n).
Firmware is reported as Firmware V3.0.6,Bluetooth V4.0 LE.
The firmware is by Bolutek and AT+HELP gets you a list of the available commands.
The modules report themselves as BT05.

The STATE pin is normally LOW and goes HIGH when the device is connected.
The EN pin doesn’t seem to do anything. I haven’t really looked at this though.

AT-09 - BT-05_BBLE_04

AT-09 - BT-05_BBLE_05

Sony Z3 Compact:
The AT-09 shows up in Settings => Bluetooth as “BT05″. If you try to pair you briefly get a “trying to pair message” and then it goes back to just showing the name. The B-BLE app connects without any issue and does not need the PIN.
AT-09 - BT-05_BBLE_02_800

Huawei honor 6 Pro:
Does not show up in the Bluetooth settings => scan for Bluetooth devices.
Using the B-BLE app it shows as “BT05″ and connects without a problem and does not require the PIN.
AT-09 - BT-05_BBLE_01_800

A Windows based PC connects and does not need the PIN.
BT05 Connected

 
 
 
 
 

 
 
 

64 thoughts on “Bluetooth Modules

  1. Pingback: Control an Arduino via the HM-10 BLE module, from a mobile app on your smartphone | Evothings

  2. I have 2 AT-09s. B-BLE is able to connect to them and I can pair them when their Roles are set to o and 1.
    But all pairing requests from other BT devices are rejected by the AT-09s.
    I need to pair one of these devices to my Android 6.0 mobile.
    Any way to do that?
    Many thanks for your good info above.

  3. Hi Martyn,
    I must admit that this is the best Bluetooth modules overview I ever came across.
    I know that there are datasheets available, however some parameters are not precisely described in datasheets.
    What I have in mind is current consumption.
    I looking for a Bluetooth module that has the lowest power hunger.
    In my design +-5mA equals +-24h of work.
    The main condition are:
    Current consumption under constant data transfer from the Bluetooth module at 9600 and 115200kbps (transmission).
    Current consumption under constant data transfer to the Bluetooth module at 9600 and 115200kbps (reception).
    Current consumption with no data transfer before power safe mode kicks in.

    Any info regarding this matter would be appreciated.
    Chris

    P.S. Sorry for my English.

    • Unfortunately I haven’t looked in to power consumption and so I can’t help. I have found the data sheets to be pretty accurate with other things so would think that the current draw stated would also be accurate.

  4. Update to the previous.

    The 2 AT-09s can pair with each other using the AT+INQ command which enumerates available devices, followed by the AT+CONNx command where x is the number of the enumerated device above. However the devices enumerated are only ever other AT-09s. No other BT devices are ever detected and, hence cannot be connected to.

    • I haven’t looked into this but would suspect that the modules with the Bolutek firmware would all see each other. Especially if they used the CC2540 or CC2541 chip.
      If I get time this weekend I will see if the different modules can see each other.

  5. Hi Martyn,

    Many thanks.
    I can now connect 2 AT-09 devices and transmit between them. I have all AT commands from the AT+HELP command working as advertised with the exception of AT+START, which seems to have no function.
    Using 2 Tera Term terminals through Pololu USB to Serial converters I can do eveything I need. I can drive the AT-09’s from an Arduino Uno either as Master or Slave. Everything is going swimmingly. EXCEPT—–
    The AT-09 as Master sees only AT-09 slaves. It will not show a Win8 as a visible device, but the Win8 PC can connect to an AT-09 slave. Whether data is received by the Win8 device I cannot say because I have to write something with C# to implement the device – which I have not yet done.
    What I’m trying to achieve is this:
    I have an Arduino Uno application where it monitors 4 digital 1-wire heat probes and a pressure transducer. The device measures under-hood parameters from a diesel turbo-charger/inter-cooler installation and offers an opinion on how effective the inter-cooler is any given time. Currently thee display is 16×2 LCD. I want to send the data to an Android phone so it’s easier to read and the Arduino can be left under the hood without wires and a pressure pipe leading into the car through a window. Hence I need to make the AT-09 pair with the Uno since the Android API will only countenance paired devices. The likes of B-BLE, while nice to see, don’t offer access to the data stream incoming off the link.
    In the meantime I’m learning plenty about BT, which was not even a gleam in anyone’s eye when I was a DOS developer in the 1980s.

    • Depending on the BT dongle & software you have your PC it may or may not see the AT-09 and if it sees it it may not be able to connect. It is also possible that your PC can opperate in master mode only.

      My Win7 PC with a Bluetooth 4 dongle and the Blue Soleil software does not see the AT-09/BT05 module.
      My Win8.1 laptop with built in Bluetooth sees them and connects.

      I have 4 Android devices and they all see the AT-09s when using BLE apps.

  6. Pingback: HM-10 or CC41-A module? Automatic Arduino BLE module identification | Arik Yavilevich's blog

  7. Range testing would be very useful. I’m using an HC05 at the moment, but the range is quite poor, perhaps 10 feet through a stud partition wall. A Bluetooth headset manages much further from the same location, so I’m looking for a pin compatible plugin upgrade to get more range.

    • Unfortunately this is difficult for me. I live in a very small apartment that has concrete walls. The furthest I can test is about 15 feet and all the modules I have tried at this range work fine. Any further and I must go to another room behind a concrete wall.

      If you perform you own tests I will happily post your findings.

  8. Hi,
    First of all I have to say that this page has lots of good information. I already have 3 units of “AT-09 Bluetooth V4.0 CC2541 / HM-10″, anyway I’m having some problems with them.

    As a context I have to say…. I can comunicate the AT-09 modules using AT commands from my laptop and after some hours playing with them this are my troubles.

    1- I cant connect my mobilephone “Huawei P8 Lite” with Android Versión 6. I attempt to connect using B-Ble or BLE Scanner APP´s with the same result “Connection Fail”. I also attempted to connect them with other smartphones with NO positiv results. The modules are in Role=0, PIN=000000 and every factory setting. So …. What is going on?

    2- I have energized 2 modules and I changed the role to ROLE=1 and also the PIN of one of the them (both have different PINs on purpose). Immediately the led on both modules became solid ON and I have tested the comunication sending mesages by UART port from my PC and making a loop in the final module. The comunication was perfect. How is that possible if they have different PINs and PASS?

    Thanks for reading and every answer will be grateful.
    Have a nice day :D

    • On most BLE modules you can select whether or not a pass code is required. Although not listed on the AT09 with AT+HELP I would suggest experimenting with commands like AT+TYPE to see of they work.

      Normally, AT+TYPE uses 0 and 1 and the default is 0.
      AT+TYPE0 – no need pass code
      AT+TYPE1 – pass required for pairing.

      AT+TYPE? – query current state.

      I am not at home at the moment so cannot try this but if you do please let me know your results.

      • Hi Martyn,

        Many thanks for your quick answer. In fact i tried using AT+TYPE command as you suggested and it WORKS !!!! even when doesn’t appears in the display list using AT+HELP.

        Now i can pair the modules with my smartphone and thats is a good news. After some time my phone receives a “Pairing request from BT-05″ and then ask for the “PIN” to proceed. With BIBLE App is weird, sometimes requires the PIN and others just work ????, anyway what exactly does the command AT+TYPE?

        There is a way to force the PIN request between this two AT-09 modules when i attempt to pairing each other ? (one is in ROLE=0 and the other one is in ROLE=1)

        NOTE: This module (which i am using) lacks of proper information from de manufacturer. 1- AT-TYPE does not showed in AT-HELP commands and 2- at the end of AT-HELP display says “* Note: (M) = The command support slave mode only.” wich is not true becouse has accepted AT+ROLE1 command.
        Obviously are the cheapest modules so i can complain at all.

        Once again THANKS A LOT !!!!
        Have a nice day :D

  9. Hi Martyn,

    Your post is really helpful and I learnt a lot from it. I was thinking of obtaining RSSI from AT09. Is there any way to get it done?

    • The RSSI value is returned when you perform a scan.

      I don’t have examples to show but if the search for “BLE get RSSI” you will find lots of guides online.

  10. Hi. I plan a project and i see they advice hc05 zs040. But i cant find this product that can be shipped to my location. Why i need this hc05 zs040? I dont know what differs if its not zs040 but fc-11 so.eyhing like this? What i lose if i choose other than zs040? I m realy lost on this. Can u give advice?

    • You do not need any specific module. I am simply making notes about the different ones I come across.

      The main thing you need to be aware of is the two main types, Bluetooth 2 and Bluetooth 4 or BLE. These act very differently.

      For my own projects I tend to stick with BT2 and since I still have a few of the original zs-040 boards, these are the ones I tend to use the most and so know most about. Note though, there are now two different BT2 modules that use the zs-040 breakout board and these have very different firmware.

      Make a list of the modules you can buy and then search online. The one where you can find the most information about is probably the one you should buy.

      I have several modules that I cannot really use because I cannot find any documentation.

  11. Very nice,you have done a great review.I have a problem with SPP-C HC-06 / BT06 HC-06.I can enter the AT commands by Arduino IDE.I changed the name and the password with success.It seems that the module is loosing some packages since I some times have to give the same command twice to accept and also sending data from Arduino to my mobile bt terminal through the module sometimes adds an empty line.I am trying to change UARTMODE and add a stop bit.Now both are +UARTMODE=0,0
    After I change the value and read again it gives me +UARTMODE=1,0 But after I reboot the bt module it returns to default value.Do you have anything to suggest.Thank’s in advance

    • Don’t use a high baud rate. Software serial is not reliable at higher rates.
      Make sure your connections are all good and solid (no lose wires).

  12. ” Couldn’t pair with BT05 because of an incorrect PIN or passkey ”
    how can i fix this problem in bluetooth BT05

  13. Great overview of Bluetooth modules, I am trying to do your connecting 2 arduinos by Bluetooth but I only have hm-10 modules, can the project be complied using them?

    • As you must have gathered by now, the HM-10s work in a very different way to the HC-05s.

      Linking 2 HM-10s is a little easier. I don’t have a write up yet (never seem to get round to finishing it) but in essence, the procedure is:

      1. Find the addresses for both modules. Use AT+ADDR?
      2. Give each module the other modules address using AT+CON[address]
      3. Set one device at the master and the other as the slave with AT+ROLE

      Device 1 – address = 11C11FF11D11
      Device 2 – address = 22C22FF22D22

      on device 1. Send the command AT+CON22C22FF22D22
      on device 2. Send the command AT+CON11C11FF11D11

      on device 1. Send the command AT+ROLE1 (set as master/central)
      on device 2. Send the command AT+ROLE0 (set as slave/peripheral)
      This assumes device 1 is the master.

      Wait a second or so and reset the modules / cycle the power.

  14. Hello Martyn,
    Very informative website ..thank you..

    My hc06 appears as comport under the device manager( windows10) but I could not see my HM-10 as comport when I paired it.. Why?

  15. Excellent article! TY.
    We need more of this type info covering various Chinese hobby PCB’s

    How did you get on using AT commands regarding the various boards? for some reason all the HC06 boards I’ve used take several shots at setting the BAUD and NAME then suddenly it takes, I wrote a short app just poll the commands at the device resting it until it takes unless I’m missing something I also see the EN pin high and leave out end of line it takes after running several times!
    The BT04-B board didnt have this issue the commands take first go and no KEY/EN pin. On the down side the signal strength ion the BT04-B is dreadful compared to the HC06 abut 50% worse, the antenna on the PCB is noticeably smaller on the BT04 and adding wire to the this made no difference .. Which brings me to “how about adding signal strength to your info” I used free Android app called “bluetooth signals” to do the tests and the BT04 wouldn’t pass through a 4″ wall but the HC06 was fine.

    • Finding the correct combination of baud rate, upper or lower case and line endings is a matter of trial and error. Although after a while a pattern does emerge. I prefer to do this manually using a terminal, usually the Arduino serial monitor so that I can add delays and pauses between entering commands. Modules that do not require line end characters have set times for entering commands and if you do not wait long enough they will ignore what you enter.

      I have been asked about signal strength a few times but I have issues performing tests.
      – I live in a very small apartment with concrete walls.
      – The RSSI stated by the module is very subjective and different for different manufactures. Although BLE is better than BT Classic.

      The small apartment means I am always very close when using the Bluetooth modules and so always have a good signal strength. The concrete walls mean if I go to another room there is very little or no signal. The walls also effect the wifi signal. I get very very slow wifi if I am in the bedroom and close the door…

      I really need to update this post. I now have quite a few new modules.

    • If you mean, are there Bluetooth modules you can program like the Arduino, then not exactly, but there are Arduinos with built in Bluetooth such as the Arduino 101 and the Blueduino

  16. Hi Martyn.
    I am working on an android app to display the battery level of CSR8645 Bluetooth earphones.
    I couldn’t find the AT commands to retrieve battery level of Bluetooth earphones. If you know please let me know. Thank a lot.
    I’ve tried Two AT commands from Bluetooth headsets: AT+XAPL and AT+IPHONEACCEV for iOS but it seems those commands only work for iOS devices.

      • Unfortunately I can’t help with AT commands but the CSR8635 is BLE/BT 4 in which case it may have the battery level under the battery level characteristic. Use a BLE scanner app to see what services and characteristics it has.

        • I did use BLE app for scanning, it is not able to detect the earphones, but when I used BlueScan app (classic scanning) it identified the name of earphones. I will be back if we can solve this AT commands. Thank Martyn.

          • This could mean it is set up as a HID device.

            Unfortunately I don’t have any experience with the CSR8635 and the Googling I did didn’t really find anything. All I can suggest is ask on the audio forums where people are using the CSR8635 to build there own Bluetooth audio devices.

  17. Hello Martyn and congratulations for the good and extensive review on all this modules.
    I have bought 2 HM-11, first i connect it to an arduino board and nothing happened, now im connecting it to an FTDI chip with VCCIO on 3.3v, and im powering the HM-11 with 3.3v, still have no response whatsoever from the HM-11, both of them.
    I connected only, RX TX VCC and GND, and im using 9600,N,8,1.
    Does the chip start in sleep mode or is there any trick to make it work ?

    • I just realized I don’t have a clear circuit/connections diagram for the HM-11. I will try to remember to add one.

      Make sure they are working. Start by simply powering the modules and scanning for them using a BLE app. See the HM-10 guide for details. Although the physical connections are different the process is the same.

      Then, try connecting to an Arduino. Remember that HM-11 RX goes to Arduino TX, and HM-11 TX goes to Arduino RX. If using a 5V Arduino, add a voltage divider on the Arduino TX pin.

      Not stated in the above – the HM-11 likes uppercase and does not like line endings. If line end characters are present the HM-11 will not reply.

      The Hm-11 works the same as the HM-10 so the HM-10 guide should help. http://www.martyncurrey.com/hm-10-bluetooth-4ble-modules/

  18. Hi
    I have “supposed to be” HC-05 module and I can’t identify the breakboard.
    It has 6 pins: state, gnd, +5v, en. and RX/TX with 3.3v mention on the pin. it has a push button.
    Photos of the module: https://goo.gl/photos/dtQtssS3q8tkH1Bt5

    BT name of the module when pairing is HC-05
    It has default baudrate of 38400 when talking to arduino – normal DATA mode, not AT mode.

    All of my effort don’t let me enter AT mode.
    No auto AT mode as in fc-114
    No mini at mode as in zs-040

    Someone have an idea what else can I do?

    Idan

  19. Hi
    I am using “screen” to open terminal in linux and BT on the phone for send/receive serial via BT, Connection is fine.
    When paired to a phone in one side and to arduino sw serial on the other side is fine both directions (RX and TX).

    Only issue is that that i cant enter AT mode.

  20. Hello Martyn, i have 2 hc-10-modules (HM-SOFT) and ive set flow-control on (trying to get it talk to the flightcontroller of my quadcopter). Now i can send Data from Terminal to my Phone but when i send back something the device is restarting. I also cant use the AT-Command. The HC-10 is not responding to the commands. Do you have any hint how i could factory-reset the device? Maybe by hardwiring something?

    Thank you for the good informations about all those modules!!

    Regards, Jan

  21. can HC-05 Bluetooth Module Receiving data from CC2540 BLE 4.0 Bluetooth Module with out Mobile
    Example:
    Receiving data from bluetooth digital multimeter on a LCD connected to Arduino
    bluetooth digital multimeter (V 4)

  22. To Idan Regev,

    I haven’t used these exact same modules but there are a couple of things to try.

    It may be that the module starts in AT mode. Try some basic commands before making a connection.

    Try bringing the EN pin HIGH before adding power. If this doesn’t work, try bringing pin 34 (top most right hand side) before adding power.

  23. Hello Martyn, my name is Pete Macken. I live in Rochester, Minnesota. I have a quick question regarding BlueTooth stuff.
    I have a high-end metal detector for treasure hunting. I want to open it up and solder-in/add a bluetooth emmiter and then find a pair of headphones that will talk directly to it, OR take my current headphones and add a bluetooth receiver to them.
    Being that I do NOT need stereo, and MONO will work, what do you think is the simplest way to accomplish this? I just can’t seem to figure out what to do. Thanks!

    • If the metal detector has audio out/headphone socket, the easiest solution would be to use a Bluetooth audio transmitter. These can be picked up fairly cheap and mean you do not need to mess around inside the detector.

Leave a Reply

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


eight + = 17

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>