How to turn a WaveShare nRF51-BLE400 into a discoverable beacon using mbed
Dependencies: mbed BLE_API nRF51822
Port for WaveShare BLE400 (chip nRF51 Aliexpress devboard)
Android Evothings good example for Nordic nRF51822-DK
As target for mbed-online used <Nordic nRF51822>
- (Large green board Nordic nRF51822-mKIT, actually deprecated on 01/03/2019)
Briefly: Handle via Evothings BLE Application 4 LEDs and 2 Buttons(via notify messages).
Figure 1: Evothings Android application screenshot
Android Evothings application sources
Happy coding!
maxxir 02/03/19
main.cpp@4:d602b1c3aef4, 2015-03-10 (annotated)
- Committer:
- mbedAustin
- Date:
- Tue Mar 10 20:32:37 2015 +0000
- Revision:
- 4:d602b1c3aef4
- Parent:
- 3:e9646631084f
- Child:
- 5:fff16d283dcf
made device connectable instead of non-connectable, this is to allow iOS devices to connect and display the advertising info, because no iOS app will just show the advertising data, they have to connect... grrr....
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbedAustin | 1:0692bee84264 | 1 | |
mbedAustin | 1:0692bee84264 | 2 | // Headers necessary for mbed and BLE device mode |
mbedAustin | 0:5375be4301ed | 3 | #include "mbed.h" |
mbedAustin | 0:5375be4301ed | 4 | #include "BLEDevice.h" |
mbedAustin | 0:5375be4301ed | 5 | |
mbedAustin | 1:0692bee84264 | 6 | // BLE object |
mbedAustin | 1:0692bee84264 | 7 | BLEDevice ble; |
mbedAustin | 0:5375be4301ed | 8 | |
mbedAustin | 1:0692bee84264 | 9 | /** |
mbedAustin | 1:0692bee84264 | 10 | You have up to 26 bytes of advertising data to use. |
mbedAustin | 1:0692bee84264 | 11 | Make up your own encoding for these 26bytes, send it across |
mbedAustin | 1:0692bee84264 | 12 | and decode it using the evothings app. |
mbedAustin | 1:0692bee84264 | 13 | */ |
mbedAustin | 4:d602b1c3aef4 | 14 | //const static uint8_t AdvData[] = {"ChangeThisData"}; // example of character data |
mbedAustin | 4:d602b1c3aef4 | 15 | const static uint8_t AdvData[] = {0x01,0x02,0x03,0x04,0x05}; // example of hex data |
mbedAustin | 1:0692bee84264 | 16 | |
mbedAustin | 1:0692bee84264 | 17 | // main program |
mbedAustin | 1:0692bee84264 | 18 | int main(void) |
mbedAustin | 0:5375be4301ed | 19 | { |
mbedAustin | 1:0692bee84264 | 20 | // Initialize BLE baselayer, always do this first! |
mbedAustin | 1:0692bee84264 | 21 | ble.init(); |
mbedAustin | 1:0692bee84264 | 22 | |
mbedAustin | 1:0692bee84264 | 23 | // Sacrifice 3B of 31B to Advertising Flags |
mbedAustin | 1:0692bee84264 | 24 | ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE ); |
mbedAustin | 4:d602b1c3aef4 | 25 | ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
mbedAustin | 1:0692bee84264 | 26 | |
mbedAustin | 1:0692bee84264 | 27 | // Sacrifice 2B of 31B to AdvType overhead, rest goes to AdvData array you define |
mbedAustin | 1:0692bee84264 | 28 | ble.accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, AdvData, sizeof(AdvData)); |
mbedAustin | 1:0692bee84264 | 29 | |
mbedAustin | 1:0692bee84264 | 30 | // Set advertising interval. Longer interval = longer battery life |
mbedAustin | 1:0692bee84264 | 31 | ble.setAdvertisingInterval(160); // 100ms; in multiples of 0.625ms. |
mbedAustin | 1:0692bee84264 | 32 | ble.startAdvertising(); |
mbedAustin | 1:0692bee84264 | 33 | |
mbedAustin | 1:0692bee84264 | 34 | // Infinite loop waiting for BLE events |
mbedAustin | 1:0692bee84264 | 35 | for (;;) { |
mbedAustin | 1:0692bee84264 | 36 | ble.waitForEvent(); // this saves battery |
mbedAustin | 1:0692bee84264 | 37 | } |
mbedAustin | 1:0692bee84264 | 38 | } |