Workshop example
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Diff: main.cpp
- Revision:
- 12:1f1a50e973db
- Parent:
- 11:8df4529f060d
- Child:
- 13:42b49a0caade
--- a/main.cpp Mon Dec 10 10:42:29 2018 +0000 +++ b/main.cpp Mon Dec 10 17:19:20 2018 +0000 @@ -29,12 +29,12 @@ // #include "VL53L0X.h" static DevI2C devI2c(PB_11,PB_10); -static HTS221Sensor hum_temp(&devI2c); -static LPS22HBSensor press_temp(&devI2c); -static LSM6DSLSensor acc_gyro(&devI2c,LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW,PD_11); // low address -static LIS3MDL magnetometer(&devI2c); +static HTS221Sensor sen_hum_temp(&devI2c); +static LPS22HBSensor sen_press_temp(&devI2c); +static LSM6DSLSensor sen_acc_gyro(&devI2c,LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW,PD_11); // low address +static LIS3MDL sen_mag(&devI2c); static DigitalOut shutdown_pin(PC_6); -// static VL53L0X range(&devI2c, &shutdown_pin, PC_7); +// static VL53L0X sen_distance(&devI2c, &shutdown_pin, PC_7); InterruptIn button(USER_BUTTON); #define SENSORS_POLL_INTERVAL 1.0 @@ -56,14 +56,19 @@ DigitalOut led(LED1); // Declaring pointers for access to Pelion Client resources outside of main() -MbedCloudClientResource *button_res; -MbedCloudClientResource *led_res; +MbedCloudClientResource *res_button; +MbedCloudClientResource *res_led; +// Additional resources for sensor readings +MbedCloudClientResource *res_humidity; +MbedCloudClientResource *res_temperature; #ifdef SENSORS_AND_BUTTONS -// Additional resources for sensor readings -MbedCloudClientResource *humidity_res; -MbedCloudClientResource *temperature_res; -MbedCloudClientResource *distance_res; +MbedCloudClientResource *res_pressure; +MbedCloudClientResource *res_temperature2; +MbedCloudClientResource *res_magnometer; +MbedCloudClientResource *res_accelerometer; +MbedCloudClientResource *res_gyroscope; +MbedCloudClientResource *res_distance; #endif /* SENSORS_AND_BUTTONS */ // When the device is registered, this variable will be used to access various useful information, like device ID etc. @@ -87,16 +92,16 @@ * @param size Size of the body */ void led_post_callback(MbedCloudClientResource *resource, const uint8_t *buffer, uint16_t size) { - printf("POST received. Going to blink LED pattern: %s\n", led_res->get_value().c_str()); - led = atoi(led_res->get_value().c_str()); + printf("POST received. Going to blink LED pattern: %s\n", res_led->get_value().c_str()); + led = atoi(res_led->get_value().c_str()); } /** * Button function triggered by the physical button press or by timer depending on SENSORS_AND_BUTTONS macro. */ void button_press() { - int v = button_res->get_value_int() + 1; - button_res->set_value(v); + int v = res_button->get_value_int() + 1; + res_button->set_value(v); printf("Button clicked %d times\n", v); } @@ -126,32 +131,32 @@ uint8_t id; // Initialize sensors - hum_temp.init(NULL); - press_temp.init(NULL); - acc_gyro.init(NULL); - magnetometer.init(NULL); + sen_hum_temp.init(NULL); + sen_press_temp.init(NULL); + sen_acc_gyro.init(NULL); + sen_mag.init(NULL); // range.init_sensor(VL53L0X_DEFAULT_ADDRESS); /// Call sensors enable routines - hum_temp.enable(); - press_temp.enable(); - //magnetometer.enable(); - acc_gyro.enable_x(); - acc_gyro.enable_g(); + sen_hum_temp.enable(); + sen_press_temp.enable(); + //sen_mag.enable(); + sen_acc_gyro.enable_x(); + sen_acc_gyro.enable_g(); printf("\033[2J\033[20A"); - printf ("\r\n--- Sensors configuration ---\r\n\r\n"); + printf ("\r\nSensors configuration:\r\n"); - hum_temp.read_id(&id); + sen_hum_temp.read_id(&id); printf("HTS221 humidity & temperature = 0x%X\r\n", id); - press_temp.read_id(&id); + sen_press_temp.read_id(&id); printf("LPS22HB pressure & temperature = 0x%X\r\n", id); - magnetometer.read_id(&id); + sen_mag.read_id(&id); printf("LIS3MDL magnetometer = 0x%X\r\n", id); - acc_gyro.read_id(&id); + sen_acc_gyro.read_id(&id); printf("LSM6DSL accelerometer & gyroscope = 0x%X\r\n", id); - printf("\n\r--- Reading sensor values ---\n\r"); ; + printf("\r\n"); ; } /** @@ -159,44 +164,43 @@ * This function is called periodically. */ void sensors_update() { - float value1, value2; + float fval1, fval2; int32_t axes[3]; - uint32_t distance; + uint32_t uval; printf("\r\n"); - value1 = value2 = 0.0; - hum_temp.get_temperature(&value1); - hum_temp.get_humidity(&value2); + fval1 = fval2 = 0.0; + sen_hum_temp.get_temperature(&fval1); + sen_hum_temp.get_humidity(&fval2); if (endpointInfo) { - temperature_res->set_value(value1); - humidity_res->set_value(value2); + res_temperature->set_value(fval1); + res_humidity->set_value(fval2); } - printf("HTS221: [temp] %.2f C, [hum] %.2f%%\r\n", value1, value2); + printf("HTS221 temp: %7.2f C, humidity: %7.2f %%\r\n", fval1, fval2); - value1 = value2 = 0.0; - press_temp.get_temperature(&value1); - // press_temp.get_pressure(&value2); - printf("LPS22HB: [temp] %.2f C, [press] %.2f mbar\r\n", value1, value2); - printf("Mag/Acc/Gyro readings: x, y, z\r\n"); + fval1 = fval2 = 0.0; + sen_press_temp.get_temperature(&fval1); + sen_press_temp.get_pressure(&fval2); + printf("LPS22HB temp: %7.2f C, pressure: %7.2f mbar \r\n", fval1, fval2); - magnetometer.get_m_axes(axes); - printf("LIS3MDL [mag/mgauss]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); - acc_gyro.get_x_axes(axes); - printf("LSM6DSL [acc/mg]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); - acc_gyro.get_g_axes(axes); - printf("LSM6DSL [gyro/mdps]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); + sen_mag.get_m_axes(axes); + printf("LIS3MDL mag: %7ld x, %7ld y, %7ld z [mgauss] \r\n", axes[0], axes[1], axes[2]); + sen_acc_gyro.get_x_axes(axes); + printf("LSM6DSL acc: %7ld x, %7ld y, %7ld z [mg] \r\n", axes[0], axes[1], axes[2]); + sen_acc_gyro.get_g_axes(axes); + printf("LSM6DSL gyro: %7ld x, %7ld y, %7ld z [mdps] \r\n", axes[0], axes[1], axes[2]); - // if (range.get_distance(&distance) == VL53L0X_ERROR_NONE) { - // printf("VL53L0X [mm]: %6ld\r\n", distance); + // if (range.get_distance(&uval) == VL53L0X_ERROR_NONE) { + // printf("VL53L0X [mm]: %6ld\r\n", uval); // if (endpointInfo) { - // distance_res->set_value((int)distance); + // res_distance->set_value((int)uval); // } // } else { // printf("VL53L0X [mm]: --\r\n"); // } - printf("\033[7A"); + printf("\033[6A"); } #endif /* SENSORS_AND_BUTTONS */ @@ -257,34 +261,34 @@ } // Creating resources, which can be written or read from the cloud - button_res = client.create_resource("3200/0/5501", "button_count"); - button_res->set_value(0); - button_res->methods(M2MMethod::GET); - button_res->observable(true); - button_res->attach_notification_callback(button_callback); + res_button = client.create_resource("3200/0/5501", "button_count"); + res_button->set_value(0); + res_button->methods(M2MMethod::GET); + res_button->observable(true); + res_button->attach_notification_callback(button_callback); #ifdef SENSORS_AND_BUTTONS // Sensor resources - temperature_res = client.create_resource("3303/0/5700", "temperature"); - temperature_res->set_value(0); - temperature_res->methods(M2MMethod::GET); - temperature_res->observable(true); + res_temperature = client.create_resource("3303/0/5700", "temperature"); + res_temperature->set_value(0); + res_temperature->methods(M2MMethod::GET); + res_temperature->observable(true); - humidity_res = client.create_resource("3304/0/5700", "humidity"); - humidity_res->set_value(0); - humidity_res->methods(M2MMethod::GET); - humidity_res->observable(true); + res_humidity = client.create_resource("3304/0/5700", "humidity"); + res_humidity->set_value(0); + res_humidity->methods(M2MMethod::GET); + res_humidity->observable(true); - // distance_res = client.create_resource("3330/0/5700", "distance"); - // distance_res->set_value(0); - // distance_res->methods(M2MMethod::GET); - // distance_res->observable(true); + // res_distance = client.create_resource("3330/0/5700", "distance"); + // res_distance->set_value(0); + // res_distance->methods(M2MMethod::GET); + // res_distance->observable(true); #endif /* SENSORS_AND_BUTTONS */ - // led_res = client.create_resource("3201/0/5853", "led_state"); - // led_res->set_value(1); - // led_res->methods(M2MMethod::GET | M2MMethod::PUT); - // led_res->attach_put_callback(led_put_callback); + // res_led = client.create_resource("3201/0/5853", "led_state"); + // res_led->set_value(1); + // res_led->methods(M2MMethod::GET | M2MMethod::PUT); + // res_led->attach_put_callback(led_put_callback); printf("Initialized Pelion Client. Registering...\n"); @@ -294,6 +298,11 @@ // Register with Pelion DM client.register_and_connect(); + int i = 600; // wait 60 seconds + while (i-- > 0 && !client.is_client_registered()) { + wait_ms(100); + } + // Placeholder for callback to update local resource when GET comes. // The timer fires on an interrupt context, but debounces it to the eventqueue, so it's safe to do network operations #ifdef SENSORS_AND_BUTTONS