tmeperature to mobile phone
Dependencies: BLE_API MPU6050 mbed nRF51822
Fork of BLE_HeartRate by
Revision 7:c08bcc5e6537, committed 2014-06-10
- Comitter:
- youyou
- Date:
- Tue Jun 10 04:56:06 2014 +0000
- Parent:
- 6:3a49b577f2ae
- Commit message:
- BLE_temperature
Changed in this revision
diff -r 3a49b577f2ae -r c08bcc5e6537 MPU6050.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MPU6050.lib Tue Jun 10 04:56:06 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/youyou/code/MPU6050/#fc3387f4d84b
diff -r 3a49b577f2ae -r c08bcc5e6537 main.cpp --- a/main.cpp Thu Jun 05 09:17:59 2014 +0000 +++ b/main.cpp Tue Jun 10 04:56:06 2014 +0000 @@ -16,23 +16,33 @@ #include "mbed.h" #include "nRF51822n.h" +#include "MPU6050.h" nRF51822n nrf; /* BLE radio driver */ -DigitalOut led1(LED1); -DigitalOut led2(LED2); -Ticker flipper; Serial pc(USBTX, USBRX); +MPU6050 mpu(P0_22, P0_20); /* Battery Level Service */ -uint8_t batt = 72; /* Battery level */ -uint8_t read_batt = 0; /* Variable to hold battery level reads */ +uint8_t batt = 88; /* Battery level */ + GattService battService (GattService::UUID_BATTERY_SERVICE); GattCharacteristic battLevel (GattCharacteristic::UUID_BATTERY_LEVEL_CHAR, 1, 1, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); + +GattService tempService (GattService::UUID_HEALTH_THERMOMETER_SERVICE); +GattCharacteristic tempLevel (GattCharacteristic::UUID_TEMPERATURE_MEASUREMENT_CHAR, + 2, + 3, + GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); +GattCharacteristic tempLocation ( + GattCharacteristic::UUID_BODY_SENSOR_LOCATION_CHAR, + 1, + 1, + GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); /* Heart Rate Service */ /* Service: https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.heart_rate.xml */ @@ -51,7 +61,7 @@ GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); /* Device Information service */ -uint8_t deviceName[4] = {'m', 'b', 'e', 'd'}; +uint8_t deviceName[] = {'Y', 'o', 'u','Y', 'o', 'u'}; GattService deviceInformationService ( GattService::UUID_DEVICE_INFORMATION_SERVICE); GattCharacteristic deviceManufacturer ( @@ -59,6 +69,12 @@ sizeof(deviceName), sizeof(deviceName), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); +uint8_t version[]={'Y', 'o', 'u','Y', 'o', 'u',' ','1','.','0'}; +GattCharacteristic firmwareVersion ( + GattCharacteristic::UUID_FIRMWARE_REVISION_STRING_CHAR, + sizeof(version), + sizeof(version), + GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); /* Advertising data and parameters */ GapAdvertisingData advData; @@ -66,9 +82,8 @@ GapAdvertisingParams advParams (GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); uint16_t uuid16_list[] = {GattService::UUID_BATTERY_SERVICE, GattService::UUID_DEVICE_INFORMATION_SERVICE, - GattService::UUID_HEART_RATE_SERVICE}; - -void tickerCallback(void); + GattService::UUID_HEART_RATE_SERVICE, + GattService::UUID_HEALTH_THERMOMETER_SERVICE}; /**************************************************************************/ /*! @@ -80,20 +95,20 @@ { virtual void onTimeout(void) { - pc.printf("Advertising Timeout!\n\r"); + pc.printf("Advertising Timeout!\r\n"); // Restart the advertising process with a much slower interval, // only start advertising again after a button press, etc. } virtual void onConnected(void) { - pc.printf("Connected!\n\r"); + pc.printf("Connected!\r\n"); } virtual void onDisconnected(void) { - pc.printf("Disconnected!\n\r"); - pc.printf("Restarting the advertising process\n\r"); + pc.printf("Disconnected!\r\n"); + pc.printf("Restarting the advertising process\r\n"); nrf.getGap().startAdvertising(advParams); } }; @@ -112,14 +127,20 @@ virtual void onUpdatesEnabled(uint16_t charHandle) { if (charHandle == hrmRate.getHandle()) { - pc.printf("Heart rate notify enabled\n\r"); + pc.printf("Heart rate notify enabled\r\n"); + } + if (charHandle == tempLevel.getHandle()) { + pc.printf("Temperature notify enabled\r\n"); } } virtual void onUpdatesDisabled(uint16_t charHandle) { if (charHandle == hrmRate.getHandle()) { - pc.printf("Heart rate notify disabled\n\r"); + pc.printf("Heart rate notify disabled\r\n"); + } + if (charHandle == tempLevel.getHandle()) { + pc.printf("Temperature notify disabled\r\n"); } } @@ -133,17 +154,17 @@ /**************************************************************************/ int main(void) { - /* Setup blinky: led1 is toggled in main, led2 is toggled via Ticker */ - led1 = 1; - led2 = 1; - flipper.attach(&tickerCallback, 1.0); - + float accdata[3]; + uint16_t time=0; + wait(1); + pc.baud(38400); + /* Setup the local GAP/GATT event handlers */ nrf.getGap().setEventHandler(new GapEventHandler()); nrf.getGattServer().setEventHandler(new GattServerEventHandler()); /* Initialise the nRF51822 */ - pc.printf("Initialising the nRF51822\n\r"); + pc.printf("Initialising the nRF51822...\r\n"); nrf.init(); /* Make sure we get a clean start */ @@ -162,22 +183,47 @@ /* Add the Device Information service */ deviceInformationService.addCharacteristic(deviceManufacturer); + deviceInformationService.addCharacteristic(firmwareVersion); nrf.getGattServer().addService(deviceInformationService); /* Add the Heart Rate service */ hrmService.addCharacteristic(hrmRate); hrmService.addCharacteristic(hrmLocation); nrf.getGattServer().addService(hrmService); + + tempService.addCharacteristic(tempLevel); + tempService.addCharacteristic(tempLocation); + nrf.getGattServer().addService(tempService); /* Start advertising (make sure you've added all your data first) */ nrf.getGap().startAdvertising(advParams); + + + mpu.setFrequency(100000); + wait_ms(10); + if (mpu.testConnection()) + { + pc.printf("MPU connection succeeded!\r\n"); + } + else + { + pc.printf("MPU connection failed!\r\n"); //Todo: If connection fails, retry a couple times. Try resetting MPU (this would need another wire?) + } + wait(2); + mpu.setSleepMode(false); + mpu.setBW(MPU6050_BW_20); + mpu.setGyroRange(MPU6050_GYRO_RANGE_500); + mpu.setAcceleroRange(MPU6050_ACCELERO_RANGE_2G); + /* Wait until we are connected to a central device before updating * anything */ - pc.printf("Waiting for a connection ..."); + pc.printf("Waiting for a connection ...\r\n"); while (!nrf.getGap().state.connected) { } - pc.printf("Connected!\n\r"); + wait(3); + + pc.printf("Connected!\r\n"); /* Now that we're live, update the battery level characteristic, and */ /* change the device manufacturer characteristic to 'mbed' */ @@ -186,7 +232,10 @@ nrf.getGattServer().updateValue(deviceManufacturer.getHandle(), deviceName, sizeof(deviceName)); - + nrf.getGattServer().updateValue(firmwareVersion.getHandle(), + version, + sizeof(version)); + /* Set the heart rate monitor location (one time only) */ /* See --> https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.body_sensor_location.xml */ uint8_t location = 0x03; /* Finger */ @@ -194,20 +243,23 @@ nrf.getGattServer().updateValue(hrmLocation.getHandle(), (uint8_t *)&location, sizeof(location)); + nrf.getGattServer().updateValue(tempLocation.getHandle(), + (uint8_t *)&location, + sizeof(location)); - /* Do blinky on LED1 while we're waiting for BLE events */ - for (;; ) { - led1 = !led1; + + for (;; ) + { wait(1); - /* Update battery level */ + /* Update battery level batt++; if (batt > 100) { batt = 72; } nrf.getGattServer().updateValue(battLevel.getHandle(), (uint8_t *)&batt, - sizeof(batt)); + sizeof(batt)); */ /* Update the HRM measurement */ /* First byte = 8-bit values, no extra info, Second byte = uint8_t HRM value */ @@ -218,15 +270,21 @@ } uint8_t bpm[2] = {0x00, hrmCounter}; nrf.getGattServer().updateValue(hrmRate.getHandle(), bpm, sizeof(bpm)); + + float f =mpu.getTemp(); + int t = f; + uint8_t temper[2]; + temper[0]=t>>8; + temper[1]=t; + nrf.getGattServer().updateValue(tempLevel.getHandle(), temper, sizeof(temper)); + + pc.printf("HRM:"); + pc.printf("%d",hrmCounter); + pc.printf(" Temperature:"); + pc.printf("%.2f",f); + pc.printf(" "); + mpu.getAccelero(accdata); + time++; + pc.printf("X:%.2f Y:%.2f Z:%.2f Time:%ds\r\n",accdata[0], accdata[1], accdata[2],time); } -} - -/**************************************************************************/ -/*! - @brief Ticker callback to switch led2 state -*/ -/**************************************************************************/ -void tickerCallback(void) -{ - led2 = !led2; -} +} \ No newline at end of file
diff -r 3a49b577f2ae -r c08bcc5e6537 mbed.bld --- a/mbed.bld Thu Jun 05 09:17:59 2014 +0000 +++ b/mbed.bld Tue Jun 10 04:56:06 2014 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/7d30d6019079 \ No newline at end of file +http://mbed.org/users/mbed_official/code/mbed/builds/0b3ab51c8877 \ No newline at end of file