electric baka
/
BLENano2_SimpleTemplate
for BLE Nano v2
Revision 0:5f632ba61cb5, committed 2017-09-24
- Comitter:
- electricbaka
- Date:
- Sun Sep 24 09:49:58 2017 +0000
- Commit message:
- for BLE Nano v2
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.gitignore Sun Sep 24 09:49:58 2017 +0000 @@ -0,0 +1,4 @@ +.build +.mbed +projectfiles +*.py*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.md Sun Sep 24 09:49:58 2017 +0000 @@ -0,0 +1,87 @@ +# Getting started with Blinky on mbed OS + +This guide reviews the steps required to get Blinky working on an mbed OS platform. + +Please install [mbed CLI](https://github.com/ARMmbed/mbed-cli#installing-mbed-cli). + +## Import the example application + +From the command-line, import the example: + +``` +mbed import mbed-os-example-blinky +cd mbed-os-example-blinky +``` + +### Now compile + +Invoke `mbed compile`, and specify the name of your platform and your favorite toolchain (`GCC_ARM`, `ARM`, `IAR`). For example, for the ARM Compiler 5: + +``` +mbed compile -m K64F -t ARM +``` + +Your PC may take a few minutes to compile your code. At the end, you see the following result: + +``` +[snip] ++----------------------------+-------+-------+------+ +| Module | .text | .data | .bss | ++----------------------------+-------+-------+------+ +| Misc | 13939 | 24 | 1372 | +| core/hal | 16993 | 96 | 296 | +| core/rtos | 7384 | 92 | 4204 | +| features/FEATURE_IPV4 | 80 | 0 | 176 | +| frameworks/greentea-client | 1830 | 60 | 44 | +| frameworks/utest | 2392 | 512 | 292 | +| Subtotals | 42618 | 784 | 6384 | ++----------------------------+-------+-------+------+ +Allocated Heap: unknown +Allocated Stack: unknown +Total Static RAM memory (data + bss): 7168 bytes +Total RAM memory (data + bss + heap + stack): 7168 bytes +Total Flash memory (text + data + misc): 43402 bytes +Image: .\.build\K64F\ARM\mbed-os-example-blinky.bin +``` + +### Program your board + +1. Connect your mbed device to the computer over USB. +1. Copy the binary file to the mbed device. +1. Press the reset button to start the program. + +The LED on your platform turns on and off. + +## Export the project to Keil MDK, and debug your application + +From the command-line, run the following command: + +``` +mbed export -m K64F -i uvision +``` + +To debug the application: + +1. Start uVision. +1. Import the uVision project generated earlier. +1. Compile your application, and generate an `.axf` file. +1. Make sure uVision is configured to debug over CMSIS-DAP (From the Project menu > Options for Target '...' > Debug tab > Use CMSIS-DAP Debugger). +1. Set breakpoints, and start a debug session. + +![Image of uVision](img/uvision.png) + +## Troubleshooting + +1. Make sure `mbed-cli` is working correctly and its version is `>1.0.0` + + ``` + mbed --version + ``` + + If not, you can update it: + + ``` + pip install mbed-cli --upgrade + ``` + +2. If using Keil MDK, make sure you have a license installed. [MDK-Lite](http://www.keil.com/arm/mdk.asp) has a 32 KB restriction on code size. \ No newline at end of file
Binary file img/uvision.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Sep 24 09:49:58 2017 +0000 @@ -0,0 +1,197 @@ +/* + +Copyright (c) 2012-2014 RedBearLab + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +/* + * The application works with the BlueJelly.js + * + * http://jellyware.jp/kurage/ + * https://github.com/electricbaka/bluejelly + * + */ + +//====================================================================== +//Grobal +//====================================================================== +//------------------------------------------------------------ +//Include Header Files +//------------------------------------------------------------ +#include "mbed.h" +#include "ble/BLE.h" + + +//------------------------------------------------------------ +//Definition +//------------------------------------------------------------ +#define TXRX_BUF_LEN 20 //max 20[byte] +#define DEVICE_LOCAL_NAME "BlueJelly" +#define ADVERTISING_INTERVAL 160 //160 * 0.625[ms] = 100[ms] +#define TICKER_TIME 200000 //200000[us] = 200[ms] +#define DIGITAL_OUT_PIN P0_29 +#define ANALOG_IN_PIN1 P0_5 +#define ANALOG_IN_PIN2 P0_4 + + +//------------------------------------------------------------ +//Object generation +//------------------------------------------------------------ +BLE ble; +DigitalOut LED_SET(DIGITAL_OUT_PIN); +AnalogIn ANALOG1(ANALOG_IN_PIN1); +AnalogIn ANALOG2(ANALOG_IN_PIN2); + + +//------------------------------------------------------------ +//Service & Characteristic Setting +//------------------------------------------------------------ +//Service UUID +static const uint8_t base_uuid[] = { 0x71, 0x3D, 0x00, 0x00, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E } ; + +//Characteristic UUID +static const uint8_t tx_uuid[] = { 0x71, 0x3D, 0x00, 0x03, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E } ; +static const uint8_t rx_uuid[] = { 0x71, 0x3D, 0x00, 0x02, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E } ; + +//Characteristic Value +uint8_t txPayload[TXRX_BUF_LEN] = {0,}; +uint8_t rxPayload[TXRX_BUF_LEN] = {0,}; + +//Characteristic Property Setting etc +GattCharacteristic txCharacteristic (tx_uuid, txPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); +GattCharacteristic rxCharacteristic (rx_uuid, rxPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY| GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); +GattCharacteristic *myChars[] = {&txCharacteristic, &rxCharacteristic}; + +//Service Setting +GattService myService(base_uuid, myChars, sizeof(myChars) / sizeof(GattCharacteristic *)); + + +//====================================================================== +//onDisconnection +//====================================================================== +void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) +{ + ble.startAdvertising(); +} + + +//====================================================================== +//onDataWritten +//====================================================================== +void WrittenHandler(const GattWriteCallbackParams *Handler) +{ + uint8_t buf[TXRX_BUF_LEN]; + uint16_t bytesRead; + + if (Handler->handle == txCharacteristic.getValueAttribute().getHandle()) + { + ble.readCharacteristicValue(txCharacteristic.getValueAttribute().getHandle(), buf, &bytesRead); + memset(txPayload, 0, TXRX_BUF_LEN); + memcpy(txPayload, buf, TXRX_BUF_LEN); + + if(buf[0] == 1) + LED_SET = 1; + else + LED_SET = 0; + } +} + + +//====================================================================== +//onTimeout +//====================================================================== +void m_status_check_handle(void) +{ + uint8_t buf[2]; + + //Read Analog port + float s1 = ANALOG1; + float s2 = ANALOG2; + uint16_t value = s1/s2 * 1024; + + buf[0] = (value >> 8); + buf[1] = value; + + //Send out + ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 2); +} + + +//====================================================================== +//convert reverse UUID +//====================================================================== +void reverseUUID(const uint8_t* src, uint8_t* dst) +{ + int i; + + for(i=0;i<16;i++) + dst[i] = src[15 - i]; +} + + +//====================================================================== +//main +//====================================================================== +int main(void) +{ + uint8_t base_uuid_rev[16]; + + //Timer Setting [us] + Ticker ticker; + ticker.attach_us(m_status_check_handle, TICKER_TIME); + + //BLE init + ble.init(); + + //EventListener + ble.onDisconnection(disconnectionCallback); + ble.onDataWritten(WrittenHandler); + + //------------------------------------------------------------ + //setup advertising + //------------------------------------------------------------ + //Classic BT not support + ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); + + //Connectable to Central + ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); + + //Local Name + ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, + (const uint8_t *)DEVICE_LOCAL_NAME, sizeof(DEVICE_LOCAL_NAME) - 1); + + //GAP AdvertisingData + reverseUUID(base_uuid, base_uuid_rev); + ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, + (uint8_t *)base_uuid_rev, sizeof(base_uuid)); + + //Advertising Interval + ble.setAdvertisingInterval(ADVERTISING_INTERVAL); + + //Add Service + ble.addService(myService); + + //Start Advertising + ble.startAdvertising(); + + //------------------------------------------------------------ + //Loop + //------------------------------------------------------------ + while(1) + { + ble.waitForEvent(); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-os.lib Sun Sep 24 09:49:58 2017 +0000 @@ -0,0 +1,1 @@ +https://github.com/ARMmbed/mbed-os/#ca661f9d28526ca8f874b05432493a489c9671ea