Bluetooth Low Energy (BLE) beacon with nRF24L01(+). Data is received and displayed by Android device (Android app source code is attached).

Dependencies:   DS1820 mbed

nRF24L01 as Bluetooth Low Energy (BLE) Broadcaster/Beacon

Temperature measured by a DS1820 sensor is broadcasted by a nRF24L01(+) module as Bluetooth Low Energy signal. Data is then received and displayed on an Android device (smartphone/tablet) with Bluetooth Low Energy (Bluetooth Smart) enabled. In order to have Bluetooth LE available your device should run Android 4.3 or more recent.

Needed parts:

Zoom in /media/uploads/hudakz/img_20150314_115402.jpg
Figure 1: The hookup and the Android app in action

It was Dmitry Grinberg who figured out how to use nRF24L01 for BLE.
Read his amazing "Bit-banging" Bluetooth Low Energy. Thank you Dmitry!
I ported the code to mbed from Lijun's repository. Read his very neat article on the topic. Thank you Lijun!


It takes just few steps to build a Temperature Beacon

  1. Connect the nRF24L01(+) module and the DS1820 sensor to the mbed board according to the pin assignment defined in main.cpp. Don't forget to connect a 4.7k Ohm resistor between the DS1820's data pin and the +3.3V pin.

    /media/uploads/hudakz/nrf24l01.png
    Figure 2: nRF24L01(+) pinout

  2. Compile the project and save the binary file to your mbed module.
  3. Enable Bluetooth on the Android device.
  4. To view the raw data, install Nordic's nRF Master Control Panel (available at Google Play for free) to your Android device. Run the app and wait until a new nRF24L01 device is found. Do not tap the CONNECT button. This device is a broadcaster and enables only one way data flow (from the mbed to the Android). To see more details, tap the found nRF24L01 device on the left side of the screen and then the small RAW button which appears on the right side just below the CONNECT button. Now you should be able to see and check the raw bytes received from the mbed.
  5. Install the Android app:
    - Download the TemperatureBeacon app to your computer's folder of choice.
    - Open the folder and copy (send via Bluetooth or USB cable) the downloaded file to your Android device.
    - To install the app, open the folder on the Android with the file downloaded in the previous step and tap it.
  6. Once the app is installed and running:
    - After a while you should see the temperature displayed on Android (See in Figure 1).
    - Data is periodically updated. To verify that, touch the DS1820 sensor and you should see some new values.

If you'd like to adapt the Android app to your taste

  • Install Android Studio onto your computer (Window, Mac, Linux). It's a fantastic IDE from Google for free.
  • Download the Android app project to your computer's folder of choice and unzip.
  • Start Android Studio, open the project downloaded in the previous step and have fun.

I have learnt a lot about Android and Bluetooth Low Energy here:
https://developer.android.com/guide/topics/connectivity/bluetooth-le.html,
https://thenewcircle.com/s/post/1553/bluetooth_smart_le_android_tutorial

The Android app is based on:
https://github.com/devunwired/accessory-samples/tree/master/BluetoothGatt.
Thank you Dave!

Revision:
1:ef3cc9be1f60
Parent:
0:6f3139e3410e
Child:
2:4f285d1d5c1f
--- a/main.cpp	Sat Mar 14 07:34:03 2015 +0000
+++ b/main.cpp	Sat Mar 14 13:12:40 2015 +0000
@@ -4,51 +4,10 @@
 
 Note: It works also with the older nRF24L01 modules (without the +).
 
-In this example we broadcast temperature readings measured by a DS1820 chip.
+In this project we broadcast temperature readings measured by a DS1820 chip.
 (You can easily modify the code to broadcast some other custom data.
  Only make sure not to exceed the 32 bytes packet length.)
- 
-The data can be received and displayed on an Android device (smartphone/tablet)
-with Bluetooth Low Energy (Bluetooth Smart) enabled. 
-In order to have Bluetooth 4.0 available (which implements Bluetooth LE)
-your device should run Android 4.3 or later.
 
-I ported this code to mbed from Lijun's repository <https://github.com/lijunxyz/nRF24_BLE>
-Read his very neat article on the topic <http://wiki.lijun.xyz/misc-nrf24-ble.html>
-and notice the nRF24L01(+) module pinout.
-Thank you Lijun.
-
-However, it all began with Dmitry Ginsberg's amazing "Bit-banging" Bluetooth Low Energy
-<http://dmitry.gr/index.php?r=05.Projects&proj=11.%20Bluetooth%20LE%20fakery>
-Thank you Dmitry.
-
-After programming the mbed, enable Bluetooth on the Android device (smartphone/tablet). 
-To view the custom data, install "nRF Master Control Panel" from Nordic (available at Google Play Store).
-Run the app and wait until a new device "nRF24L01" is found. Do not tap the "CONNECT" button. 
-This device is an advertiser and enables only one way data flow (from the mbed to the Android).
-To see more details, tap the found device "nRF24L01" on the left side of the screen
-and then the small "RAW" button which appears on the right side just below the "CONNECT" button. 
-Then you should be able to see and check the raw bytes received from the mbed.
-That's nice. But if you would like to have more fun and see the temperature readings
-then download "Temperature Beacon" from Google Play Store or to have even bigger fun you better build your own Android app.
-It's easy (as everithing, once you know how :)
-    - Install "Android Studio" onto your PC/Mac (it's a fantastic IDE from Google for free)
-    - Download the app project from "..." to your PC/Mac folder of choice
-    - Start "Android Studio" and open the project downloaded in the previous step
-    - Connect your Android device to the PC/Mac via USB (make sure that the USB driver is installed on your PC/Mac
-      and "USB debugging" is enabled in "Developer Options" on your Android device)
-    - Run the project in "Android Studio". When you are asked, choose your Android device (phone/tablet) from the list as running device
-    - Once the app is installed and running, after a few seconds you should see on your Android the temperature readings 
-    - The data is periodically updated to have the illusion of a connected device
-    - To verify that, touch the DS1820 sensor with your finger and you should see some new readings...
-    
-I have learnt a lot from:
-<https://developer.android.com/guide/topics/connectivity/bluetooth-le.html>
-<https://thenewcircle.com/s/post/1553/bluetooth_smart_le_android_tutorial>
-and borrowed the code for Android from here:
-<https://github.com/devunwired/accessory-samples/tree/master/BluetoothGatt>
-Thank you Dave.
- 
  */
 
 
@@ -72,6 +31,21 @@
 DigitalOut  cs(p8);                 // CSN  (select SPI chip/slave)
 DigitalOut  ce(p14);                // CE   (enable nRF24L01+ chip)
 DS1820      ds1820(p15);
+#elif defined(TARGET_FRDM_KL25Z)
+SPI         spi(PTD2, PTD3, PTD1);  // MOSI, MISO, SCK
+DigitalOut  cs(PTD0);               // CSN  (select SPI chip/slave)
+DigitalOut  ce(PTD5);               // CE   (enable nRF24L01+ chip)
+DS1820      ds1820(PTA13);
+#elif defined(TARGET_FRDM_KL46Z)
+SPI         spi(PTD2, PTD3, PTD1);  // MOSI, MISO, SCK
+DigitalOut  cs(PTD0);               // CSN  (select SPI chip/slave)
+DigitalOut  ce(PTD5);               // CE   (enable nRF24L01+ chip)
+DS1820      ds1820(PTA13);
+#elif defined(TARGET_LPC11U24)
+SPI         spi(P16, P15, P13);     // MOSI, MISO, SCK
+DigitalOut  cs(P17);                // CSN  (select SPI chip/slave)
+DigitalOut  ce(P18);                // CE   (enable nRF24L01+ chip)
+DS1820      ds1820(P10);
 #elif defined(TARGET_NUCLEO_F103RB)
 SPI         spi(PB_5, PB_4, PB_3);  // MOSI, MISO, SCK
 DigitalOut  cs(PB_10);              // CSN  (select SPI chip/slave)