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.
Sorry for the offtopic but, what is the tool for generating graphical representation of the PCB pinouts, like the one in the beginning of this article?
I wanted to ask the same. It is neat.
Sparkfun wrote an article about their process some time ago: https://www.sparkfun.com/news/1947
And it looks like there’s a project based on it on hackaday.io: https://hackaday.io/project/162131-graphical-pinout-generator/
Not sure exactly which software they used for this one, but there are python scripts that will generate these from a csv file of the pinout. Here’s one that Adafruit uses: https://github.com/adafruit/PrettyPins
Is this hackaday retro with a flashback from 2013? Or are we in a time warp?
It’s cool and I hadn’t see anyone implement BLE on non-BLE chipset before. Well worth featuring IMO, even if it took a decade to get here :)
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!
I thought the same. Dejavu https://hackaday.com/2013/09/21/sending-data-over-bluetooth-low-energy-with-a-cheap-nrf24l01-module/
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!
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.
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.