This is an example of BLE GATT Client, which receives broadcast data from BLE_Server_BME280 ( a GATT server) , then transfers values up to mbed Device Connector (cloud).

Please refer details about BLEClient_mbedDevConn below. https://github.com/soramame21/BLEClient_mbedDevConn

The location of required BLE GATT server, BLE_Server_BME280, is at here. https://developer.mbed.org/users/edamame22/code/BLE_Server_BME280/

Revision:
2:b894b3508057
Parent:
1:8950e6a891df
--- a/main.cpp	Wed Apr 26 11:20:41 2017 +0900
+++ b/main.cpp	Tue Sep 05 11:56:13 2017 +0900
@@ -29,7 +29,7 @@
 
 #include "security.h"
 
-#include "mbed.h"
+//#include "mbed.h"
 #include "rtos.h"
 
 #if MBED_CONF_APP_NETWORK_INTERFACE == WIFI
@@ -76,9 +76,9 @@
 Ticker status_ticker;
 // Ren, begin
 enum charType {
-	PRESSURE,
-	TEMPERATURE,
-	HUMIDITY
+    PRESSURE,
+    TEMPERATURE,
+    HUMIDITY
 };
 const char * dbg_CharType[HUMIDITY+1]={"Pressure","Temperature","Humidity"};
 const char * objName[HUMIDITY+1]={"3323","3303","3304"};
@@ -91,11 +91,12 @@
 class BME280Resource {
 public:
     BME280Resource() {
-    	// create Pressure object '3323'.
+        // create Pressure object '3323'.
         for(int m=0; m<HUMIDITY+1; m++) {
+            M2MObjectInstance* tmp_inst;
             bme280[m] = M2MInterfaceFactory::create_object(objName[m]);
-            tmp_inst[m] = bme280[m] ->create_object_instance();
-            tmp_res[m] = tmp_inst[m]->create_dynamic_resource("5700", dbg_CharType[m],
+            tmp_inst = bme280[m] ->create_object_instance();
+            tmp_res[m] = tmp_inst->create_dynamic_resource("5700", dbg_CharType[m],
                     M2MResourceInstance::STRING, true /* observable */);
             tmp_res[m]->set_operation(M2MBase::GET_ALLOWED);
             tmp_res[m]->set_value((uint8_t*)"0.0", 3);
@@ -127,12 +128,13 @@
     }
 private:
     M2MObject*  bme280[HUMIDITY+1];
-    M2MObjectInstance* tmp_inst[HUMIDITY+1];
+//    M2MObjectInstance* tmp_inst[HUMIDITY+1];
     M2MResource* tmp_res[HUMIDITY+1];
 };
 
 static BME280Resource *demo1;
-// Ren, end
+// end of BME280 resource definition
+
 
 /************************************************************BLE Stuff from here *********************************/
 BLE &ble = BLE::Instance();
@@ -152,7 +154,7 @@
     // byte 1: The key, it is the type of the data
     // byte [2..N] The value. N is equal to byte0 - 1
 
-  	//printf("Starting advertisementCallback...\r\n");
+    //printf("Starting advertisementCallback...\r\n");
     for (uint8_t i = 0; i < params->advertisingDataLen; ++i) {
 
         const uint8_t record_length = params->advertisingData[i];
@@ -217,8 +219,8 @@
         printf(" is_active[PRESSURE] = true\r\n");
     }
     else if (tmp_uuid == GattCharacteristic::UUID_TEMPERATURE_CHAR) {
-    	  bme280Characteristic[TEMPERATURE] = *characteristicP;    is_active[TEMPERATURE] = true;
-    	  printf(" is_active[TEMPERATURE] = true\r\n");
+        bme280Characteristic[TEMPERATURE] = *characteristicP;    is_active[TEMPERATURE] = true;
+        printf(" is_active[TEMPERATURE] = true\r\n");
    } else {
         bme280Characteristic[HUMIDITY] = *characteristicP;    is_active[HUMIDITY] = true;
         printf(" is_active[HUMIDITY] = true\r\n");
@@ -316,7 +318,7 @@
 
     // Ren, clear discovered Characteristic at beginning
     for(int i=0; i<HUMIDITY+1; i++)   {
-    	  dataprint[i]=0.0;     is_active[i]=false;
+        dataprint[i]=0.0;     is_active[i]=false;
     }
 
     ble.gap().onDisconnection(disconnectionCallback);
@@ -362,6 +364,7 @@
 volatile bool clicked = false;
 osThreadId mainThread;
 
+
 #ifdef TARGET_K64F
 // Set up Hardware interrupt button.
 InterruptIn obs_button(SW2);
@@ -574,9 +577,10 @@
 	  BLE_thread.start(BLE_thread_init);
     // waiting for completion of BLE_thread_init
     Thread::wait(2000);
+
     while (true) {
 
-	      printf("inside main for client\r\n");
+      printf("inside main for client\r\n");
         triggerLedCharacteristic = false;
 
         updates.wait(25000);