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 v2.0
    HC-05 zs-040 V2.1
    HC-05 FC-114 and HC-06 FC-114
    HC-05 and HC-06 zs-040 Bluetooth modules

Bluetooth 4 / BLE Modules
    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.print("Sketch:   ");   Serial.println(__FILE__);
    Serial.print("Uploaded: ");   Serial.println(__DATE__);
    Serial.println(" ");
    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");
void loop()
    // Read from the Bluetooth module and send to the Arduino Serial Monitor
    if (BTSerial.available())
        c =;
    // Read from the Serial Monitor and send to the Bluetooth module
    if (Serial.available())
        c =;
        // Echo the user input to the main window. The ">" character indicates the user entered text.
        if (NL) { Serial.print(">");  NL = false; }
        if (c==10) { NL = true; }


All modules are connected in a similar way.
vcc to 5V
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.



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


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



AT+HELP gets you a list of the available commands

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


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


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 v2.0

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


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.


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.


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


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.


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


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


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



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.


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.


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.


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.



Since there is no break out board all pins are 3.3v

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.

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


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
AT commands can be upper or lower case but require line end characters (\r\n)
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.


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

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.



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.

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

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

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

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


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



139 thoughts on “Bluetooth Modules”

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

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

    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.

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

      EDIT: It appears there are many AT09 modules with a slightly wrong crystal. This means their frequencies are off and so they only see each other.

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

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

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

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

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

  9. 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).

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

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

  12. 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?

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

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

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

  16. 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:

    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?


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

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

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

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

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

  22. I have tried to connect a HID device to the HM-10 (HMSoft V603) for a while. I get a positive feedback (OK+CONN) when connecting. But I don’t get any data via UART and I didn’t find any command in the current manual (V550 2017-07) that helped me. I wonder if it is even possible to connect the HM-10 to a HID device (BT keyboard or similar). Thank you for your advice! Cheers, Claus.

    • It is not possible. HID and BLE are different protocols.

      To connect a HID peripheral you need a HID central/host device and I am not sure there is anything for the hobby market.

      A while ago I wanted to connect a small Bluetooth HID game controller to an Arduino which required a Bluetooth module acting as a host controller and I could not find anything. I found plenty of modules that could turn an Arduino in to a controller but nothing that allowed the Arduino to connect to a controller.

  23. Hi Martyn, thanks for sharing your studies with the community. I have a BLE sensor and I can get all the services and characteristics using a BLE Scanner on Android. I trying to use an MH10 (HMSoft V545) as a master to get a characteristic but I don’t have success. The steps I made:


    I am stopped in that last command, How we can get a specific characteristic of a BLE device?

    Thank you!!!

    • To read a non HM-10 sensor you need to change the HM-10s service and characteristic UUIDs to match the sensor. You them need ti use the self learn mode to have the HM-10 get the characteristics properties.

  24. I’ve found another version of SPP-C, which introduces itself as JDY-30, Copyright@2012 AT+HELP response is identical to the bolutek one, except the copyright. PCB also looks almost the same, yet it is marked JDY-09 instead of ZS-040, the BT breakout board has some silkscreen, and does not have soldermask in the aerial area (like in original HC-05).

  25. Very good job Martyn, well done :-)
    It is full of very valuable information. Please, let’s me try to contribute a bit myself, here I go.

    1) BT12 = HC-06 + CC2541, at 3USD :-)
    BT12 is dual-mode serial port Bluetooth 2.0 & BLE v4.0.
    I haven’t test it myself but I’ll be curious to get any feedback here.

    2) AT09 with built in level conversion function :-)
    If you use 5.0V power supply port, TX RX logic level 5V.
    If you use 3.3V power supply port, TX RX logic level 3.3V.
    No need to add any resistor with 5Vdc Arduino. Isn’t much simpler :-)
    I ordered one and see if I can connect to both my Android & IOS’s devices. If yes, AT-09 should become my favorit BT module because of this auto voltage adaptation.

    3) Rx voltage divider:
    BT-Tx to Arduino Rx & BT-Rx to voltage divider then to Arduino Tx.
    Usually this voltage divider (2 stupid R) is recommended to step-down MCU 5V-Tx to 3V-Tx. But I saw many schematic showing direct connection BT-Rx to Arduino Tx…
    I personnaly tied HC-06 directly connected to my Arduino and I must admit this works all fine for days!
    Do we really need to add voltage divider with 5V MCU?

    4) Serial Bluetooth Terminal APP
    I would recommend this free “Serial Bluetooth Terminal” here
    It works really great, supports BT v2 & BLE v4 & offers 10 configurable buttons ☺

    • sorry about the very late reply.

      RE #3.
      Many people do not use a voltage converter and do not report any problems. However, the specs clearly state that the chips are 3.3v devices so I personally think it is better to be safe.

      A while ago I did some simple experiments with 3 HC-05s. Each was connected directly to a 5V arduino with a basic loop sending data to BT module. Eventually the RX pin on all the HC-05s died. Took a while though.

  26. Hi Martyn, Thanks, that’s helped me start. Now I know I’m using SPP-C module from Bolutek. I’ve been using it as slave, works fine. Now I want it as master. It starts conveniently in 9600 baud. I can talk to it, see the help, enter a few commands. AT+role gives 0, at+role=1 gives error=106. I’ve followed various links to lists of at commands, but none of them detail the errors. Any ideas?

  27. Hello Martyn! I really need your help! I;m connecting an AT-09 module with my Arduino UNO board(GND-GND, VCC-3.3V, TX-RX, RX-TX) and it seems although it shows that it’s paired with my Windows 10 PC it doesn;t send any data remotely.. when i pair it with my tablet (Android) and use BLE LEGATT application data are sent i can see them but on my PC through the serial monitor of the ARduino I can’t (althought i change the port from tools).. i added a bluetooth serial port manually but I don’t know if the bluetooth is actually connected to the the services tab of its properties it doesn;t show any COM Port (in another laptop i tried it showed GATT COM ports)

    • Windows does not create a COM port for BLE connections. It treats BLE very differently to BT Classic. Search the Microsoft store for BLE scanner apps and see if it helps.

      • Yes I tried many things.. Bluetooth terminals and so on but nothing worked.. if i used the HC-06 module as i see many people use will it create a com port?
        Thanks a lot for the answer and for your help!

        • What module do you actually have?

          The AT09 is BLE
          The HC-06 and HC-05 are BT classic.

          BLE is difficult to use with Windows.

          If you want to use a module with windows then the best option is HC-06 or HC-05 and BT classic.
          For HC-05 and HC-06 you will need a usb to serial adapter.

          • So i also need an adapter for use with windows 10? isn;t it directly identifiable as a bluetooth com port? Because i want the bluetooth to connect and send data wirelessly to the computer..
            do you have any usb to serial adapter to recommend?
            Thanks again! :)

  28. Hello! I used the HC-05 and it worked perfect!! It recognizes the serial ports so I can send data from the Bluetooth to the serial monitor of the Arduino IDE on my PC!!! Thank you very much for your help!!

  29. Hi Martyn.
    I’ve got 2 HC-06 versions, very similar but different. Both with the CSR BC417 and the memory MX 29LV800. The 1st accepts AT commands, has linvor 1.8 firmware and when paired with bluetooth I send and receive caracters with an Android SPP app.
    Using the same soft (Arduino) and circuit, with the 2nd one I have no answer with the AT commands. I can pair it but the sent and received caracters are strange symbols, and if I send an string I not receive the same amount of caracters. It looks like a speed problem, but I’ve tried to set all the available speeds in the initializacion device and I could not obtain an AT answer.
    Do you have any idea?
    I could send you a picture of the HC-06 module.
    Thanks a lot

    • Strange symbols usually means the wrong baud rate.

      Not all modules have the same firmware and different firmwares require different settings. Try different baud rates, uppercase, lowercase, line end characters and no line end characters.

  30. Aloha,

    have you ever had the BT-12 on your desk and did you research the AT-command base this module supports. Any resources to link to?

    The module can be found on ebay:

    And here is a detailed data sheet, but unfortunately only electrical specs, no firmeware / at-command specs:

  31. Hi! pl.s help me I have the SPP-C HC-06 / BT06 HC-06, BOLUTEK Firmware V2.2, Bluetooth V2.1 version accoding to design as it is a one small chip HC-06, at 9600baud I connected to serial monitod via FTDI adapter, not using arduino to set AT commands just the FTDI adapter and arduino ide serial monitor.
    I wanted to set baud to 1200 so used AT+BAUD1 it accepted teh command but since than it does not respond to AT or send any readable character when powercycle at any baud usind the serial monitor and that FTDI adapter :( how can I reset it back to factory mode withut figuring out bad rate and working AT mode again?
    Here I copy paste what is sends as info whenpower cycle at different bauds:
    2400 ⸮⸮
    4800 Tq!DW⸮⸮
    9600 ⸮& Fb )⸮!⸮b
    19200 ⸮⸮⸮DiCC⸮n;⸮0⸮⸮i@33K⸮ôa;⸮0⸮
    38400 ⸮⸮⸮⸮⸮⸮|⸮pΌ8
    57600 ⸮⸮⸮⸮x<⸮⸮⸮x<
    74880 ⸮⸮⸮⸮
    115500 ⸮⸮⸮⸮
    230400 ⸮⸮
    Strange that at 1200baud mode nothing shown even from power cycle :( tred many computers etc..

      • I have exactly the same problem.
        I set the baud rate to 1200 on 2 different modules, one identifying itself as JDY-30 and the other as BT04-A.
        Both of them stopped responding and are essentially bricked.
        Is there a way to reset them to default?
        Another problem is with an HC-06 (HC-06 zs-040 v2.0) which does not respond to AT commands, although it passes data through in both directions. Should I connect the empty ‘En’ pad to power or ground?

        • This may or may not work…

          RE baud rate.
          Arduinos + software serial arn’t 100% reliable at 1200 bps. Have you tried connecting directly to a computer (would need a serial to usb adapter).

          RE reset.
          On the JDY-30 pin 11 is the reset pin. Try:
          1 – power on, bring pin 11 to GND for more than 1 second
          2 – bring pin 11 to GND then connect to power, wait for more than 1 second

          If this does not work try the same for 10 seconds.

          Re HC-06.
          I doubt the EN pad/pin is connected to anything. On most HC-05 modules this is the ENABLE pin and used to restart the module.

          The HC-06 zs-040 v2.0 should be
          – baud rate = 9600
          – nl/cr line endings not required.
          – AT commands in upper case

          but it is worth trying other combinations of upper/lower case and with and without line end characters.

  32. Hey can you help me? I tried to change the baud rate of my AT-09 and I gave the command AT+BAUD2 and suddenly the module is interacting at 2400 baud. The strange thing is it returns OK on AT command but all other instructions are returning an error. AT+HELP or any other instruction except for AT is returning ERROR.

    • Hi! I have the same module (at-09 cc2541) and also exactly the same problem with you. I searched ALL the internet and i didn’t found any solution.

      I read in an article that you can connect the PIO0 (or pin P1_3 of the chip, or KEY of the module) to GROUND for at least 1 second when the chip is on standby, and then the chip will be set the default settings. BUT that didn’t worked for me :(

      The at-09 has the command AT-RENEW that setting the default settings on chip so i think that maybe there will be a solution (and maybe hardware solution) for our problem.

      I will research for some solution but if you find solution it will be helpful to tell it to me.

      Thank you and sorry for my poor english!

  33. Hello Martyn
    Great information on these modules. I notice the TI cc2541 used in some of these modules (and in the ones I have) is actually a complete 8051 SoC with ADCs and digital I/O and probably capable of doing a lot of stuff without an Arduino. Do you know is anybody has gone down that route ? Obviously it would need the source code for the Bluetooth section to begin with. Do you know if that is available ?
    Any help would be much appreciated.

  34. Hi Martyn,
    I have TZT AT-09 with CC2141
    +VERSION=Firmware V4.2.0,Bluetooth V4.0 LE
    In slave mode, regardless to TYPE setting, attempt to pair leads to “connection rejected by peer” or something like that (tried 2 phones) with no attempt to ask passowd (at that moment module shows OK+CONN followed by OK+LOST), whereas BLE Scanner app is able to connect without pairing, and shows BLE info.

    Should pairing be possible or these modules do not allow that?

    Another question – should data transfer connection be possible somehow (like for older modules supporting BT V2.1 EDR)?

  35. I have a bluetooth module hc-05 ver 3.0 and ver 2.0 I can’t communicate with a tomato joystick (VR BOX)

    Universal remote controller VR-Manual-d10.pdf – HamiltonBuhl

    Could you give me some advice


    Cesar Sanchez

    Tengo un modulo bluetooth hc-05 ver 3.0 y ver2.0 no logro comunicar con un joystick tomate (VR BOX)

    Universal VR Remote Controller-Manual-d10.pdf – HamiltonBuhl

    Podria darme algun consejo


    Cesar sanchez

    • This appears to be a HID device which is not compatible with the HC-05. I have a similar but smaller joystick controller.

      To use the controller with a microprocessor you need a Bluetooth HID host module. I have never found anything (haven’t looked recently though).

  36. Hi Martyn,
    Very useful article. Thank you.
    Any recommendations to find information about JDY modules. Seems there are few modules JDY 08, 19, 62, etc. But there is no background information, applications & reliable supplier.
    Thank you.

    • Not really.

      I have a set (2 of each module) that I meant to write up but never got round to it. For the most part they are pretty standard (cheap) UART modules. If you have a module in mind google the model number and search for the data sheet. It should be online somewhere.

  37. Hi Martyn!
    I have a problem :(
    I have AT-09 (v.5.3).
    If I set new name (AT+NAME for ex AT+NAMETest) BLE Scanner has seen it like “Test…”. And I do not understand why this “three dots” is appearing.
    With HC-06 and HM-10 all is ok.
    Have a solution or some idea for this?

    • I can’t find my AT-09 modules so cannot check this out.

      Try different apps, do they all have dots?
      The module maybe filling in empty characters; try longer names (I think the limit is 10 characters but can’t remember for sure). Do different length names have the dots and do they all have the same number of dots?

      • q: “Try different apps, do they all have dots?”
        a: I dont try it, but my MobileApp does not see the module too. It has strong SSID names in Data. But, I’ll try.

        q: “try longer names”
        a: done. Maximum 12 characters.

        q: “Do different length names have the dots and do they all have the same number of dots?”
        a: I did it and yes, it has “…”.

        I think may be something default settings is empty?

  38. In here you describe a module that identifies itself as BT04-A.
    I have the very same module but without the support print. After pairing and connecting I can send information TO this module with bluetooth, but NOT FROM it.
    I use a mac. Do you have any experience or feedback from others that can shed a light here? It couldn’t be hardware issue else it would not have paired and connected. I saw one other user report this in another forum but no further clues.
    This module type is currently half the offered type on AliExpress.

  39. In here you describe a module that identifies itself as BT04-A.
    I have the very same module but without the support print. After pairing and connecting I can send information TO this module with bluetooth, but NOT FROM it.
    I use a mac. Do you have any experience or feedback from others that can shed a light here? It couldn’t be hardware issue else it would not have paired and connected. I saw one other user report this in another forum but no further clues. I even bought a second one, and the same issue.
    This module type is currently half the offered type on AliExpress.

  40. hello
    The device shows up at HMSoft on my phone and when I try to pair with it I see nothing… I connected it ble scaneer app. but not connected with mobile phone ..

        • With BLE it is the app that makes the connection and you should not need to pair with the phone.

          If the app says you need to pair then I suspect the app is Bluetooth Classic and not BLE.

  41. I just bought an HM-10 from amazon called DSDTECH (I guess it’s the production house). The chip says CC2541.
    I have some suspicions that the module is used, but it looks like new.
    I’m trying on an Arduino Pro Micro (Leonardo) to connect it directly on pins 2 and 3 and to use the AT commands. The red led blinks until I connect it to the smartphone (I’m using the Nordic “nRf Connect” app) and then it stays fixed.
    The first “AT” command, DOES NOT return any “OK”.
    The only thing it does is to disconnect from the smartphone when I send that command.
    (If I inverted RX and TX it wouldn’t disconnect, so I think I connected them correctly)
    How to get an “OK”? :(

  42. I am looking for a bluetooth module which has a range of at least 1.5- 2 meters and will be able to travel through a 1.5mm thick steel plate. Is there something like this available? Will HC-05 bluetooth modules work?

  43. Whenever the Module starts to blink, I cant receive data.
    Best Tutorial ever, though I ran into an issue with my HC-05 VERSION:4.0-20190728.
    The Bleutooth module is connected to an Arduino UNO with pin 8 and 9 using altSoftSerial baud 9600. Everything connects well and I can pair with the HC module so the led blinks slowly every 2 Seconds. I can also send data to switch on the led on the arduino and check it on the serial monitor on the PC.
    But whenever the Module starts to blink, I cant receive data on the arduino. Only after the blink on the HC is gone I suddenly receive all the data. Do you have any suggestions?

      • I faced the same problem too. I have tried many things. But there is a link. I have used many Bluetooth modules. I could not understand why the data is not gone sometimes and then they all come together.

  44. Hi Martyn Nice article. And now I seen you active answer the question.
    I have some.
    In AT command mode and transmission mode. It use the same connect pin Rx pin>Tx pin,Tx pin>Rx pin Right?(I seen some youtuber use Rx>Rx,Tx>Tx and I confused.)
    How to switch between command mode and transmission mode? I use JDY-31 (BEKEN BK3231 Chip) have 6 pins STATE,RXD,TXD,GND,VCC,EN .Don’t have EN button. And baud rate of mode is same?
    Can send AT command string from MCU? I plan to use some mobile app(Serial Bluetooth Terminal) to send AT command string (“AT+PIN=NEWPIN”) save string in EEPROM and switch Bluetooth to AT mode and send string to it. Is possible?
    Hope you safe. Thanks.

    • Hi,
      I never got round to doing a write on the JDY modules.

      Connection should be RX <-> TX and TX <-> RX. If one module is sending then the other has to be receiving and vice versa.

      The JDY-31, if I remember correctly, is a slave only device (same as the HC-06) (worth double checking) in which case it cannot make connections it can only accept them. Connections can be made from such things as HC-05s or Android devices. After a connection is made the JDY-31 automatically switches to communication mode.

      When connected AT commands no longer work. Anything entered is treated as data and transmitted. Everything that is except AT+DISC. This forces a disconnection.

      • Thanks Martyn that helpful.
        That mean I can send string to EEPROM and make some function to disconnect and put string in AT command to config it.
        Thanks again.

  45. Yahboom ships “ZS-040” Bluetooth modules with their Smart Bat Car robots that appear to have a BEKEN BK3432 SoC module on them – hard to tell because it looks like they tried to rub the lettering off before heat-shrinking them.

    According to the BEKEN site these are Bluetooth Dual Mode 5.0 modules, but I can’t find any data on them. Has anyone seen these before?

    • I found a BEKEN “BK3432 Bluetooth Dual Mode SoC Classic and Low Energy v0.1” datasheet on, but haven’t figured out yet how to access the PDF document hidden behind all the iframes. REF:

      I haven’t been able to determine what class of firmware is on these devices, AT+VERSION returns a vague “+VERSION=v1.0” and nothing else.

      The AT+BAUD command seems to be bugged. If you put a 1-14ms delay between “AT+BAUD” and the following cr-lf characters it seems to switch baud rates, but to what baud rate? Delays of 15ms or more result in “ERROR=103” responses.

      In experimenting with various AT+ commands so far have only gotten responses such as the following (no delays between commands and the following cr-lf):
      > AT
      < +BAUD=4
      < +CHAR=FFF0
      < OK
      < +READY
      < +UUID=FFF0
      < +VERSION=v1.0

      Hope this helps.

  46. Hi, Definitely the best tutorial ever.
    I’d like to simply read from my phone (a BLE terminal) a voltage in one of the ADC inputs.
    When I send via the Arduino the AT+VERSION I get:
    > MLT-BT05-V4.1
    And when I send the following sequence
    The phone can no longer connect and returns:
    Connection failed: gatt status 133
    Can you help me?

  47. ok, it is good,
    The big secret is to use or not to use the terminator after the characters AT, such as CR and LF. In the case of this HC-06 V1.05, you must not use line terminator, if line terminators are used, the module does not respond to AT commands, it is completely muted.

  48. Ok! Have cursed the module for like 3 days, but finaly got it working. The tricky part is the voltage divider. First I didn’t use the voltage at all because of other examples on the internet. Turned out the arduino micro boards are running on 3.6V and not on 5.5V like the Uno (which I was using).

    Then I found this page with the info about the diferences in voltages for the VCC and the RXD port. So I made a voltage divder, but used the wrong resister. 5 band resistors can be tricky to read!

    So if you can receive data in the arduino serial, but cannot use any AT commands or send data, make sure you check your voltage divider!

  49. Hello Martin,
    I try to use HC-05 for arduino software upload, I bought 2 different models of bluetooth modules, but it wasn’t possible to use it because the AT+POLAR comand doesn’t work.
    Have you any ideea, or can you suggest me other metod to use BT modules for arduino OTA programming?
    I precise that:
    The first BT module is HC-05, VERSION: 5.0-20220104
    The second one is HC-05 : VERSION: 4.0-20190728 (saled as “original”).
    Thank you in advance for your time and advices.
    All the best,

  50. Hello,

    I cannot connect a AT-09 Bluetooth V4.0 CC2541 to my PC that is running on Windows 10. When trying to connect a password is required. I have tried with 000000, 123456, 654321, 012345 and it does not connect.
    The light of the AT module stop blinking for a while and then start again blinking…..
    What should be the problem? Is it possible to connect with windows 10?



Leave a Reply to Martyn Cancel reply