Send VDD voltage data and chip temperature data via BLE UART Service. You can see the data on iPhone nRF Toolbox UART application.

Dependencies:   nRF51_Vdd

Fork of BLE_UARTConsole by Bluetooth Low Energy

Committer:
kenjiArai
Date:
Thu Aug 09 11:04:42 2018 +0000
Revision:
11:368bd6332d02
Parent:
10:38852d243fb2
run on as of latest mbed-os(5.9.4)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 0:2130d7f559dc 1 /* mbed Microcontroller Library
rgrover1 0:2130d7f559dc 2 * Copyright (c) 2006-2013 ARM Limited
rgrover1 0:2130d7f559dc 3 *
rgrover1 0:2130d7f559dc 4 * Licensed under the Apache License, Version 2.0 (the "License");
rgrover1 0:2130d7f559dc 5 * you may not use this file except in compliance with the License.
rgrover1 0:2130d7f559dc 6 * You may obtain a copy of the License at
rgrover1 0:2130d7f559dc 7 *
rgrover1 0:2130d7f559dc 8 * http://www.apache.org/licenses/LICENSE-2.0
rgrover1 0:2130d7f559dc 9 *
rgrover1 0:2130d7f559dc 10 * Unless required by applicable law or agreed to in writing, software
rgrover1 0:2130d7f559dc 11 * distributed under the License is distributed on an "AS IS" BASIS,
rgrover1 0:2130d7f559dc 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rgrover1 0:2130d7f559dc 13 * See the License for the specific language governing permissions and
rgrover1 0:2130d7f559dc 14 * limitations under the License.
rgrover1 0:2130d7f559dc 15 */
rgrover1 0:2130d7f559dc 16
kenjiArai 10:38852d243fb2 17 /*
kenjiArai 10:38852d243fb2 18 * January 6th, 2016 Modified by Kenji Arai
kenjiArai 11:368bd6332d02 19 * August 9th, 2018 TY51822r3 runs on mbed-os-5.9.4
kenjiArai 11:368bd6332d02 20 *
kenjiArai 10:38852d243fb2 21 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 10:38852d243fb2 22 * http://mbed.org/users/kenjiArai/
kenjiArai 11:368bd6332d02 23 * Original:
kenjiArai 11:368bd6332d02 24 * 1) BLE_UARTConsole
kenjiArai 11:368bd6332d02 25 * https://developer.mbed.org/teams/
kenjiArai 11:368bd6332d02 26 Bluetooth-Low-Energy/code/BLE_UARTConsole/
kenjiArai 11:368bd6332d02 27 * 2) BLE_HTM_by_InTempSensr_pub
kenjiArai 11:368bd6332d02 28 * https://developer.mbed.org/users/
kenjiArai 11:368bd6332d02 29 takafuminaka/code/BLE_HTM_by_InTempSensr_pub/
kenjiArai 11:368bd6332d02 30 * Tanks Takafumi Naka san!
kenjiArai 11:368bd6332d02 31 * Tested Controller Device:
kenjiArai 10:38852d243fb2 32 * iPhone6 UART application in nRF Toolbox
kenjiArai 10:38852d243fb2 33 * https://itunes.apple.com/jp/app/nrf-toolbox/id820906058?mt=8
kenjiArai 10:38852d243fb2 34 * Please check data on "Show log" screen
kenjiArai 10:38852d243fb2 35 */
kenjiArai 10:38852d243fb2 36
kenjiArai 11:368bd6332d02 37 // Include --------------------------------------------------------------------
rgrover1 5:2607923acfa1 38 #include <string.h>
rgrover1 0:2130d7f559dc 39 #include "mbed.h"
rgrover1 8:f9bf6d403cde 40 #include "BLE.h"
kenjiArai 10:38852d243fb2 41 #include "UARTService.h"
kenjiArai 10:38852d243fb2 42 #include "nrf_soc.h" // for internal Thermo sensoer
kenjiArai 10:38852d243fb2 43 #include "nRF51_Vdd.h" // Read nRF51 Vdd voltage
rgrover1 0:2130d7f559dc 44
kenjiArai 11:368bd6332d02 45 // Definition -----------------------------------------------------------------
rgrover1 0:2130d7f559dc 46
kenjiArai 11:368bd6332d02 47 // Object ---------------------------------------------------------------------
kenjiArai 11:368bd6332d02 48 BLE& ble_x = BLE::Instance();
kenjiArai 10:38852d243fb2 49 UARTService *uart;
kenjiArai 10:38852d243fb2 50 nRF51_Vdd vdd(3.6f, 2.6f);
kenjiArai 10:38852d243fb2 51
kenjiArai 11:368bd6332d02 52 // RAM ------------------------------------------------------------------------
kenjiArai 10:38852d243fb2 53 static volatile bool triggerSensorPolling = false;
rgrover1 0:2130d7f559dc 54
kenjiArai 11:368bd6332d02 55 // ROM / Constant data --------------------------------------------------------
kenjiArai 10:38852d243fb2 56 const char *deviceName = "mbedBLE";
kenjiArai 10:38852d243fb2 57
kenjiArai 11:368bd6332d02 58 // Function prototypes --------------------------------------------------------
kenjiArai 10:38852d243fb2 59 void Update_Values(void);
rgrover1 0:2130d7f559dc 60
kenjiArai 11:368bd6332d02 61 //------------------------------------------------------------------------------
kenjiArai 10:38852d243fb2 62 // Control Program
kenjiArai 11:368bd6332d02 63 //------------------------------------------------------------------------------
kenjiArai 10:38852d243fb2 64 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params){
kenjiArai 10:38852d243fb2 65 if (uart){
kenjiArai 10:38852d243fb2 66 uart->writeString("Disconnected!\r\n");
kenjiArai 10:38852d243fb2 67 uart->writeString("Restarting the advertising process\r\n");
kenjiArai 10:38852d243fb2 68 }
kenjiArai 11:368bd6332d02 69 ble_x.startAdvertising();
rgrover1 0:2130d7f559dc 70 }
rgrover1 0:2130d7f559dc 71
kenjiArai 10:38852d243fb2 72 void periodicCallback(void){
kenjiArai 10:38852d243fb2 73 triggerSensorPolling = true;
rgrover1 0:2130d7f559dc 74 }
rgrover1 0:2130d7f559dc 75
kenjiArai 10:38852d243fb2 76 int main(void){
kenjiArai 10:38852d243fb2 77 // Set priodic interrupt
rgrover1 0:2130d7f559dc 78 Ticker ticker;
kenjiArai 10:38852d243fb2 79 ticker.attach(periodicCallback, 5);
kenjiArai 10:38852d243fb2 80 // Opening screen
kenjiArai 11:368bd6332d02 81 printf("\r\nInitialising TY51822r3\r\n");
kenjiArai 10:38852d243fb2 82 printf("Temperature and CPU Vdd voltage via UART service\r\n");
kenjiArai 10:38852d243fb2 83 // setup BLE
kenjiArai 11:368bd6332d02 84 ble_x.init();
kenjiArai 11:368bd6332d02 85 ble_x.setDeviceName((const uint8_t *)deviceName);
kenjiArai 11:368bd6332d02 86 ble_x.onDisconnection(disconnectionCallback);
kenjiArai 10:38852d243fb2 87 // BLE Uart
kenjiArai 11:368bd6332d02 88 uart = new UARTService(ble_x);
kenjiArai 10:38852d243fb2 89 // setup advertising
kenjiArai 11:368bd6332d02 90 ble_x.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
kenjiArai 11:368bd6332d02 91 ble_x.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
kenjiArai 11:368bd6332d02 92 ble_x.accumulateAdvertisingPayload(
kenjiArai 11:368bd6332d02 93 GapAdvertisingData::SHORTENED_LOCAL_NAME,
kenjiArai 11:368bd6332d02 94 (const uint8_t *)deviceName,
kenjiArai 11:368bd6332d02 95 strlen(deviceName)
kenjiArai 11:368bd6332d02 96 );
kenjiArai 11:368bd6332d02 97 ble_x.accumulateAdvertisingPayload(
kenjiArai 11:368bd6332d02 98 GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
kenjiArai 11:368bd6332d02 99 (const uint8_t *)UARTServiceUUID_reversed,
kenjiArai 11:368bd6332d02 100 sizeof(UARTServiceUUID_reversed)
kenjiArai 11:368bd6332d02 101 );
kenjiArai 11:368bd6332d02 102 ble_x.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
kenjiArai 11:368bd6332d02 103 ble_x.startAdvertising();
kenjiArai 10:38852d243fb2 104 while (true){
kenjiArai 10:38852d243fb2 105 if (triggerSensorPolling){
kenjiArai 10:38852d243fb2 106 triggerSensorPolling = false;
kenjiArai 10:38852d243fb2 107 Update_Values();
kenjiArai 10:38852d243fb2 108 } else {
kenjiArai 11:368bd6332d02 109 ble_x.waitForEvent();
kenjiArai 10:38852d243fb2 110 }
rgrover1 0:2130d7f559dc 111 }
rgrover1 0:2130d7f559dc 112 }
kenjiArai 10:38852d243fb2 113
kenjiArai 10:38852d243fb2 114 void Update_Values(void){
kenjiArai 10:38852d243fb2 115 char buf[32];
kenjiArai 10:38852d243fb2 116 int32_t p_temp;
kenjiArai 10:38852d243fb2 117 float temperature;
kenjiArai 10:38852d243fb2 118
kenjiArai 10:38852d243fb2 119 // Update a temperature (inside nRF51822 chip)
kenjiArai 10:38852d243fb2 120 sd_temp_get(&p_temp);
kenjiArai 11:368bd6332d02 121 temperature = float(p_temp) / 4.0f;
kenjiArai 10:38852d243fb2 122 // 12 89
kenjiArai 10:38852d243fb2 123 sprintf(buf,"T:%+4.1fdC", temperature);
kenjiArai 10:38852d243fb2 124 if (uart){
kenjiArai 10:38852d243fb2 125 uart->writeString(buf);
kenjiArai 10:38852d243fb2 126 }
kenjiArai 10:38852d243fb2 127 printf(buf);
kenjiArai 10:38852d243fb2 128 // Update a Vdd voltage
kenjiArai 10:38852d243fb2 129 // 01234 9
kenjiArai 10:38852d243fb2 130 sprintf(buf,",Vdd:%3.2fV ", vdd.read_real_value());
kenjiArai 10:38852d243fb2 131 if (uart){
kenjiArai 10:38852d243fb2 132 uart->writeString(buf);
kenjiArai 10:38852d243fb2 133 }
kenjiArai 10:38852d243fb2 134 printf(buf);
kenjiArai 10:38852d243fb2 135 // 123456789 0
kenjiArai 10:38852d243fb2 136 sprintf(buf,"Charge:%d%% \r\n", vdd.read());
kenjiArai 10:38852d243fb2 137 if (uart){
kenjiArai 10:38852d243fb2 138 uart->writeString(buf);
kenjiArai 10:38852d243fb2 139 }
kenjiArai 10:38852d243fb2 140 printf(buf);
kenjiArai 10:38852d243fb2 141 }