Mbed OS and Pelion Device Management example over WIFI for DISCO_L475VG_IOT01 board

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

DEPRECATED

This example application is not maintained and not recommended. It uses an old version of Mbed OS, Pelion DM and Arm toolchain. It doesn't work with Mbed Studio.

Please use: https://os.mbed.com/teams/mbed-os-examples/code/mbed-os-example-pelion/

This example is known to work on the following platforms:

DISCO_L475E_IOT01A

Follow the Quick-Start instructions: https://cloud.mbed.com/quick-start

Example functionality

This example showcases the following device functionality:

  • Read onboard temperature and humidity sensors, and report them as Pelion LWM2M resources (see image below).
  • On user button click, increment Pelion LWM2M button resource.
  • Allow the user to change the state of the board LED from Pelion LWM2M led_state resource and PUT request.
  • Uses all onboard sensors and reports them as Pelion LWM2M resources.

/media/uploads/screamer/pelion_st_humidity_reading.png?v=2

Use this example with Mbed CLI

1. Import the application into your desktop:

mbed import https://os.mbed.com/teams/ST/code/pelion-example-disco-iot01

cd pelion-example-disco-iot01

2. Install the CLOUD_SDK_API_KEY

mbed config -G CLOUD_SDK_API_KEY <PELION_DM_API_KEY>

For instructions on how to generate your API key, please see the documentation.

3. Initialize firmware credentials (done once per repository). You can use the following command:

mbed dm init -d "<your company name in Pelion DM>" --model-name "<product model identifier>" -q --force

If above command do not work for your Mbed CLI, please consider upgrading Mbed CLI to version 1.8.x or above.

4. Compile and program:

mbed compile -t <toolchain> -m DISCO_L475VG_IOT01A

(supported toolchains : GCC_ARM / ARM / IAR)

5. You can connect on a virtual terminal/COM port to the platform using:

mbed sterm -b 115200

This should give you an output similar to:

[BOOT] Mbed Bootloader
[BOOT] ARM: 00000000000000000000
[BOOT] OEM: 00000000000000000000
[BOOT] Layout: 0 80096F4
[BOOT] Active firmware integrity check:
[BOOT] SHA256: 0660E360D432225D5251461998FD8617B017098C5F1F90D5FB607BF8C27ED530
[BOOT] Version: 1553615309
[BOOT] Slot 0 is empty
[BOOT] Active firmware up-to-date
[BOOT] Application's start address: 0x8010400
[BOOT] Application's jump address: 0x8011041
[BOOT] Application's stack address: 0x20018000
[BOOT] Forwarding to application...

Starting Simple Pelion Device Management Client example
You can hold the user button during boot to format the storage and change the device identity.

Sensors configuration:
Invalid new address!
HTS221  humidity & temperature    = 0xBC
LPS22HB pressure & temperature    = 0xB1
LIS3MDL magnetometer              = 0x3D
LSM6DSL accelerometer & gyroscope = 0x6A

Connecting to the network using Wifi...
Connected to the network successfully. IP address: 192.168.1.3
Initializing Pelion Device Management Client...
Initialized Pelion Client. Registering...
Registered to Pelion Device Management. Endpoint Name: 0169********************001002d5

ADC temp:     23.0037 C,  vref:      0.3661 V
HTS221 temp:   28.700 C,  humidity:   31.90 %
LPS22HB temp:  29.600 C,  pressure: 1032.01 mbar
LIS3MDL mag:    0.217 x,  -0.284 y,  -0.053 z [gauss]
LSM6DSL acc:    0.005 x,  -0.014 y,   1.029 z [g]
LSM6DSL gyro:   0.910 x,  -0.910 y,   1.120 z [dps]
VL53L0X dist:    1855 mm
Committer:
screamer
Date:
Mon Mar 11 11:28:07 2019 +0000
Revision:
31:da14aa77f977
Parent:
10:b27c962b3c3f
Revert back to Mbed OS 5.10.4 due to issues to fit in RAM2 on GCC_ARM

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 10:b27c962b3c3f 1 /*
screamer 10:b27c962b3c3f 2 * Copyright (c) 2018 ARM Limited. All rights reserved.
screamer 10:b27c962b3c3f 3 * SPDX-License-Identifier: Apache-2.0
screamer 10:b27c962b3c3f 4 * Licensed under the Apache License, Version 2.0 (the License); you may
screamer 10:b27c962b3c3f 5 * not use this file except in compliance with the License.
screamer 10:b27c962b3c3f 6 * You may obtain a copy of the License at
screamer 10:b27c962b3c3f 7 *
screamer 10:b27c962b3c3f 8 * http://www.apache.org/licenses/LICENSE-2.0
screamer 10:b27c962b3c3f 9 *
screamer 10:b27c962b3c3f 10 * Unless required by applicable law or agreed to in writing, software
screamer 10:b27c962b3c3f 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
screamer 10:b27c962b3c3f 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
screamer 10:b27c962b3c3f 13 * See the License for the specific language governing permissions and
screamer 10:b27c962b3c3f 14 * limitations under the License.
screamer 10:b27c962b3c3f 15 */
screamer 10:b27c962b3c3f 16 #include "BlockDevice.h"
screamer 10:b27c962b3c3f 17 #include "FileSystem.h"
screamer 10:b27c962b3c3f 18 #include "FATFileSystem.h"
screamer 10:b27c962b3c3f 19 #include "LittleFileSystem.h"
screamer 10:b27c962b3c3f 20
screamer 10:b27c962b3c3f 21 #if COMPONENT_SPIF
screamer 10:b27c962b3c3f 22 #include "SPIFBlockDevice.h"
screamer 10:b27c962b3c3f 23 #endif
screamer 10:b27c962b3c3f 24
screamer 10:b27c962b3c3f 25 #if COMPONENT_QSPIF
screamer 10:b27c962b3c3f 26 #include "QSPIFBlockDevice.h"
screamer 10:b27c962b3c3f 27 #endif
screamer 10:b27c962b3c3f 28
screamer 10:b27c962b3c3f 29 #if COMPONENT_DATAFLASH
screamer 10:b27c962b3c3f 30 #include "DataFlashBlockDevice.h"
screamer 10:b27c962b3c3f 31 #endif
screamer 10:b27c962b3c3f 32
screamer 10:b27c962b3c3f 33 #if COMPONENT_SD
screamer 10:b27c962b3c3f 34 #include "SDBlockDevice.h"
screamer 10:b27c962b3c3f 35 #endif
screamer 10:b27c962b3c3f 36
screamer 10:b27c962b3c3f 37 #if COMPONENT_FLASHIAP
screamer 10:b27c962b3c3f 38 #include "FlashIAPBlockDevice.h"
screamer 10:b27c962b3c3f 39 #endif
screamer 10:b27c962b3c3f 40
screamer 10:b27c962b3c3f 41 #if COMPONENT_NUSD
screamer 10:b27c962b3c3f 42 #include "NuSDBlockDevice.h"
screamer 10:b27c962b3c3f 43 #endif
screamer 10:b27c962b3c3f 44
screamer 10:b27c962b3c3f 45 using namespace mbed;
screamer 10:b27c962b3c3f 46
screamer 10:b27c962b3c3f 47 // Align a value to a specified size.
screamer 10:b27c962b3c3f 48 // Parameters :
screamer 10:b27c962b3c3f 49 // val - [IN] Value.
screamer 10:b27c962b3c3f 50 // size - [IN] Size.
screamer 10:b27c962b3c3f 51 // Return : Aligned value.
screamer 10:b27c962b3c3f 52 static inline uint32_t align_up(uint32_t val, uint32_t size)
screamer 10:b27c962b3c3f 53 {
screamer 10:b27c962b3c3f 54 return (((val - 1) / size) + 1) * size;
screamer 10:b27c962b3c3f 55 }
screamer 10:b27c962b3c3f 56
screamer 10:b27c962b3c3f 57 BlockDevice *BlockDevice::get_default_instance()
screamer 10:b27c962b3c3f 58 {
screamer 10:b27c962b3c3f 59 #if COMPONENT_SPIF
screamer 10:b27c962b3c3f 60
screamer 10:b27c962b3c3f 61 static SPIFBlockDevice default_bd(
screamer 10:b27c962b3c3f 62 MBED_CONF_SPIF_DRIVER_SPI_MOSI,
screamer 10:b27c962b3c3f 63 MBED_CONF_SPIF_DRIVER_SPI_MISO,
screamer 10:b27c962b3c3f 64 MBED_CONF_SPIF_DRIVER_SPI_CLK,
screamer 10:b27c962b3c3f 65 MBED_CONF_SPIF_DRIVER_SPI_CS,
screamer 10:b27c962b3c3f 66 MBED_CONF_SPIF_DRIVER_SPI_FREQ
screamer 10:b27c962b3c3f 67 );
screamer 10:b27c962b3c3f 68
screamer 10:b27c962b3c3f 69 return &default_bd;
screamer 10:b27c962b3c3f 70
screamer 10:b27c962b3c3f 71 #elif COMPONENT_QSPIF
screamer 10:b27c962b3c3f 72
screamer 10:b27c962b3c3f 73 static QSPIFBlockDevice default_bd(
screamer 10:b27c962b3c3f 74 MBED_CONF_QSPIF_QSPI_IO0,
screamer 10:b27c962b3c3f 75 MBED_CONF_QSPIF_QSPI_IO1,
screamer 10:b27c962b3c3f 76 MBED_CONF_QSPIF_QSPI_IO2,
screamer 10:b27c962b3c3f 77 MBED_CONF_QSPIF_QSPI_IO3,
screamer 10:b27c962b3c3f 78 MBED_CONF_QSPIF_QSPI_SCK,
screamer 10:b27c962b3c3f 79 MBED_CONF_QSPIF_QSPI_CSN,
screamer 10:b27c962b3c3f 80 MBED_CONF_QSPIF_QSPI_POLARITY_MODE,
screamer 10:b27c962b3c3f 81 MBED_CONF_QSPIF_QSPI_FREQ
screamer 10:b27c962b3c3f 82 );
screamer 10:b27c962b3c3f 83
screamer 10:b27c962b3c3f 84 return &default_bd;
screamer 10:b27c962b3c3f 85
screamer 10:b27c962b3c3f 86 #elif COMPONENT_DATAFLASH
screamer 10:b27c962b3c3f 87
screamer 10:b27c962b3c3f 88 static DataFlashBlockDevice default_bd(
screamer 10:b27c962b3c3f 89 MBED_CONF_DATAFLASH_SPI_MOSI,
screamer 10:b27c962b3c3f 90 MBED_CONF_DATAFLASH_SPI_MISO,
screamer 10:b27c962b3c3f 91 MBED_CONF_DATAFLASH_SPI_CLK,
screamer 10:b27c962b3c3f 92 MBED_CONF_DATAFLASH_SPI_CS
screamer 10:b27c962b3c3f 93 );
screamer 10:b27c962b3c3f 94
screamer 10:b27c962b3c3f 95 return &default_bd;
screamer 10:b27c962b3c3f 96
screamer 10:b27c962b3c3f 97 #elif COMPONENT_SD
screamer 10:b27c962b3c3f 98
screamer 10:b27c962b3c3f 99 static SDBlockDevice default_bd(
screamer 10:b27c962b3c3f 100 MBED_CONF_SD_SPI_MOSI,
screamer 10:b27c962b3c3f 101 MBED_CONF_SD_SPI_MISO,
screamer 10:b27c962b3c3f 102 MBED_CONF_SD_SPI_CLK,
screamer 10:b27c962b3c3f 103 MBED_CONF_SD_SPI_CS
screamer 10:b27c962b3c3f 104 );
screamer 10:b27c962b3c3f 105
screamer 10:b27c962b3c3f 106 return &default_bd;
screamer 10:b27c962b3c3f 107
screamer 10:b27c962b3c3f 108 #elif COMPONENT_NUSD
screamer 10:b27c962b3c3f 109
screamer 10:b27c962b3c3f 110 static NuSDBlockDevice default_bd;
screamer 10:b27c962b3c3f 111
screamer 10:b27c962b3c3f 112 return &default_bd;
screamer 10:b27c962b3c3f 113
screamer 10:b27c962b3c3f 114 #elif COMPONENT_FLASHIAP
screamer 10:b27c962b3c3f 115
screamer 10:b27c962b3c3f 116 #if (MBED_CONF_FLASHIAP_BLOCK_DEVICE_SIZE == 0) && (MBED_CONF_FLASHIAP_BLOCK_DEVICE_BASE_ADDRESS == 0xFFFFFFFF)
screamer 10:b27c962b3c3f 117
screamer 10:b27c962b3c3f 118 size_t flash_size;
screamer 10:b27c962b3c3f 119 uint32_t start_address;
screamer 10:b27c962b3c3f 120 uint32_t bottom_address;
screamer 10:b27c962b3c3f 121 FlashIAP flash;
screamer 10:b27c962b3c3f 122
screamer 10:b27c962b3c3f 123 int ret = flash.init();
screamer 10:b27c962b3c3f 124 if (ret != 0) {
screamer 10:b27c962b3c3f 125 return 0;
screamer 10:b27c962b3c3f 126 }
screamer 10:b27c962b3c3f 127
screamer 10:b27c962b3c3f 128 //Find the start of first sector after text area
screamer 10:b27c962b3c3f 129 bottom_address = align_up(FLASHIAP_ROM_END, flash.get_sector_size(FLASHIAP_ROM_END));
screamer 10:b27c962b3c3f 130 start_address = flash.get_flash_start();
screamer 10:b27c962b3c3f 131 flash_size = flash.get_flash_size();
screamer 10:b27c962b3c3f 132
screamer 10:b27c962b3c3f 133 ret = flash.deinit();
screamer 10:b27c962b3c3f 134
screamer 10:b27c962b3c3f 135 static FlashIAPBlockDevice default_bd(bottom_address, start_address + flash_size - bottom_address);
screamer 10:b27c962b3c3f 136
screamer 10:b27c962b3c3f 137 #else
screamer 10:b27c962b3c3f 138
screamer 10:b27c962b3c3f 139 static FlashIAPBlockDevice default_bd;
screamer 10:b27c962b3c3f 140
screamer 10:b27c962b3c3f 141 #endif
screamer 10:b27c962b3c3f 142
screamer 10:b27c962b3c3f 143 return &default_bd;
screamer 10:b27c962b3c3f 144
screamer 10:b27c962b3c3f 145 #else
screamer 10:b27c962b3c3f 146
screamer 10:b27c962b3c3f 147 return NULL;
screamer 10:b27c962b3c3f 148
screamer 10:b27c962b3c3f 149 #endif
screamer 10:b27c962b3c3f 150
screamer 10:b27c962b3c3f 151 }
screamer 10:b27c962b3c3f 152
screamer 10:b27c962b3c3f 153 FileSystem *FileSystem::get_default_instance()
screamer 10:b27c962b3c3f 154 {
screamer 10:b27c962b3c3f 155 #if COMPONENT_SPIF || COMPONENT_QSPIF || COMPONENT_DATAFLASH || COMPONENT_NUSD
screamer 10:b27c962b3c3f 156
screamer 10:b27c962b3c3f 157 static LittleFileSystem flash("flash", BlockDevice::get_default_instance());
screamer 10:b27c962b3c3f 158 flash.set_as_default();
screamer 10:b27c962b3c3f 159
screamer 10:b27c962b3c3f 160 return &flash;
screamer 10:b27c962b3c3f 161
screamer 10:b27c962b3c3f 162 #elif COMPONENT_SD
screamer 10:b27c962b3c3f 163
screamer 10:b27c962b3c3f 164 static FATFileSystem sdcard("sd", BlockDevice::get_default_instance());
screamer 10:b27c962b3c3f 165 sdcard.set_as_default();
screamer 10:b27c962b3c3f 166
screamer 10:b27c962b3c3f 167 return &sdcard;
screamer 10:b27c962b3c3f 168
screamer 10:b27c962b3c3f 169 #elif COMPONENT_FLASHIAP
screamer 10:b27c962b3c3f 170
screamer 10:b27c962b3c3f 171 static LittleFileSystem flash("flash", BlockDevice::get_default_instance());
screamer 10:b27c962b3c3f 172 flash.set_as_default();
screamer 10:b27c962b3c3f 173
screamer 10:b27c962b3c3f 174 return &flash;
screamer 10:b27c962b3c3f 175
screamer 10:b27c962b3c3f 176 #else
screamer 10:b27c962b3c3f 177
screamer 10:b27c962b3c3f 178 return NULL;
screamer 10:b27c962b3c3f 179
screamer 10:b27c962b3c3f 180 #endif
screamer 10:b27c962b3c3f 181
screamer 10:b27c962b3c3f 182 }