MLT-BT05 BLE module – a clone of a clone?? 104

Previously I covered the HM-10 Bluetooth Low Energy (BLE) module and its clone, the CC41-A.  Those are two popular modules that allow simple BLE communication through a serial interface and are handy with Arduinos and other hobby micro controllers. Make sure you read that article first as it provides important background for this curious update.

Recently I ordered a few BLE modules on ebay. The listing was using the name “HM-10” but the pictures where showing what is known as “CC41-A”. Though confusing, this happens with many items on ebay as it appears that “HM-10” lost its meaning as a specific model and is now more of a definition of a specific functionality. Having good experience with the CC41-A, I ordered a bunch.

CC41 Front

A few weeks later I get my package. Everything looks good at first and I try the modules. I quickly discover differences in behavior from what I have used in the past. Though very similar to the CC41-A, the modules I received seem to be a completely new model, “MLT-BT05”. The “MLT-BT05” looks a lot like a clone of the “CC41-A”, which amusingly is a clone of the “HM-10”. Unlike the “CC41-A”, the “MLT-BT05” is not a good clone and I will elaborate on this topic below.

Differences between “CC41-A” and “MLT-BT05”

MLT-BT05 Front

 

The modules are different in hardware and in software (or rather firmware). Let’s discuss the differences and similarities one by one, starting with the physical differences.

The daughter board

This part looks identical. The similarity goes as far as having a place for a second oscillator but not having one soldered, which is a differentiator compared to the original “HM-10” (which has 2 oscillators). Same TI CC2541 chip, antenna, etc.

The breakout board

This part connects the daughter board to the pins. The PCB layout is different, with the main differentiator being a 5-pin voltage regulator compared to the 3-pin on in the “CC41-A”. Some other differences are in the passive components, mainly resistors.

Both modules have six 2.54mm pins for interfacing with the micro controller: STATE, RXD, TXD, GND, VCC, EN. However, the STATE pin of the “MLT-BT05” seems to be floating. This effectively means that there is no usable STATE pin. I haven’t tested the EN pin but power and UART pins seem to be working properly.

The lack of a working STATE pin in the “MLT-BT05” can be explained by fewer connections between the daughter board and the breakout board compared to the “CC41-A”. Specifically 1 vs 4 soldered pads on the bottom of the module.

Solder joints MLT (top) vs CC41 (bottom)

Back side

The size is the same, but the PCB layout is completely different.

ZS-040, CC41 Back

MLT-BT05 Back

The text is the same, but the “MLT-BT05” has a thicker silkscreen print than the “CC41-A”.

AT command syntax

Both modules expect a “carriage-return and new-line” at the end of commands. There is a subtle difference, though. The “MLT-BT05” expects its CR-NL to be sent immediately with the command, while the “CC41-A” will be happy even if there is a slight delay between the command and the CR-NL. That would indicate that the “CC41-A” is doing a better job buffering and that there are differences in the firmware of the modules.

Both modules also don’t need a ‘?’ at the end of the commands when querying for the current value. This essentially means that the two clones are closer to each other than to the original “HM-10”.

AT commands

AT+HELP of the “CC41-A”:

********************************************************************
* Command             Description                       
* ---------------------------------------------------------------- 
* AT                  Check if the command terminal work normally  
* AT+RESET            Software reboot                   
* AT+VERSION          Get firmware, bluetooth, HCI and LMP version 
* AT+HELP             List all the commands                   
* AT+NAME             Get/Set local device name                    
* AT+PIN              Get/Set pin code for pairing                 
* AT+PASS             Get/Set pin code for pairing                 
* AT+BAUD             Get/Set baud rate                           
* AT+LADDR            Get local bluetooth address           
* AT+ADDR             Get local bluetooth address           
* AT+DEFAULT          Restore factory default               
* AT+RENEW            Restore factory default               
* AT+STATE            Get current state                   
* AT+PWRM             Get/Set power on mode(low power)            
* AT+POWE             Get/Set RF transmit power            
* AT+SLEEP            Sleep mode                            
* AT+ROLE             Get/Set current role.                       
* AT+PARI             Get/Set UART parity bit.                     
* AT+STOP             Get/Set UART stop bit.                       
* AT+START            System start working.               
* AT+IMME             System wait for command when power on.       
* AT+IBEA             Switch iBeacon mode.                       
* AT+IBE0             Set iBeacon UUID 0.                           
* AT+IBE1             Set iBeacon UUID 1.                           
* AT+IBE2             Set iBeacon UUID 2.                           
* AT+IBE3             Set iBeacon UUID 3.                           
* AT+MARJ             Set iBeacon MARJ .                           
* AT+MINO             Set iBeacon MINO .                           
* AT+MEA              Set iBeacon MEA .                           
* AT+NOTI             Notify connection event .                    
* AT+UUID             Get/Set system SERVER_UUID .                   
* AT+CHAR             Get/Set system CHAR_UUID .                   
* -----------------------------------------------------------------*
* Note: (M) = The command support slave mode only.            
* For more information, please visit http://www.bolutek.com        
* Copyright@2013 www.bolutek.com. All rights reserved.           
********************************************************************

AT+HELP of the “MLT-BT05”:

*******************************************************************
* Command             Description                       
*----------------------------------------------------------------
* AT                  Check if the command terminal work normally 
* AT+DEFAULT          Restore factory default               
* AT+BAUD             Get/Set baud rate                   
* AT+RESET            Software reboot                   
* AT+ROLE             Get/Set current role.                       
* AT+DISC             Disconnect connection                       
* AT+ADVEN            Broadcast switch                     
* AT+ADVI             Broadcast interval                   
* AT+NINTERVAL        Connection interval                         
* AT+POWE             Get/Set RF transmit power            
* AT+NAME             Get/Set local device name                   
* AT+LADDR            Get local bluetooth address           
* AT+VERSION          Get firmware, bluetooth, HCI and LMP version
* AT+TYPE             Binding and pairing settings           
* AT+PIN              Get/Set pin code for pairing                
* AT+UUID             Get/Set system SERVER_UUID .                   
* AT+CHAR             Get/Set system CHAR_UUID .                   
* AT+INQ              Search from device                   
* AT+RSLV             Read the scan list MAC address           
* AT+CONN             Connected scan list device           
* AT+CONA             Connection specified MAC                   
* AT+BAND             Binding from device                   
* AT+CLRBAND          Cancel binding                       
* AT+GETDCN           Number of scanned list devices           
* AT+SLEEP            Sleep mode                            
* AT+HELP             List all the commands                   
* --------------------------------------------------------------- 
******************************************************************

Some commands are the same and some are different. The “CC41-A” mentions its manufacturer, Bolutek, but the “MLT-BT05” mentions nothing about its origin.

Version and Name

Some commands offer us more information about the identity of the module. Here is a comparison of the responses to “AT+VERSION”:

“CC41-A”:

+VERSION=Firmware V3.0.6,Bluetooth V4.0 LE

“MLT-BT05”:

MLT-BT05-V4.0

Here is a comparison of the responses to “AT+NAME” with the default name set in the module:

“CC41-A”:

+NAME=BT05

“MLT-BT05”:

+NAME=MLT-BT05

Documentation about the “MLT-BT05”

I wasn’t able to find a lot of data about this module online. I found a zip file with stuff for the “MLT-BT04 V4” at what seems to be Baidu cloud file hosting. It included some BLE software and two PDFs in Chinese. An “MLT-BT05 4.0 AT-commands” document and an “MLT-BT05 4.0 datasheet”. Both useful to get some additional information and readable with Google Translate. It comes as no surprise that, once again, the files are lacking any information on the manufacturer. If you aware of any additional documentation, please mention it in the comments.

I have added the “MLT-BT05” to the arduino-ble-ident-n-set project, which should allow you to identify and configure your different BLE modules easily.

Is this a good clone of clone?

Assuming the practice of having and using clones doesn’t bother us, what will be important is whether the clone has the functionality that we expect. In this case, the “MLT-BT05” failed me big time. A module that looks like a module with a STATE pin but having a floating pin instead is not a proper clone and in my opinion is not truthful.

Update: The failure is due to a bad job of assembling the module. Can be fixed by a solder connection between the daughter board and the breakout board. Not a direct defect of the “MLT-BT05” and in fact, lately I am getting “CC41” modules with the same breakout and defect suggesting the same low-quality assembly facility that uses whatever boards it can get. Keep reading for the details and the fix.

Surely, if you are using the module in a way such that you are not using the STATE pin, then this might be an option for you. How you would be doing that without any ill effects is an interesting question.

Doing safe communications with a module like this, without knowing your connection state, is bad practice. The reason for that is that the serial communication line between the module and the micro controller is used both for commands and for data. The connection state determines whether we are in command mode or data mode. Not knowing the current state/mode could result in sending data that will be interpreted as commands and vice versa.

There are communication modules without a STATE pin, but those have a way to switch modes and query for current connection state with AT commands. For example Adafruit Flora Bluefruit LE. Perhaps the “MLT-BL05” can get such functionality in a firmware update one day.

Amusingly, the AT commands document mentions a command that is absent from AT+HELP listing. The AT+GETSTAT which should return 0 for “disconnected” and 1 for “connected”. What is amusing is that commands can only be sent while in disconnected state, so I am not sure if there is a “non-silly” way of using this command and getting something other than “0”.

Fixing the STATE pin in MLT-BL05 in hardware

Reading the datasheet of the module we find the following diagram:

MLT-BL05 diagram

Out of all the pads on the right side of the board, the module comes with only pad 24 (P1_2) soldered. This pad is powering a led that is blinking in different ways depending on mode and role.

The documentation discusses pad 25 (P1_1) and describes it as HIGH on “connected” and LOW on “disconnected”. Exactly how STATE pin should perform. So is this a case of “doing one solder joint less”? Or is there some deeper reasoning behind that due to firmware issues or PCB layout? The module is in shrink-wrap, so no knowing without opening it up. Sounds like an interesting thing to investigate and write about in another blog post.

Will keep you updated. If you find out any interesting information about this module, please share in the comments below.

Update: Fixing the STATE pin of the MLT-BT05 is possible.

104 thoughts on “MLT-BT05 BLE module – a clone of a clone??

  1. Reply Joe Mar 28,2017 5:27 pm

    Thanks for the info, I got one of these off eBay expecting a CC41-A.

    I can live without the STATE pin but I needed more firmware functionality for iBeacon support, so I just wanted to point out that its easy to flash the official HM-10 firmware on these boards as per https://forum.arduino.cc/index.php?topic=393655

    • Reply Arik Yavilevich Mar 28,2017 5:42 pm

      Hi Joe, thanks for the info.
      A quick spoiler, in case you want the STATE pin functionality. I was able to make it work by soldering the missing solder joint between the module board and the breakout board. I will post a detailed article with pics at a later time.

  2. Pingback: Fixing a bad STATE pin on an MLT-BT05 BLE module | Arik Yavilevich's blog

  3. Reply Stefan Apr 10,2017 7:09 pm

    Hello, I have a question. How do I have to configure MLTBT05 to connect it to android BT terminal? A have a arduino Uno and although the phone it self sees the shield, the app wont connect to it/

    Thanks in advance.

    • Reply Arik Yavilevich Apr 11,2017 5:03 pm

      Hi Stefan, what kind of “android BT terminal” are you using? If this a kind of Bluetooth Low Energy (BLE) terminal or a regular Bluetooth serial terminal? Try “nRF connect” app by Nordic for BLE modules such as the MLT-BT05.

  4. Reply Albert from EE Apr 26,2017 7:20 pm

    Hi Arik, thank you for doing an amazing job! Its now clear that Technion wasn’t in vain :+>. I am trying to use your “arduino-ble-ident-n-set” project to talk to my MLT-BL05 clone. Unfortunately I can’t load the project to my Arduino Nano board via Arduino IDE. Do you have an idea of what might be the problem ?

    Regards,
    Albert

    • Reply Arik Yavilevich Apr 27,2017 10:50 am

      Hi Abert, greetings to the EE department. 😉
      Can you load other projects to your Nano, such as the “blink” sketch?
      What happens when you try to upload “arduino-ble-ident-n-set”? Do you get some error?

  5. Reply Albert from EE Apr 27,2017 11:07 am

    Hi Arik,

    I have successfully uploaded the your sketch. There is a different issue though. When the Arduino Nano TX and RX are connected to the ZS-040 RX & TX I can ‘t upload the sketch. That was initially the problem. When I disconnect I am able to see the set up of your program prompting me with Qs. But as I connect the RX & TX of Nano board and ZS-040 the TX led on the Nano board goes red and your program hangs. Thus the interaction via Arduino serial monitor is frozen.

    Any ideas ?

    • Reply Arik Yavilevich Apr 27,2017 11:46 am

      Sure, by Nano TX and RX pins you refer to D0 and D1 pins. Those are special. If you look in the sketch you can see that it is written to work with the BLE serial through ports 8 and 9 (by default). It does that with a technique called SoftwareSerial. You can’t use your D0 and D1 pins both for serial to the module and serial to the PC/USB. Choose different pair of pins for the module. Review information about software serial and hardware serial capabilities of the Arduino. Don’t forget to convert the logic signal to 3.3V if your module requires so. Good luck.

  6. Reply Albert from EE Apr 27,2017 12:50 pm

    Thank Arik,

    It was very helpful, but a bit too late. Before I got your response I came across the following tutorial from Hexor and YouTube video who basically explains how to turn your ZS-040 into HM-10 by bootloading an appropriate firmware. It worked OK for all the guys in the forum except me and a few others. Now I am looking for a way to boot with factory definitions, are you familiar with a way doing so ?

    Regards

    • Reply Arik Yavilevich Apr 27,2017 1:24 pm

      Hey Albert, I don’t know a way to boot to factory definitions. You might try to flash the original firmware if you can find a download of it.
      Your description is very low on details. What happened during the flashing process? Why did you try to flash another firmware? Were you able to communicate with the board before the flashing? Are you able to communicate with the board after flashing? What Arduino are you using? How are the Arduino and module connected? How do you convert logic levels? And more…

  7. Reply Albert from EE Apr 27,2017 1:52 pm

    Arik,

    I will answer your questions one by one:
    Q:What happened during the flashing process?
    A:This link describes the flashing from A-Z. The flashing went appearntly smooth but the at end of the process the led on the ZS-040 should blink. It doesn’t blink on my board any more. It’s simply off and the board doesn’t pear.
    Q: Why did you try to flash another firmware?
    A: You said State pin is essential and could be revived via Firmware update.
    Q:Were you able to communicate with the board before the flashing?
    A: I don’t know because I used the TX-0 & RX-1 pins which are used to communicate with the PC via USB (as you said).
    Q:Are you able to communicate with the board after flashing?
    A:When I run your sketch I get the following answer: “No response received from module.”
    Q:What Arduino are you using?
    A:I am using Arduino Nano.
    Q:How are the Arduino and module connected?
    A:Its connected via wires on a breadboard.
    Q:How do you convert logic levels?
    A:I used voltage divider on the TX of the Arduino (2.2ohm vs 1 ohm)

    I hope its more detailed now,
    Albert

    • Reply Arik Yavilevich Apr 27,2017 2:06 pm

      Hey Albert, much more clear now, thanks. I assume that before flashing the led was flashing and the module was pairing, correct?
      When doing the flashing, did you perform logic level conversion as well? Can you post a schematic of the flashing process? You might have flashed all zeros or all ones if there was no conversion.
      No other ideas for now but intrigued as to what happened. Good that these are just $3 ;).

  8. Reply Ashish Apr 27,2017 4:46 pm

    Hi, I have a query. I was able to connect to my MLT-BT05 module by nRF connect app. But, I couldn’t send or receive data. I used UART function of nRF toolbox, but it replied, “the device doesn’t have required services”. What should I do next? Please, guide me further. Thanks in advance.

    • Reply Arik Yavilevich Apr 27,2017 4:59 pm

      Hi Ashish,
      When the module has no BLE master connected to it (nRF disconnected), are you able to send AT commands to the module through the serial connection? If not, figure out that first.
      If you have commands working, try to enter into data mode and send packets of data from your phone to the serial end using BLE service “0000ffe0-0000-1000-8000-00805f9b34fb” and characteristic “0000ffe1-0000-1000-8000-00805f9b34fb”.

  9. Reply Ashish Apr 27,2017 5:09 pm

    Yes, I can send the AT commands through Arduino IDE.
    Which AT command is used for data mode?

    • Reply Arik Yavilevich Apr 27,2017 6:24 pm

      Hi,

      When the module is connected you automatically switch to data mode. You can try issuing AT commands once connected and see the behavior. During data mode, any data you send through the serial connection (“Arduino IDE”) is sent to the BLE master that is connected. You need to subscribe to notifications on the characteristic I mentioned above. Similarly, any values you write to the characteristic on the master will be received on the serial connection.

  10. Reply Ashish Apr 27,2017 7:11 pm

    Thanks for the help. Can send data now.
    However, can you please suggest me a way to transmit some analog value from arduino via bluetooth to the phone.
    Thanks again.

    • Reply Arik Yavilevich Apr 27,2017 7:29 pm

      Hi, if you can send data over BLE then you are already able to transmit analog values or any other strings or bytes. Are you asking about an alternative to nRF that would be a more convenient UI for looking at a stream of values? I can’t recommend one, but search for “BLE terminal” on the app store and you will some options. “BleTerm” looks promising, though I didn’t try it.

  11. Reply Ashish Apr 27,2017 7:24 pm

    I mean, how to store the continuous values on the phone?
    Anyway, thanks man.
    I bugged you a lot.

    • Reply Arik Yavilevich Apr 27,2017 7:32 pm

      Ohh, I see. Well, I don’t think there is any built-in support for storing the data over BLE. If there is no app for that already then you might need to make one. 😉

  12. Reply Peter Apr 27,2017 7:59 pm

    Did you find out the default pin for the bluetooth connection?

  13. Reply Cam May 5,2017 10:34 pm

    Arik, I ran one of the Chinese pdfs you found through google translate and the translation gave slightly more information in which you might be interested. You should try it with others.

    https://translate.google.com/translate?sl=zh-CN&tl=en&js=y&prev=_t&hl=en&ie=UTF-8&u=http%3A%2F%2Fblog.yavilevich.com%2Fwp-content%2Fuploads%2F2017%2F03%2FMLT-BT05-Datasheet-Chinese.pdf&edit-text=

    • Reply Arik Yavilevich May 6,2017 4:42 pm

      Hi Cam, you are absolutely right. I have done that originally to learn about the different pins. If you find out any additional information that you think is important or interesting please post it in the comments.

  14. Reply Orbitatronics Jun 23,2017 1:57 pm

    It’s interesting, i just got my clone of a clone, and indeed it had a solder joint missing. I soldered it as shown below, continuity tests showed you were indeed right as it’s pulled out to the state pin. I could use your software to change the name and passcode, but when i paired to my computer it never asked for a passcode, and regardless of what i do, my phone keeps instantly saying ‘connection rejected/terminated’ as soon as i click on the object to pair. Weird, i’m certain it has nothing to do with your code, must be a faulty unit.

    https://drive.google.com/file/d/1NaCd54A8Q-Z8C-RTwy6wwjKvSRseEWI8Zg/view?usp=sharing

    I used AT+RENEW DEFAULT and now your code shows this, which i found a bit odd:

    https://www.dropbox.com/s/2mir82rjqk3nn0a/Screenshot%202017-06-23%2014.55.20.png?dl=0

    I guess it’s money back time.

    • Reply Arik Yavilevich Jun 23,2017 5:57 pm

      (I discussed this issue with Ben offline, including a summary for the readers)

      Based on the firmware, this is the CC41 clone of the HM-10 (the one made by Bolutek). The breakout board is new and was not featured on this site previously. Unfortunately it seems that the entity assembling these modules didn’t solder the STATE connection (same entity that makes the MLT clones?).

      Passcode/Pin is not relevant and not implemented on the clones, as far as I have seen. Only the original has some sort of authentication.
      Pairing with the phone is not needed, as these are BLE modules. Need to use the right BLE app on the phone. For example ‘nRF connect’ on Android.

      Bad AT mode communication is probably due to power or wiring issues. Worked ok later.

      Ben, please update if there are updates.

  15. Reply NYanakiev Jun 27,2017 9:03 pm

    Hello, All,

    I’m trying to access MLT-BT05-V4.0 in Master mode to HEXIWEAR (wearable watch supporting Bluetooth v4.1). Scanning for the watch, I can’t see it at all, tried many settings, but probbaly I don’t understand the operation enough. Do you have any idea what could be the reason that I can’t find it? Is there something with the UUID/Characteristic sizes, because I see ot the MLT-BT05 that these are 16 bits wide. I will be very thankful for any help..

    • Reply Arik Yavilevich Jun 28,2017 7:08 am

      Hi NYanakiev,

      How are you scanning for it? Have you tried giving it a command to connect to the watch based on MAC without scanning?

      Here are some points:
      1) Try “nRF Connect for Mobile” or similar app on an Android smartphone to see if you can find the watch through other methods. Also check that you can connect to the watch and see the services.
      2) It might be possible that the watch advertising interval is too infrequent for the MLT to find it.
      3) I have not tried to use an MLT in master mode, but generally, service discovery happens after connection is successful, so differences in service UUID should not be a factor in connecting.
      4) 16bit IDs are ok in the standard. There are default values for the other bits. Effectively you are only specifying part of the UUID.
      5) The MLT has firmware that only lets it read and write one characteristic in a “serial-like” way. It might not be compatible with just any other BLE device. Try to connect to another MLT in peripheral mode.

  16. Reply NYanakiev Jul 1,2017 1:50 pm

    Hi, Arik Yavilevich,

    Thank you for the suggestion to connect directly with passing the MAC address!
    That succeeded from 1st time! Obviously the searching mechanism (AT+INQ) doesn’t compy between the MLT-BT05 and the HEXIWEAR clock. I am surprised that worked, the next step is to transfer meaningful data! 🙂 Thanks again !

    ps. check my blog, I will describe how to pair this device with Arduino, since I can’t find such project in the web.
    http://nikosarea.blogspot.bg/2017/07/hexiwear-and-mlt-bt05-bluetooth-ble.html

  17. Reply Noah King Oct 2,2017 4:11 pm

    For what’s it’s worth I just got a MLT-BT05 from Yourduino.com and the STATUS pin is working fine.

  18. Reply Phil Oct 7,2017 8:35 pm

    Hey there. I’m using the MLT-bt05’s on Arduino Unos. I’m habing connection issues where they appear to pair with each for a few seconds then unpair (assuming the indicator light on these behave the same as a HM10). Is this a defect with these units?

    • Reply Arik Yavilevich Oct 8,2017 5:39 am

      Hi Phil,

      For the HM10 clones, the light blinks when the device is not connected and the light is on when the device is connected.
      You can also check the STATE pin to see if you have a connection or not. The pin is HIGH when the device is connected. You need to have a working STATE pin to try that. Some devices come with the STATE pin disconnected.

  19. Reply Timo Oct 28,2017 4:44 pm

    This sure as fck helped me a lot.
    Thanx Arik!!

  20. Reply Phil Nov 25,2017 9:36 pm

    Great Article !

    I have a MLT-BT05-V4.1 Board here but it’s not working at all. Well, AT-Commands are working but neither my MacBook nor my iPhone is able to “see” the device.

    Also tried AT+ROLE1 and AT+INQ but no results.

    Have you got any information about the V4.1 (NOT 4.0)? Google only returns about 4 resources in Russian and far-eastern language …

    I’m thinking about flashing the genuine firmware – but would welcome using the module “as-it-is” if possible.

    • Reply Phil Nov 25,2017 9:38 pm

      Additional information: On the backside there is a printing “JDY-09” and some Chinese characters

    • Reply Arik Yavilevich Nov 26,2017 7:07 am

      Hi Phil,

      How are you trying to see the device on your iPhone? You should try to use a BLE scanner app for that. Is there a led on the board? What is its status?

      With regards to V4.1 or JDY-09, I have not encountered such boards. Can you upload photos from both sides and a link to the source of the board? Thanks.

  21. Reply Gonzalo Dec 6,2017 12:49 pm

    Hi Arik,
    first of all, thanks for all the information and research, such a great job.
    I recently purchased an MLT-BT05 on ebay, it was advertised as:”AT-09 Bluetooth 4.0 UART Modulo Transceptor BLE CC2540 CC2541 HM-10 MLT-BT05″
    I didn’t research a lot before buying so I got it, as a start board for my final project.

    I have been able to communicate through at commands with the serial monitor in arduino ide. But it only replies when I append \r at the end to the at command . I have marked both NL&CR on the ide, but I need to add “\r” in order to make it understand the command.
    I show you somer examples.

    BTserial started at 9600

    >AT+NAME\r
    +NAME=MLT-BT05

    >AT\r
    OK

    >AT+VERSION

    >AT+VERSION\r
    MLT-BT05-V4.1

    >AT+LADDR\r
    ERR

    As you see it returns an “ERR” when I ask for the address.
    By the way, I have a led connected at the state pin and it is on when connected through apps, I have tested BLEScanner,Serial Bluetooth, nrf connect, and all of them turn the led on when connected. They also find the MLT-BT05 default profile and the services .
    Now some questions, I hope that you can answer.

    Is it worth to try to flash some HM-10 firmware to get better response of the at commands and the tools provided?
    What tool may I use in order to create or modify Gatt profiles?

    Thanks again for sharing your work and time.

    • Reply Arik Yavilevich Dec 6,2017 9:16 pm

      Hi Gonzalo,

      Interesting update. You seem to have one of the newer V4.1 MLT-BT05, as opposed to the V4.0 ones I have and covered before.
      Perhaps they made changes to the firmware and changed the terminating character. Unfortunately I have no such module to test. Try different terminators to see what works.
      Can you provide a link where you got this from and photos of the module? I would like to compare to the ones I have.

  22. Reply Gonzalo Dec 7,2017 10:54 am

    Hi Arik,
    thanks for replying.
    The link where I got the module is the following:

    https://www.ebay.es/itm/AT-09-Bluetooth-4-0-UART-Modulo-Transceptor-BLE-CC2540-CC2541-HM-10-MLT-BT05/222141455325?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2057872.m2749.l2649

    I tried to send to you some pictures through wetransfer.
    Do you tyhink I could use bluetooth developer studio to work on the custom profiles with this module??

    Thanks again for your help
    Gonzalo

  23. Reply Gonzalo Dec 7,2017 11:15 am

    Hi Arik,

    here´s th elink to the pictures, the email I sent to, was rejected.
    They stay thers for 7 days.

    https://we.tl/sed0SXi5vk

    • Reply Arik Yavilevich Dec 7,2017 1:56 pm

      Hi Gonzalo,

      Thanks for the details. I see this is something sold by a Spanish seller. That could explain why I have not seen these before.
      The breakout board is like one I have but purchased some time ago. Seems like it is soldered well. The daughter board is a HM-10 clone. Based on what you mentioned, the firmware is MLT_BT05 V4.1 .
      We see more and more different breakout/daughter/firmware combinations coming up.

      With regards to modifying gatt profiles, that depends on what you want to modify. These modules are designed as serial-port-protocol modules and all the known HM-10 firmwares are doing just that. Some will allow you to change the UUID of the service or characteristic, but there are no commands for adding characteristics, etc. I recall a specific firmware (perhaps original HM-10) that allows to control GPIO via textual commands over the serial connection without gatt changes.

      If you want custom gatt profiles you will need to write and compile your own firmware that will do what you need. Normally you would use TI’s development toolkit. Perhaps “bluetooth developer studio” can help you do that easily, I don’t know.
      To flash a new firmware on the chip you would need a programmer for TI chips (CC Debugger) or to flash an Arduino with CC Debugger code. Then you need to identify the Debug data, Debug clock, Reset, Vcc and Gnd pins on your board and connect those to the programmer.

  24. Reply Gonzalo Dec 11,2017 6:50 am

    Ok, Arik thanks for your reply.
    Thanks for letting me clear that I would have to compile a new firmware. That´s what I thought. No chance with the Bluetooth Developer Studio, TI don´t have the plugin for the CC2451 as I read in a post the following :

    “The TI plugin is for SDKv2.1. I will see if this can be updated to make it more clear that it’s for CC2640 only. There is no option to generate code that is 100% compatible with CC2541 / BLE SDK v1.4.x.”
    Here is the link:
    https://e2e.ti.com/support/wireless_connectivity/bluetooth_low_energy/f/538/p/513091/1865348

    I already read about cc-debugger, but I didn´t know I had the chance to use the arduino to flash it with cc debugger code.
    Anyway, I guess that if I finally need to write those new profiles, it will be less cost effective to get a module compatible with BDS and easily updatable. Perhaps in the future with no endlines it would be great to give a try to compile my own firmware.

    Thanks for all the information, thanks for answering so fast and thanks for your help.
    Great job please keep up this incredible effort .
    Cheers
    Gonzalo

  25. Reply Gonzalo Jan 9,2018 9:17 am

    Hi Ari,
    I have finally managed to get the module working. I don´t know why , but now I have uploaded a simple sketch to comunicate with the module, and it works perfect. No need to append the “\n” to launch the AT commands , and all the AT commands get successfull when sent. So I guess my code was wrong, because the hardware connections are the same. So I thougt to post this comment, just in case someone was thinking about getting the module. It works as it should.

    • Reply Arik Yavilevich Jan 9,2018 6:04 pm

      Hi Gonzalo, thanks for the update and the clarification. LMK if you find new types of clone modules.

  26. Reply Mr.Kang Feb 1,2018 2:30 pm

    Hi Arik

    thank you for your comments about MLT-BT05.
    I am just beginner about arduino.
    so I want to find many information on website.
    and this blog is very good for me.

    and… I have a question.
    now I bought BLE module
    that time I think it’s HM-10.
    but after test it with PC, it’s “MLT-BT05 V4.1”
    thanks to this site, many questions is solved.
    I want to find around devices.
    of course, android phone app “BLE scanner” can find few devices.
    but this MLT-BT05 V4.1 can’t find this devices.
    I wrote at command as “AT+INQ” but reply is “OK” and then after 10seconds “+INQE”.
    I read your some reply “use direct MAC address”
    but I don’t know how can I send command “direct MAC address”
    could you help us about this?

    • Reply Kang Feb 2,2018 2:57 am

      I found AT command “AT+CONA123456789012” for direct mac address connection.
      this device is “SENSOR”.
      so I want to received data from this device.
      could you help me how can I received this sensor data on BLE module?

    • Reply Arik Yavilevich Feb 2,2018 8:29 am

      Hi Mr.Kang,

      Happy you found the info useful. Can you tell me where you purchased the V4.1 module? I am trying to get my hand on these.

      Please see this translated MLT-BT05 AT commands document http://denethor.wlu.ca/arduino/MLT-BT05-AT-commands-TRANSLATED.pdf
      It should be applicable for your module.

      You can see that commands have parameters, specifically AT+INQ needs to be passed 1 or 0. It will then show a numbered result list. You can use the numbers in the list to connect by using AT+CONN[id]. It doesn’t seem like you can just connect to another device by providing a MAC address directly. Also, you would need to be in “Master mode” first using AT+ROLE1.

      It is important to mention that the HM-10 family of modules are not generic BLE modules. They are serial line replacement and so are limited and probably can’t interface with most other BLE devices that expose different services/characteristics. I have not tested this, but they are most likely able to connect only to other HM-10 modules (or compatibles). Please check it out and let us know in the comments what you find out.

      • Reply Kang Feb 3,2018 12:13 am

        thank you comments.
        http://www.sunhokey.com/product/60351807361-802675176/HM_10_module.html?spm=a2700.8304367.prewdfa4cf.4.4ee1ff06JFyglD
        this site is my bought site about MLT-BT05-V4.1.
        if send command “AT+INQ1” or “AT+INQ0”, return is “ERR” only even though “AT+ROLE1” as master mode.
        so can’t connect AT+CONN[id]..
        So I used “AT+CONA0050c26c9607” command direct connection.
        return is “OK”
        and “AT+BAND0050c26c9607” command returned “OK”
        but “AT+RSLV” is ERR.
        and “AT+GETDCN” command is returned “+GETDCN:0”
        I don’t know .. how can I progressed next step for communication this device.
        this device is “DOOR OPEN SENSOR”
        of course, can be sensed on BLE scanner Application.
        could you help me again?

        • Reply Arik Yavilevich Feb 3,2018 7:37 pm

          Hi Kang,

          Try to connect to another HM-10 module which is slave. It is most likely that the modules can connect to each other, but not to any BLE device. The BLE scanner app on your phone is much more versatile and complex than an HM-10.

          • Reply Kang Feb 5,2018 2:11 am

            Thank you for reply always ^^

            yes. I tried to communicate with two MLT-BT05. and success it.
            moreover my mobile phone can be communicate with MLT-BT05 on “BLE chat” application.
            as you say, 1:1 or mobile phone:MLT-BT05 can be communicated.
            but MLT-BT05 : special device(DOOR OPEN SENSOR as BLE) can’t communicated perhaps..
            as a result.. for this device, I must find other BLE module…
            is it right?
            how about your opinion?

          • Reply Arik Yavilevich Feb 5,2018 11:32 am

            Hi Kang,

            Absolutely right. The HM-10 types devices can talk only a specific service+characteristic combination. To talk to various other devices I suggest a more flexible BLE module. Personally I prefer the ESP32, but there are many kinds from Nordic, TI and others.

          • Reply Kang Feb 6,2018 10:01 am

            thank you for your reply ^^
            in case of HM-10, there is many clone.
            how about ESP32?
            is it also clone?
            and all command is same?
            I found ESP32 on aliexpress.
            anything is OK?

          • Reply Arik Yavilevich Feb 6,2018 10:26 am

            Hi Kang,

            The ESP32 is a micro-controller with built in BLE. Do some research before you make an order. There are different dev boards with ESP32 but they all have the same chip, which is what matters.
            There are no commands. You will need to take an example c program that is similar to wha tyou are trying to do and build+flash it to the device.
            You can use the Arduino framework to work with ESP32 or you can use the framework from the manufacturer.

  27. Reply Suryanto Feb 5,2018 1:06 am

    Hi Arik,

    I’m a newbie, and try to pairing the BLE device to Android…

    1st time can’t connect/pairing, but the BLE detected as BT05..
    after try some code – not sure what (just copy paste the code of BLE Arduino code from some site) with Arduino IDE…
    Now, I can’t detected my BLE…

    Is my BLE is broken or is there a simple way to test it?
    Do i need to flash/upgrade/restore the firmware?

    • Reply Arik Yavilevich Feb 5,2018 11:35 am

      Hi Suryanto,

      What was the code/changes that you have made?

      First guess is that if something is connected to your module then it will not appear in scans.
      Second guess is that you might have damaged your module by connecting it incorrectly or to a different voltage that it is intended for. Try another module or see what the LED on the module tells you to.

  28. Reply CLMNT Feb 17,2018 8:38 pm

    Hello, I just received my bluetooth module (ebay), a clone of course (it’s difficult to find real HM-10 and has a resonable price) So I feel that mine is a exception because when I ask him for the version he sends me back +VERSION=02 oO
    There are a lot of AT commands that send me ERR such as AT + ROLE. AT command NAME send me back +NAME=BT05

    What is his problem oO!!!

    • Reply Arik Yavilevich Feb 18,2018 6:09 am

      Hi CLMNT,

      Indeed, real HM-10 are more difficult to find.
      What does it respond to a AT+HELP command?
      Perhaps it is not connected properly to the micro-controller via serial?
      Please link to photos of the module and the circuit you have built.

      • Reply CLMNT Feb 19,2018 2:56 am

        thank you for your reply

        Then the command AT + HELP sends me ERR.
        I tried with an arduino but I did not have more result. For my tests I use a ftdi converter. 5V to VCC, TX to RX, RX to TX and GND to GND. With an HC06 no problem with this converter so I think the problem comes from bluetooth module, I would have updated but before I would like to see with the seller if he can change me. But it’s still weird that the AT + VERSION command sends me + VERSION = 02 no? (And on the internet no track on this version)

        Thank you

        • Reply Arik Yavilevich Feb 19,2018 11:46 am

          Hi CLMNT,

          This is the first time I hear of a such a module. Does it work as a serial adapter if you connect a BLE device to it (such as a smartphone)?
          This might be a case of yet another firmware.

  29. Reply DAC Feb 19,2018 6:21 pm

    Arik,

    I have some MLT-BT05 modules. They say “JDY-09” on the back. They connect and transfer data correctly, but I cannot get them to disconnect. The AT+DISC command gets passed through like any other text.

    I thought I’d be able to force them to disconnect by setting the EN pin low, but that has no effect.

    If I set the reset pad(pad 11) low, the modules disconnect. The LED on the slaves resumes flashing slowly, while the LED on the master resumes flashing but at a faster rate.

    Is there at AT command that will cause the modules to disconnect?
    Is is okay for me to set the reset pad low?
    Is there something else I could try? I’m not eager to do any soldering on these modules.

    thanks.

    • Reply Arik Yavilevich Feb 19,2018 8:38 pm

      Hi DAC,

      Unfortunately once these modules are connected they are in data mode and you can’t send commands. This is because there is only one channel and the code doesn’t know to differentiate between commands and data. The original HM-10 firmware has a “system work mode” parameter which can be set to allow the remote side to issue AT commands while connected. Not sure if that is what you want to allow.
      Normally the EN pin should allow to reset. Check where it is pulled by default on your module and try the other way. It might be that is is not connected at all. I have seen unconnected STATE pins, so I wouldn’t be surprised if that is that case.
      It is ok to reset the chip. An additional option that doesn’t require soldering would be to toggle VCC with a transistor (probably a MOSFET).

  30. Reply kCyborg Mar 16,2018 11:06 pm

    Hello, first tell you that this blog goes to my favorites, you write clear and concise direct. Just what I needed. And now, let me get the head out of your ass;)
    Well, buy (Link to AliExpress product) the clone of the clone you are talking about in this article.

    After several hours I tried to find out how it works, here are my results:
    -I work with an Arduino Mega 2560, and it has only worked connected the module (both VCC and TX and RX) to 5V. If I connect it to 3.3V it does not work for me from the ArduinoMega. BUT with a FTDI-to-USB converter it works at 3.3V!!!
    -After 3 hours of the above, I was able to establish the serial communication between the MLT (clone clone) and to my surprise when I enter the command “AT + VERSION” the answer is: “MLT-BT05-V4.2”, one version more!!!
    -When I scan with the Bluetooth of my smartphone (Samsung J1 v2016) I can see a device called “MLT“, I try to connect, I can not!! For the serial port of the IDE Arduino verify which is the pin, it turns out that the factory has “123456”, it is changed to “000000”. Well, I connect my phone with the module, or I can “link” it to the module, but I can not do anything else. At this point the led of the module should stop blinking, right? Well, it does not!!!!
    -I try to make the connection in reverse:
    * I put the module in “Master” mode: “AT + ROLE1”
    * Then I try to scan “AT + INQ1”
    * Only respond with error

    It only remains for me to download the “nRF Connect” application … but I’m in Cuba and the internet connection is very slow … tomorrow I’ll do it!

    Any suggestion?!?!?!
    Plaese!!!

    • Reply Arik Yavilevich Mar 17,2018 8:46 am

      Hi kCyborg, thanks for your feedback. Glad you liked the article.

      It is interesting that yet another version of the MLT firmware (4.2) was released. It seems that it is under active development, which is great. I will order some to try it out. I only hope that the module is soldered properly. I start to get frustrated with the need to solder-fix the STATE pin of these devices.

      I am not sure why you had trouble connecting the device to the Mega using 3.3V IO. Why don’t you post a schematic of your circuit to verify that it is wired correctly?

      What you do in the Bluetooth Settings page of your phone is called Pairing. In general, there is no need to pair a BLE module to a phone. That is only needed if you want to have a secure connection or if you have a new Android OS (7.0, sometimes 6.0). What you must have is a BLE app, either something you wrote, some ready made terminal app or a generic tool such as the nRF Connect. So definitely install the nRF app and use it to communicate with the module. Try with and without pairing.

  31. Reply kCyborg Mar 17,2018 1:46 pm

    Thanks for the quick reply!!! I answer your questions:
    1- I did not find any welding defect, it is worth clarifying that I do not use the STATE pin for anything. In fact, one of the things that I liked about this module is that it comes with a kind of protective plastic, such as waterproof LED strips (although I doubt that it is with that objective).

    2- I am new to this internet (I remind you that I live in Cuba), so I do not have an account in any cloud (like I see other people posting in this same article), but I have email (and also an account in Facebook !!! 😉 ), they are the ways I know to share information. Let me know some of them to send you the schematics and photos of the model. Here you have my email: kcyborg2.1992@gmail.com

    3- My intention with the module: an application from my smartphone send via “serial” the combination of 3 colors (red, green and blue) in hexadecimal (or even in decimal!), so that the ArduinoMega receives them and lights a strip of LEDs depending on the color that has been selected in the application. I know that it is advisable to use the HC-05 module, but I do not have one of those right now. The download of the application (which is only 5MB) fell, so is the internet in my country 🙁

    Again…thanks!!! I’ll let you know what about the nRFConnect apk!

    • Reply kCyborg Mar 17,2018 2:54 pm

      HI!
      I already managed to download the application and connect (I know I’m connected because the module’s builtin LED stopped blinking and now it stays ON as long as the connection with the phone exists).
      Now … the question comes: I want to establish a serial communication between the phone and the ArduinoMega through the module. How do I do it!? Any advice, link or guide already made?

      Thanks!!!

    • Reply Arik Yavilevich Mar 17,2018 5:48 pm

      Hey kCyborg,

      Great to see you are managing well. Seems you have a gmail address, so you probably have a google account. Try the Google Drive service. Upload some pictures there, make them public and share the link in the comments.
      Once you can send and receive bytes with nRF you can switch to another app or write your own (depending on your abilities). With nRF just use the send/notification functions on the service/characteristic once you are connected. I am sorry but I can’t recommend a specific guide. There should be lots of info, just search for it.
      Also, check this similar project: https://www.instructables.com/id/Control-RGB-lights-from-Android-with-Arduino-Bluet/

      • Reply kCyborg Mar 19,2018 2:29 pm

        Apparently I have about 15Gb free in the Google cloud !!! And I did not know it !!!! Thank you!!!
        Well here I leave the link of the photos, as well as the arduino sketch I’m using.
        Now I’m going to read the guide that you leave me (I already read the introduction and it’s pretty good, THANK YOU!)

        Let me know if you need any more pictures. Thank you for writing these great articles! And thanks for the help!

        • Reply Arik Yavilevich Mar 20,2018 6:17 am

          Hey kCyborg,

          Saw the photos. The info I am looking for is the schematic that you used to connect the module with 3.3V data and it resulted it not working. I see you are using 5V for data now. This is above the official voltage of the chip, so you are risking causing damage to it.

  32. Reply ARIKE Mar 19,2018 6:25 am

    HI SIR
    I use Ble of MLT BT05 V4.0 version so i set as ble as Ibeacon mode but
    there is a issue in AT + INQ1 command
    I foowed this step

    AT+RENEW
    OK
    AT+RESET
    OK
    AT+ROLE1
    OK
    ROLE 1
    AT+MARJ0x1234
    NO RESPONCE
    AT+MINOxFFE0
    NO RESPONCE
    AT+INQ
    OK
    AT+INQ1
    ERR

  33. Reply kCyborg Mar 20,2018 3:15 pm

    Yes, I know I should not connect to the 5V directly, but with 3.3V it does not work, it does not even take out the garbage that I get when I connect something in the serial port and I select the baudrate wrong.
    I leave the link to the scheme that I use and it did not work.

    I found an application called HMBLE Terminal, great! This app let you stablish a serial communication between your HM-XX module (and of course, with the cole of the clone)! The app is HMBLETerminal…apparently I can’t give you the link in here…

    Thanks for everything 😉

    • Reply Arik Yavilevich Mar 20,2018 9:35 pm

      Hi kCyborg,

      Change Vcc pin to connect it to the 5V on the Arduino. Leave other connections as-is.

      Thanks for the app recommendation.

      • Reply kCyborg Mar 21,2018 6:30 pm

        Very thank to you, again: your posts rocks (I’m reading the one about the regulators)…now i’m trying to make an app with MITAppInventor 🙂

        Thanks!!!

  34. Pingback: Should you throw away your CC41 HM-10 clones now that Android 8 is here? | Arik Yavilevich's blog

  35. Reply Mahmoud May 10,2018 2:27 pm

    Hu, I was wondering if you know how can the ,mlt-BT05 or cc2541 work on andriod oreo 8 , 8.1

  36. Reply Seamus Sheehy Jun 4,2018 11:43 pm

    Hi, I was wondering if there is any bluetooth module that can take an analogue signal of between 1mv and 1500mv and send it to a smartphone app for display. I am hoping to cut out as much hardware as possible. Thanks

    • Reply Arik Yavilevich Jun 5,2018 7:27 am

      Hi Seamus,

      The CC2541 has an ADC IC inside, so at the hardware level all HM-10 modules can do it. It terms of having this as an off-the-shelf functionality I believe only the original HM-10 firmware can do this.
      See the datasheet and specifically “AT+ADC” command and the “System Work Mode” section.
      Also, there may be plenty of other (not HM-10) BLE SoC and modules with ADC requiring various level of programming to perform the functionality your are looking for.

  37. Reply Seamus Sheehy Jun 5,2018 9:59 pm

    Hi Arik,
    Thank you for your time.

    Seamus

  38. Reply Martin Ždila Jun 6,2018 6:44 pm

    Hi Arik

    Just for the info, I’ve bought https://www.ebay.com/itm/HM-10-CC2541-CC2540-4-0Bluetooth-UART-Transceiver-Transparent-Serial-Port-NEW/381374587590?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2057872.m2749.l2649


    AT+HELP
    ********************************************************************
    * Command Description *
    * ---------------------------------------------------------------- *
    * AT Check if the command terminal work normally *
    * AT+RESET Software reboot *
    * AT+VERSION Get firmware, bluetooth, HCI and LMP version *
    * AT+HELP List all the commands *
    * AT+NAME Get/Set local device name *
    * AT+PIN Get/Set pin code for pairing *
    * AT+PASS Get/Set pin code for pairing *
    * AT+BAUD Get/Set baud rate *
    * AT+LADDR Get local bluetooth address *
    * AT+ADDR Get local bluetooth address *
    * AT+DEFAULT Restore factory default *
    * AT+RENEW Restore factory default *
    * AT+STATE Get current state *
    * AT+PWRM Get/Set power on mode(low power) *
    * AT+POWE Get/Set RF transmit power *
    * AT+SLEEP Sleep mode *
    * AT+ROLE Get/Set current role. *
    * AT+PARI Get/Set UART parity bit. *
    * AT+STOP Get/Set UART stop bit. *
    * AT+START System start working. *
    * AT+IMME System wait for command when power on. *
    * AT+IBEA Switch iBeacon mode. *
    * AT+IBE0 Set iBeacon UUID 0. *
    * AT+IBE1 Set iBeacon UUID 1. *
    * AT+IBE2 Set iBeacon UUID 2. *
    * AT+IBE3 Set iBeacon UUID 3. *
    * AT+MARJ Set iBeacon MARJ . *
    * AT+MINO Set iBeacon MINO . *
    * AT+MEA Set iBeacon MEA . *
    * AT+NOTI Notify connection event . *
    * AT+UUID Get/Set system SERVER_UUID . *
    * AT+CHAR Get/Set system CHAR_UUID . *
    * -----------------------------------------------------------------*
    * Note: (M) = The command support slave mode only. *
    * For more information, please visit http://www.cyobd.com *
    * Copyright@2013 www.cyobd.com. All rights reserved. *
    ********************************************************************

    AT+VERSION
    +VERSION=Firmware V4.2.0,Bluetooth V4.0 LE

    AT+NAME
    +NAME=BT05

    Module requires CR+LF and AT can be lowercase. Default baudrate is 9600.

    It looks like http://www.cyobd.com/product/showproduct.php?lang=cn&id=62 but without that big upper right component.

  39. Reply Anandu Narayanan Jun 17,2018 10:40 am

    Hey, I bought Hm-10 for implementation of a bluetooth mesh and got MLT-BT05.. I cant use this in beacon mode as AT+IBEA and AT+IBE0 commands.. what should i do?.. will flashing the firmware work?.. or is there an alternative to implement one to many connection.
    Thanks in advance

    • Reply Arik Yavilevich Jun 17,2018 12:15 pm

      Hi Anandu,

      Bluetooth mesh and Bluetooth beacon are different things. You might manage to run a beacon by flashing a better firmware to your board. The official HM-10 firmware was reported as good for use for beacons.
      However none of these modules are designed for a Bluetooth mesh (https://en.wikipedia.org/wiki/Bluetooth_mesh_networking). They are single connection serial line replacements.
      Not sure what you mean by “one to many” connections. Which side is one and which is many? It is definitely possible in some fashion. For example, you could have a single smartphone connected at once to several HM-10/MLT modules.

  40. Reply Anandu Narayanan Jun 18,2018 4:10 am

    Thanks sir for your fast reply. I am planning to implement flooding sceme so need to establish multiple connections at the same time, thats why i asked about beacon mode. It would be a great help if you could specify the exact version that is to be downloaded.

  41. Reply Aswin Unnikrishnan Jun 18,2018 9:13 am

    Sir, I too had the same problem in choosing a firmware version for ibeacon mode, there are lots of options like V603,V601, V550, V559 etc. Which one to select for

    +VERSION=Firmware V3.0.6,Bluetooth V4.0 LE

    Also, AT+SBLUP command is not working for firmware update.

  42. Reply D Aug 14,2018 4:27 pm

    In case you are chasing your tail like I did, the baud rate table is different from one firmware to the other.

    As a reference:

    MLT-BT05
    AT+BAUD0 = 115200
    AT+BAUD1 = 57600
    AT+BAUD2 = 38400
    AT+BAUD3 = 19200
    AT+BAUD4 = 9600

    Default is supposed to be 9600, but the datasheet claims default option is 0, which should be 115200.

    Genuine HM-10
    AT+BAUD0 = 9600
    AT+BAUD1 = 19200
    AT+BAUD2 = 38400
    AT+BAUD3 = 57600
    AT+BAUD4 = 115200
    AT+BAUD5 = 4800
    AT+BAUD6 = 2400
    AT+BAUD7 = 1200
    AT+BAUD8 = 230400
    Default: 0

    BLE-CC41-A
    AT+BAUD1 = 1200
    AT+BAUD2 = 2400
    AT+BAUD3 = 4800
    AT+BAUD4 = 9600
    AT+BAUD5 = 19200
    AT+BAUD6 = 38400
    AT+BAUD7 = 57600
    AT+BAUD8 = 115200
    AT+BAUD9 = 230400
    Default: 4

  43. Reply Boomer48 Nov 5,2018 5:24 pm

    I’ve done a number of projects with the older HC-05/HC-06 modules but I’m new to BLE. Got one of the CC41 clones and would eventually like to use it to communicate with things like iTags using a PIC microcontrollers. Using AT commands I’ve been able to connect with an iTag but haven’t figured out the command protocol for triggering something like the alert. Not sure if I just need to send the proper 16-byte UUID along with the desired alert code (0x02). I did try the iTag button press while connected but saw no data broadcast. I know the proper UUID data strings from using the nRF app on my phone but I suspect that the iTag wants packed hex instead of ASCII strings. Any thoughts?

    • Reply Arik Yavilevich Nov 5,2018 6:57 pm

      Hi Boomer,

      Not familiar with an iTag. Is is a client device or a server device? What commands did you use to connect to it?
      What service/characteristic ids does it expose?

      Unfortunately I am not optimistic about using HM-10 (or clones) with other generic BLE devices. The HM-10 is a serial line replacement over BLE module. It does tx/rx over a specific (changeable) uuid. It can’t talk other protocols and you don’t have the low level control you have with regular BLE chip/stack. The HM-10 are good to talk to your own software on a PC/mobile device or to another HM-10 module (forming a serial line).

      In case this approach doesn’t work out for you, I suggest you try the ESP32 module. You don’t need a PIC, most BLE chips/modules already have quite strong processors/controllers.

      • Reply Boomer48 Nov 5,2018 8:41 pm

        The iTAG is a server device that is typically used for things like keeping track of your keys. I set the CC41 as master and used the AT+CONN command to connect to the iTAG. The two services of note for the iTAG are Immediate Alert (turns on/off a beeper) and Button Push. I know the UUIDs for these. The Immediate Alert is a command sent to the iTAG and the Button Push is a notification from the iTAG. The PIC has a serial port built in so I’m assuming that I should be able to send commands to the iTAG (via the CC41) and receive notifications from the iTAG. In any case, I’m not looking for information specifically for the iTAG, I just want to know how to use the CC41 to communicate with services/characteristics of some other BLE device without the need for a phone app.

        • Reply Arik Yavilevich Nov 6,2018 11:09 am

          If you can use the AT+CONN command this probably means you have a “MLT-BT05” module (rather than a CC41).

          Try using AT+UUID/CHAR to set the UUID parameters that iTAG would expect, then connect and send the bytes. It is not clear to me from the specification whether that would set the server UUID or also the UUID the client will try to work with in a remote server.

          These modules can only talk to one characteristic at a time, so you would not be able to both do alert and get the button.

  44. Reply Boomer48 Nov 6,2018 3:30 pm

    The module is a CC41 but the manufacturer shows up as “cyobd” instead of “bolutek” (like in Martin’s June 2018 post). The AT+CONN command shows up when the module is put into master mode. You may want to do that to your CC41 and post the AT+HELP results in your blog. I will try sending UUID information from my computer terminal program so I can see any responses. I will report back with any results.

    • Reply Arik Yavilevich Nov 7,2018 6:35 am

      Hi Boomer,

      Thanks for the tip about the different AT+HELP printouts! Didn’t know it changes depending on master/slave mode. Will test next time I am working with the modules.

  45. Reply John Mills Nov 23,2018 1:35 pm

    Great post!

    I am new to both Bluetooth and Arduino. I bought some of these – https://www.aliexpress.com/item/AT-09-Android-IOS-BLE-4-0-Bluetooth-module-for-arduino-CC2540-CC2541-Serial-Wireless-Module/32822551059.html to start learning with.

    It appears to be another clone with some very buggy firmware. By default its name is BT05 and sending AT+VERSION\r\n returns +VERSION=v5.3.

    I have hooked it up to Arduino and PC. iPhone with LightBlue or Windows BLE app will see the device and read & write the characteristic. The written characteristic is received via serial to the Arduino or PC.

    However, from PC or Arduino, once connected, writing to serial will not update the characteristic’s value, effectively making communication only possible in one direction – from external device to the BLE device, but not from the BLE device to an external device.

    • Reply Arik Yavilevich Nov 23,2018 5:26 pm

      Hi John,

      I believe when you write characters to the serial of the module the data is sent as a notification of the characteristic. It is not sent as the characteristic value. You need to “subscribe” to the characteristic on the iPhone or other BLE client. Then you should get the values.

      Other than that it can also be how you connect the module to Arduino. Whether you level shift from 5V of the Arduino to 3.3V of the module, etc.

  46. Reply John Mills Nov 24,2018 3:09 am

    Hi Arik

    I’ve tried subscribing/listening using LightBlue but it never gets notified of a changed value. I also added a voltage divider between the Arduino TX and the BLE RX but that didn’t make any difference unfortunately.

    AT commands work on it (some of them), but as soon as it is connected to a central, writing to Serial seems to do nothing.

    • Reply Arik Yavilevich Nov 25,2018 6:25 am

      Hi John,

      The fact that you can send bidirectional AT commands is a strong indicator that you have the module connected correctly.

      What you have described should work.

      I suggest you try an Android device with “nRF Connect” as central. A second option would be to connect two modules between themselves. A third option would be to try a different module. Perhaps what you have is defective.

  47. Reply John Mills Nov 29,2018 1:57 pm

    Thanks for your suggestions Arik. It helped a lot! I tried them and found that I was able to communicate in both directions using two of the same AT-09 BLE module – one connected to an Arduino and the other connected to a Windows PC. I was also able to communicate bidirectionally using the BLE module and an Android phone (Samsung J5) with nRF Connect.

    I also tried the AT-09 module with the built-in Bluetooth on a Raspberry Pi 3 B+ and a CSR USB bluetooth adapter connected to Windows which like the iPhone, only worked in one direction – central -> peripheral.

    Anyway, thanks again for your help. I’m pretty happy that I now have something working, even if it isn’t with all devices.

    • Reply Arik Yavilevich Nov 29,2018 2:11 pm

      John, happy to hear that.

      Looks like some issue with subscribing to notifications. Can’t explain but maybe if you rummage in the settings of the iPhone app or of the Raspberry client app you will find a way to enable that.

Leave a Reply

  

  

  

This site uses Akismet to reduce spam. Learn how your comment data is processed.