Faking Bluetooth LE With An NRF24L01+ Module

Despite the name, Bluetooth Low Energy (BLE) has very little to do with the original Bluetooth, other than its use of the same 2.4 GHz frequencies. This is where [Dmitry] got the idea to use a 2.4 GHz nRF24L01+ module to implement his very own BLE device, without the typical BLE chipset. This should be easy, since this popular IC supports GFSK modulation, 1 MHz channels and the 1 MBit data rate of BLE.

Despite of how simple BLE seems to implement, [Dmitry] quickly came across a range of issues due to limitations of the nRF24L01+. These include no support for a 24-bit CRC, a too sluggish PLL cycling for BLE’s frequency hopping, and as the coup de grâce, a lack for incoming data packets larger than 32 bytes — which destroyed any hope of accepting incoming connections.

Unperturbed, [Dmitry] set to work implementing what would work on this IC: broadcasting BLE packets. In the article he covers the entire code (in C) that allows the nRF24L01+ to send broadcast packets and any BLE-supporting device that’s listening to receive them. Admittedly not as useful as having a fully functional BLE stack, but good enough for broadcasting something like sensor data. It also raises the question of which alternative released in the intervening decade to the venerable nRF24L01+ might fill in the missing features, without making a dedicated BLE IC (or ESP32 variant) look more cost-effective.

It’s always a good day when a new project from [Dmitry] hits the tip line. We’ve previously covered his impressive efforts to add more RAM to the RP2040, and his business card that can boot Linux on an ATSAMD21.

11 thoughts on “Faking Bluetooth LE With An NRF24L01+ Module

    1. TBF, Dmitry has tarted up his website since then, which is probably why it triggered someone.

      It was an interesting experiment and worthy at the time as single-mode BLE chips were relatively rare or expensive. A decade later, it’s a different matter!

  1. Dmitry always has interesting project write-ups. Come for the BLE, stay for the other hacks…

    If HACKADAY had something like what he does every day, I’d never get any real work done!

  2. Maybe it’s just me, but nothing at all about BLE is simple. It’s a big dumpster fire of hoops to jump through just to get a single byte to transmit. It’s the poster child of design by committee. Documentation is pitiful. Libraries are incomplete and poorly documented on the features they have. Whatever documentation you do find will assume you already know everything about BLE.

    The only exception, though also not perfect, is NimBLE. It’s the only library worth using in my opinion. Their example programs include far more of the BLE functionality, but there are still lots of things that get glossed over and without reading the source, you’ll not get far.

    I used to think Bluetooth was great. Then I started programming it, and now I wish it would disappear from the earth.

  3. This was also implemented on “Silverware” (gd) stmf103 based H8 micro-quadcopters to send ble telemetry back from the quad to your smartphone blutooth.

    The uplink from the cheap RC to the quad is the nrf protocol, which features an acknowlege downlink packet from the quad that can be stuffed with data for battery voltage or whatever.

    I didn’t get the android app to compile in my environment.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

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