How to make an iBeacon Detector with Arduino?

Hello everyone, as the title says i'm trying to make an iBeacon detector.

I was hoping to use the HM-10 bluetooth 4.0 modules from JNHuaMao, as i have experience with their HM-05 which are bluetooth 2.0. Also because those are the modules i'm going to use to make the iBeacons as it seems fairly easy to do so according to this tutorial .

But for what I found in the web it seems not possible to get the UUID, RSSI, Major and Minor from this iBeacons with another HM-10 as a central device connected to an Arduino. The command AT+DISC only gets the address and name of the device. Everything I found suggests using an Android or Apple app like iBeacon Finder.

I was wondering if anyone knows a way to get all this data from the iBeacons with a HM-10 module or if I should use another module as the central device. And if so which device do you recommend and if there is any tutorial on how to do it.

Thanks in advance for your time and patience, and I apologize for my english. Cheers, Leo

Setup Bluetooth on Arduino Yun (Broadcom Corp. BCM20702A0 Bluetooth 4.0 USB token, amazon cost ~10$)

Linux with ble-dongle-detect-ibeacons

Sample code:

Thanks for your reply, so for what you said I need to have a microcontroller capable of running Linux in order to get the data I need from the iBeacons.

I was looking for something that would work with an Arduino Micro as my project is space limited (also limited by budget).

I send an email to JNHuaMao support with this problem to see if they have any solution. Maybe a firmware update or any other hardware that could work with Arduino without having to use Linux.

If I get any reply I'll post it here.

Still open for any other suggestion.

Plan B:

iBeacon Detector= iBeacon in Central roles

CC2564 is much more than a transceiver, it includes the BT MAC (which is much more complicated than the BLE). The limitation is not on the RF domain but on the SW/HW MAC portion.

MasterSlaveSwitch /Central/Peripheral roles Switch

HM-10-CC2540-4-0-BLE-Bluetooth support Central/Peripheral roles Switch

AT Commanders (new version V542)

AT                         (Test command)
AT+BAUD           (Query/Set Baud rate)
AT+CHK             (Query/Set parity)
AT+STOP            (Query/Set stop bit)
AT+UART            (Query/Set uart rate,parity, stop bit)
AT+PIO                (Query/Set PIO pins status Long command)
AT+PIO                (Query/Set a PIO pin sttus Short command)
AT+NAME           (Query/Set device friendly name)
AT+PIN                (Query/Set device password code)
AT+DEFAULT     (Reset device settings)
AT+RESTART     (Restart device)
AT+ROLE            (Query/Set device mode, Master or Slave)
AT+CLEAR          (Clear remote device address if has)
AT+CONLAST    (Try to connect last connect succeed device)
AT+VERSION     (Show software version information)
AT+HELP             (Show help information)
AT+RADD           (Query remote device address)
AT+LADD            (Query self address)
AT+IMME            (Query/Set Whether the device boot immediately)
AT+WORK          (if device not working, start work, use with AT+IMME command)
AT+TCON           (Query/Set Try to connect remote times)
AT+TYPE             (Query/Set device work type,  transceiver mode or remote mode)
AT+START          (Switch remote control mode to transceiver mode)
AT+BUFF            (Query/Set How to use buffer data, Duing mode switching time)
AT+FILT              (Query/Set device filter when device searching)
AT+COD              (Query/Set Class of Device. eg: phone, headset etc.)

My person favor is Linux way since I could easily integration by web server and database (mysql, sqlite) as well php or python with blustooth stack. I have a Central/Peripheral roles Switch HM-10 module but never bother to set it up.

Thanks for your interest in my problem sonnyyu!!!

The HM-10 has the cc2540 chip that allows it to switch between central (master) and peripheral (slave) role with the command AT+ROLE. And it does everything a master device does, scans for slave devices, connects and everything as a normal bluetooth would. But my problem is trying to get (as master/central device) the UUID, RSSI, Major and Minor from iBeacons with a BLE device that connects directly to an Arduino UNO or Micro (if possible). As I said before the only scan the HM-10 has documentation is AT+DISC, which gives you the BT address and name of the bluetooth devices around, according to this

I'm still waiting for the response from JNHuaMao support, I don't think they will respond.

I am going to keep looking, any information will be appreciated!!!

Hello, so I finally got a response from JNHuaMao!!!!

They said that they will be releasing a new firmware version this month that will give the HM-10 the capability to be use as an iBeacon finder/detector.

It will be Firmware Version V536.

So I'll just wait and try it out when it is release.

Thanks a lot to share good news with us.

I would like to achieve the same goal. Has anyone got "Firmware Version V536"? If yes, where can we get it? I can't find it on the official site (download area). Thanks for helping me :)

don't hold your breath to it, it seems they have released a new firmware on Feb17 but no ibeacon detection functionality as promised.

hello world, we couldn't wait for JNHuaMao to produce the promised iBeacon scanning firmware so we went and wrote our own , and ran our code on their chip, result is a success. Our code talks via UART and sends back a 3 tuple : (BLE mac address, advertisement payload, signal strength)

please see screenshot :

feel free to contact us about this:

Great Job!!!!! apoapoapoapo!!

Please tell us how did you that!!!!!

why not work AT+RSSI?

new firmware

HM-10/11 CC2540/1 V539

  1. Add AT+DISI? command, use to scan iBeacon device;

Does anyone know how to update the firmware on these module ?

ie is it possible without some expensive hardware from Ti ? (CC Debugger) ?

Or will these new functions only be available on modules purchased with the new revised firmware on them?




I'll have to check if my HM10 module supports that command, as its just one I bought from eBay I'm not sure what firmware it has installed on it.

However I guess if it doesnt have the required original firmware the only way is via a dedicated programmer unit :-(


There appear to be some people who are uploading using SPI from an Arduino, but its not clear quite what needs to be done

Does anyone have any information on this ?

alexjdie: new firmware

HM-10/11 CC2540/1 V539

  1. Add AT+DISI? command, use to scan iBeacon device;

I have uploaded their newest v539 firmware onto two (2 !) HM-10 modules. The software has some bugs both of my modules do not emit ibeacon nor can they detect nearby ibeacons. I have already made sure i am using the right BLE role (AT+ROLE ? peri for ibeacon, central for scanning ) and AT+IMME1 .

Are you guys using generic HM10 boards from eBay, or do I need a special HM10 with this firmware from a specific supplier ?


Is everyone using these ??

Just thought I'd update the forum on my progress with this

I have successfully updated my BLE module from version 533 to version 539

Its this module from eBay

I've not run it as an iBeacon yet, but it does seem to be working fine as a normal BLE device, i.e my phone can see it


Before updating from V533, the BLE module was by default visible on my Android phone, however after the update, the device is no longer visible at all, and even setting the iBeacon on etc as documented here

Doesn't seem to work.

Perhaps there are additional settings required for the 539 firmware ?

Is anyone else using V539 ?