iBeacon working!

Yea and verily! I've successfully flashed a BLE112 with firmware that makes it behave as an iBeacon that can be used for iOS 7's Bluetooth LE location services.

By using a CC2540 USB Dongle and TI's SmartRF Packet Sniffer application and an iPhone running a sample app provided by Apple on the Development site, I reverse engineered the iBeacon protocol and made a firmware project for a BLE112 using a minimal GATT profile and a BGScript to set the custom advertising data required for a iBeacon.

I guess I'd better design a PCB for a minimal circuit containing a BLE112, a 3 V coin cell and a programming header.

The iBeacon in all its glory. And a bunch of unused wires.

The iBeacon in all its glory. And a bunch of unused wires.

8 comments on "iBeacon working!"
Enrique says:

Could you please share how the profile is configured?

Jens Willy Johannsen says:

I'm sorry, but iOS 7 is still under NDA so I can't post any details until Apple makes this information public.

[...] Ah yes, about that – since iOS 7 and iBeacons is still under NDA I will have to wait a bit before releasing the firmware for the BLE modules. Sorry. (I've described what I did here). [...]

Matteo says:

highly appreciate your work.
Are you going to release the specification as soon as tomorrow when the NDA will drop?

Do you think that it will be possible following your instructions to replicate your work and put in a production environment with large scale (hundreds) number, or the process of flashing is quite slow?

Best regards!

Rowdy Robot says:

Hi Jens,

We have also been working on BLE technology for awhile now (with a published iOS app) and have been looking at the iBeacon to further expand our offering. We utilize the BLE112-A but as you know it can really on be flashed with the CC-Debugger unless we add USB and the we can allow for a restrictive firmware update with DFU.

That said, have you put much thought on the major and minor numbers as far as allowing end users to modify the values? Right now we are able to hard code the values which are 'set in stone' (unless you have the debugger and knowledge how to flash a beacon). However, we are trying to allow for this in GATT so that it can be writable from the app to the beacon.

Just something to chew on.

Great work!

Jens Willy Johannsen says:

@Rowdy Robot: I made a small board (see here: with a DIP switch to configure the minor value. In my case I use 6-position switch so I can only configure the 6 out of 16 bits and I leave the major value hardcoded in firmware, but a couple of 8-position switches and something like a 4017 decade counter you could read all 16 bits of both major and minor value with a few GPIO pins.

Setting the values from the app using GATT and storing them in flash memory seems even better though :)


Now that the NDA is history and iOS7 is out - can you share a little more about how you can differential between iBeacons and generic BLE devices? I am working on a Beacon monitor it it would be great to be able to figure this out w/out to duplicate work...

eric says:

in Estimote beacon device,there have a accelerometer inside ,could you help to explain the ACC usage?thanks

Leave a Reply