Mbed OS Device Connector client pushing environmental sensor data via 6LowPan.

Dependencies:   X_NUCLEO_IKS01A2

Fork of mbed-os-example-client-Sensors_6LowPan by Nicola Capovilla

The application is derived from the official mbedOS client example (link) and has been tested using a X-NUCLEO-IDS01A4 SubGHz 6LowPan connectivity board and a X-NUCLEO-IKS01A2 (default) or a X-NUCLEO-IKS01A1 motion and environmental sensors expansion board connected to a ST NUCLEO-F429ZI platform.
The following steps should be performed to make the application work:

  • Register and login into ARM mbed Connector.
  • Replace the default and empty security.h file with the one associated with your account and provided by the Connector (Security Credentials menu).
  • In order to use X-NUCLEO-IKS01A1 instead of default X-NUCLEO-IKS01A2 comment out the IKS01A2 macro definition in main.cpp file.
  • Choose NUCLEO-F429ZI as a target either from online compiler or from CLI, compile and flash.
  • Setup and connect a NUCLEO-F429ZI + X-NUCLEO-IDS01A4 6LowPan border router as explained here
  • Open a serial terminal (params 115200N1) and wait that the client is connected to the mbed Connector via the border router.
  • As soon as the client is connected it will start acquiring and pushing the environmental (pressure, temperature and humidity) data to the cloud.

Note: environmental data are expressed using IPSO representation based on OMA LWM2M standard.

Committer:
nikapov
Date:
Thu Jan 25 18:00:04 2018 +0100
Revision:
0:694e888fd1b5
First release.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nikapov 0:694e888fd1b5 1 # Getting started with mbed Client on mbed OS
nikapov 0:694e888fd1b5 2
nikapov 0:694e888fd1b5 3 This is the mbed Client example for mbed OS (we also have one for [Linux](https://github.com/ARMmbed/mbed-client-linux-example)). It demonstrates how to register a device with mbed Device Connector, how to read and write values, and how to deregister. If you are unfamiliar with mbed Device Connector, we recommend that you read [the introduction to the data model](https://docs.mbed.com/docs/mbed-device-connector-web-interfaces/en/latest/#the-mbed-device-connector-data-model) first.
nikapov 0:694e888fd1b5 4
nikapov 0:694e888fd1b5 5 ## Required software
nikapov 0:694e888fd1b5 6
nikapov 0:694e888fd1b5 7 * [ARM mbed account](https://developer.mbed.org/account/login/?next=/).
nikapov 0:694e888fd1b5 8 * [mbed-cli](https://github.com/ARMmbed/mbed-cli) - to build the example programs. To learn how to build mbed OS applications with mbed-cli, see [the user guide](https://github.com/ARMmbed/mbed-cli/blob/master/README.md).
nikapov 0:694e888fd1b5 9 * [Serial port monitor](https://developer.mbed.org/handbook/SerialPC#host-interface-and-terminal-applications).
nikapov 0:694e888fd1b5 10
nikapov 0:694e888fd1b5 11 The application:
nikapov 0:694e888fd1b5 12
nikapov 0:694e888fd1b5 13 * Connects to network with WiFi, Ethernet, 6LoWPAN ND or Thread connection.
nikapov 0:694e888fd1b5 14 * Registers with mbed Device Connector.
nikapov 0:694e888fd1b5 15 * Gives mbed Device Connector access to its resources (read and write).
nikapov 0:694e888fd1b5 16 * Records the number of clicks on the device’s button and sends the number to mbed Device Connector.
nikapov 0:694e888fd1b5 17 * Lets you control the blink pattern of the LED on the device (through mbed Device Connector).
nikapov 0:694e888fd1b5 18
nikapov 0:694e888fd1b5 19 ## Application setup
nikapov 0:694e888fd1b5 20
nikapov 0:694e888fd1b5 21 To configure the example application:
nikapov 0:694e888fd1b5 22
nikapov 0:694e888fd1b5 23 1. [Select network and board](#select-network-and-board)
nikapov 0:694e888fd1b5 24 * [Ethernet](#ethernet)
nikapov 0:694e888fd1b5 25 * [Mesh (6LoWPAN and Thread)](#mesh)
nikapov 0:694e888fd1b5 26 * [WiFi](#wifi)
nikapov 0:694e888fd1b5 27 * [Non listed boards](#non-listed-board-support)
nikapov 0:694e888fd1b5 28 1. [Set the client credentials](#client-credentials).
nikapov 0:694e888fd1b5 29 1. [Set up an IP address](#ip-address-setup). This step is optional.
nikapov 0:694e888fd1b5 30 1. [Change the socket type](#changing-the-socket-type). This step is optional.
nikapov 0:694e888fd1b5 31
nikapov 0:694e888fd1b5 32 ### Select network and board
nikapov 0:694e888fd1b5 33
nikapov 0:694e888fd1b5 34 This example supports following hardware-network combinations:
nikapov 0:694e888fd1b5 35
nikapov 0:694e888fd1b5 36 ### Ethernet
nikapov 0:694e888fd1b5 37
nikapov 0:694e888fd1b5 38 #### Supported boards
nikapov 0:694e888fd1b5 39
nikapov 0:694e888fd1b5 40 * K64F
nikapov 0:694e888fd1b5 41 * NUCLEO_F429ZI
nikapov 0:694e888fd1b5 42 * UBLOX_EVK_ODIN_W2 (use the supplied `configs/eth_v4.json`)
nikapov 0:694e888fd1b5 43
nikapov 0:694e888fd1b5 44 For running the example application using Ethernet, you need:
nikapov 0:694e888fd1b5 45
nikapov 0:694e888fd1b5 46 - An Ethernet cable.
nikapov 0:694e888fd1b5 47 - An Ethernet connection to the internet.
nikapov 0:694e888fd1b5 48
nikapov 0:694e888fd1b5 49 ### Mesh
nikapov 0:694e888fd1b5 50
nikapov 0:694e888fd1b5 51 There are example settings under the configs directory, which provide the easiest way to start with the applications.
nikapov 0:694e888fd1b5 52 The [mbed-mesh-api](https://github.com/ARMmbed/mbed-os/tree/master/features/nanostack/FEATURE_NANOSTACK/mbed-mesh-api/mbed_lib.json)
nikapov 0:694e888fd1b5 53 defines the defaults settings for applications. The most relevant parameters are described in more detail in the following sections.
nikapov 0:694e888fd1b5 54
nikapov 0:694e888fd1b5 55 #### Supported boards
nikapov 0:694e888fd1b5 56
nikapov 0:694e888fd1b5 57 * K64F + NXP MCR20 15.4 shield (mesh `NANOSTACK_FULL` mode)
nikapov 0:694e888fd1b5 58 * [NUCLEO_F429ZI](https://developer.mbed.org/platforms/ST-Nucleo-F429ZI/) + [X-NUCLEO-IDS01A4](https://github.com/ARMmbed/stm-spirit1-rf-driver) Spirit1 6LoWPAN expansion board (mesh `LOWPAN_ROUTER` mode)
nikapov 0:694e888fd1b5 59 * NUCLEO_F429ZI + ATMEL AT233 15.4 shield (mesh `LOWPAN_ROUTER` mode)
nikapov 0:694e888fd1b5 60 * [Supported combinations of board and shields](#supported-combinations-of-board-and-shields)
nikapov 0:694e888fd1b5 61
nikapov 0:694e888fd1b5 62 First, you need to select the RF driver to be used by the 6LoWPAN/Thread stack.
nikapov 0:694e888fd1b5 63
nikapov 0:694e888fd1b5 64 This example supports these shields:
nikapov 0:694e888fd1b5 65
nikapov 0:694e888fd1b5 66 * [AT86RF233/212B](https://github.com/ARMmbed/atmel-rf-driver)
nikapov 0:694e888fd1b5 67 * [NXP-MCR20a](https://github.com/ARMmbed/mcr20a-rf-driver)
nikapov 0:694e888fd1b5 68 * [X-NUCLEO-IDS01A4](https://github.com/ARMmbed/stm-spirit1-rf-driver) (*a.k.a.* Spirit1) radio shields. Check instructions for compilation [here](#compile-configuration-for-spirit1)
nikapov 0:694e888fd1b5 69
nikapov 0:694e888fd1b5 70 To select the radio shield make sure that the `mbed_app.json` file points to the correct radio driver type:
nikapov 0:694e888fd1b5 71
nikapov 0:694e888fd1b5 72 ```json
nikapov 0:694e888fd1b5 73 "mesh_radio_type": {
nikapov 0:694e888fd1b5 74 "help": "options are ATMEL, MCR20, SPIRIT1",
nikapov 0:694e888fd1b5 75 "value": "ATMEL"
nikapov 0:694e888fd1b5 76 },
nikapov 0:694e888fd1b5 77 ```
nikapov 0:694e888fd1b5 78
nikapov 0:694e888fd1b5 79 Then you need to enable ARM IPv6/6LoWPAN stack. Edit the `mbed_app.json` file to add `NANOSTACK` feature with the particular configuration of the stack:
nikapov 0:694e888fd1b5 80
nikapov 0:694e888fd1b5 81 ```
nikapov 0:694e888fd1b5 82 "target.features_add": ["NANOSTACK", "LOWPAN_ROUTER", "COMMON_PAL"],
nikapov 0:694e888fd1b5 83 ```
nikapov 0:694e888fd1b5 84
nikapov 0:694e888fd1b5 85 If your connection type is `MESH_THREAD` then you may want to use the `THREAD_ROUTER` configuration:
nikapov 0:694e888fd1b5 86
nikapov 0:694e888fd1b5 87 ```
nikapov 0:694e888fd1b5 88 "target.features_add": ["NANOSTACK", "THREAD_ROUTER", "COMMON_PAL"],
nikapov 0:694e888fd1b5 89 ```
nikapov 0:694e888fd1b5 90
nikapov 0:694e888fd1b5 91 Since 6LoWPAN ND and Thread use IPv6 for connectivity, you need to verify first that you have a working IPv6 connection.
nikapov 0:694e888fd1b5 92 To do that, ping the Connector IPv6 address `2607:f0d0:2601:52::20` from your network.
nikapov 0:694e888fd1b5 93
nikapov 0:694e888fd1b5 94 #### Compile configuration for Spirit1
nikapov 0:694e888fd1b5 95
nikapov 0:694e888fd1b5 96 <span class="notes">**Note:** In case you want to use the STM Spirit1 Sub-1 GHz RF expansion board (X-NUCLEO-IDS01A4), you also need to configure its MAC address in the `mbed_app.json` file, for example:</span>
nikapov 0:694e888fd1b5 97
nikapov 0:694e888fd1b5 98 ```json
nikapov 0:694e888fd1b5 99 "target_overrides": {
nikapov 0:694e888fd1b5 100 "*": {
nikapov 0:694e888fd1b5 101 "spirit1.mac-address": "{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7}"
nikapov 0:694e888fd1b5 102 },
nikapov 0:694e888fd1b5 103 }
nikapov 0:694e888fd1b5 104 ```
nikapov 0:694e888fd1b5 105
nikapov 0:694e888fd1b5 106 #### Channel settings
nikapov 0:694e888fd1b5 107
nikapov 0:694e888fd1b5 108 The default 2.4GHz channel settings are already defined by the [mbed-mesh-api](https://github.com/ARMmbed/mbed-os/tree/master/features/nanostack/FEATURE_NANOSTACK/mbed-mesh-api) to match the Border Router settings. The application can override these settings by adding them to the `.json` file. For example:
nikapov 0:694e888fd1b5 109
nikapov 0:694e888fd1b5 110 ```json
nikapov 0:694e888fd1b5 111 "target_overrides": {
nikapov 0:694e888fd1b5 112 "*": {
nikapov 0:694e888fd1b5 113 "mbed-mesh-api.6lowpan-nd-channel-page": 0,
nikapov 0:694e888fd1b5 114 "mbed-mesh-api.6lowpan-nd-channel": 12,
nikapov 0:694e888fd1b5 115 "mbed-mesh-api.thread-config-channel-page": 0,
nikapov 0:694e888fd1b5 116 "mbed-mesh-api.thread-config-channel": 22
nikapov 0:694e888fd1b5 117 }
nikapov 0:694e888fd1b5 118 }
nikapov 0:694e888fd1b5 119 ```
nikapov 0:694e888fd1b5 120
nikapov 0:694e888fd1b5 121 For sub-GHz shields ([Spirit1](https://github.com/ARMmbed/stm-spirit1-rf-driver) or AT86RF212B) use the following overrides, **6LoWPAN ND only**:
nikapov 0:694e888fd1b5 122
nikapov 0:694e888fd1b5 123 ```json
nikapov 0:694e888fd1b5 124 "mbed-mesh-api.6lowpan-nd-channel-page": 2,
nikapov 0:694e888fd1b5 125 "mbed-mesh-api.6lowpan-nd-channel": 1
nikapov 0:694e888fd1b5 126 ```
nikapov 0:694e888fd1b5 127
nikapov 0:694e888fd1b5 128 For more information about the radio shields, see [the related documentation](docs/radio_module_identify.md).
nikapov 0:694e888fd1b5 129
nikapov 0:694e888fd1b5 130 =======
nikapov 0:694e888fd1b5 131 #### Supported combinations of board and shields
nikapov 0:694e888fd1b5 132
nikapov 0:694e888fd1b5 133 See Mesh-minimal's [Notes on different hardware](https://github.com/ARMmbed/mbed-os-example-mesh-minimal/blob/master/Hardware.md) for known combinations of development boards and RF shields that have been tested with mesh networking stack.
nikapov 0:694e888fd1b5 134
nikapov 0:694e888fd1b5 135 #### Border router
nikapov 0:694e888fd1b5 136
nikapov 0:694e888fd1b5 137 There are two options for border router.
nikapov 0:694e888fd1b5 138
nikapov 0:694e888fd1b5 139 ##### Nanostack-border-router
nikapov 0:694e888fd1b5 140
nikapov 0:694e888fd1b5 141 You can configure and build the [nanostack-border-router](https://github.com/ARMmbed/nanostack-border-router) for the 6LoWPAN ND or Thread mode.
nikapov 0:694e888fd1b5 142
nikapov 0:694e888fd1b5 143 #### Thread-specific settings
nikapov 0:694e888fd1b5 144
nikapov 0:694e888fd1b5 145 With Thread, you can change the operating mode of the client from the default router mode to a sleepy end device by adding the following override to the `mbed_app.json` file:
nikapov 0:694e888fd1b5 146
nikapov 0:694e888fd1b5 147 ```json
nikapov 0:694e888fd1b5 148 "mbed-mesh-api.thread-device-type": "MESH_DEVICE_TYPE_THREAD_SLEEPY_END_DEVICE"
nikapov 0:694e888fd1b5 149 ```
nikapov 0:694e888fd1b5 150
nikapov 0:694e888fd1b5 151 ## WiFi
nikapov 0:694e888fd1b5 152
nikapov 0:694e888fd1b5 153 #### Supported boards
nikapov 0:694e888fd1b5 154
nikapov 0:694e888fd1b5 155 * UBLOX_EVK_ODIN_W2. Check instructions for compilation [here](#compile-configuration-for-odin-wifi).
nikapov 0:694e888fd1b5 156 * K64F + GROVE SEEED shield using [ESP8266](https://en.wikipedia.org/wiki/ESP8266) WiFi module.
nikapov 0:694e888fd1b5 157 * NUCLEO_F429ZI + GROVE SEEED shield using [ESP8266](https://en.wikipedia.org/wiki/ESP8266) WiFi module.
nikapov 0:694e888fd1b5 158
nikapov 0:694e888fd1b5 159 To run this application using ESP8266 WiFi Interface, you need:
nikapov 0:694e888fd1b5 160
nikapov 0:694e888fd1b5 161 1. An [ESP8266](https://en.wikipedia.org/wiki/ESP8266) WiFi module.
nikapov 0:694e888fd1b5 162 1. Updated [Espressif Firmware](https://developer.mbed.org/teams/ESP8266/wiki/Firmware-Update).
nikapov 0:694e888fd1b5 163 1. Mount the WiFi module onto [K64F Grove Shield v2](https://developer.mbed.org/platforms/FRDM-K64F/#supported-seeed-studio-grove-extension).
nikapov 0:694e888fd1b5 164 1. Attach the shield on your board.
nikapov 0:694e888fd1b5 165 1. In the `mbed_app.json` file, change:
nikapov 0:694e888fd1b5 166
nikapov 0:694e888fd1b5 167 ```json
nikapov 0:694e888fd1b5 168 "network-interface": {
nikapov 0:694e888fd1b5 169 "help": "options are ETHERNET,WIFI,MESH_LOWPAN_ND,MESH_THREAD.",
nikapov 0:694e888fd1b5 170 "value": "WIFI"
nikapov 0:694e888fd1b5 171 }
nikapov 0:694e888fd1b5 172 ```
nikapov 0:694e888fd1b5 173
nikapov 0:694e888fd1b5 174 Provide your WiFi SSID and password here and leave `\"` in the beginning and end of your SSID and password (as shown in the example below). Otherwise, the example cannot pick up the SSID and password in correct format.
nikapov 0:694e888fd1b5 175
nikapov 0:694e888fd1b5 176 ```json
nikapov 0:694e888fd1b5 177 "wifi-ssid": {
nikapov 0:694e888fd1b5 178 "help": "WiFi SSID",
nikapov 0:694e888fd1b5 179 "value": "\"SSID\""
nikapov 0:694e888fd1b5 180 },
nikapov 0:694e888fd1b5 181 "wifi-password": {
nikapov 0:694e888fd1b5 182 "help": "WiFi Password",
nikapov 0:694e888fd1b5 183 "value": "\"Password\""
nikapov 0:694e888fd1b5 184 }
nikapov 0:694e888fd1b5 185 ```
nikapov 0:694e888fd1b5 186
nikapov 0:694e888fd1b5 187 <span class="notes">**Note:** Some devices do not support the Grove Shield or use the primary UART for USB communication. On such devices, modify the `mbed_app.json` to use the serial pins connected to the ESP8266.</span>
nikapov 0:694e888fd1b5 188
nikapov 0:694e888fd1b5 189 For example, NUCLEO_F401RE requires a different serial connection:
nikapov 0:694e888fd1b5 190
nikapov 0:694e888fd1b5 191 ```json
nikapov 0:694e888fd1b5 192 "wifi-tx": {
nikapov 0:694e888fd1b5 193 "help": "TX pin for serial connection to external device",
nikapov 0:694e888fd1b5 194 "value": "PA_11"
nikapov 0:694e888fd1b5 195 },
nikapov 0:694e888fd1b5 196 "wifi-rx": {
nikapov 0:694e888fd1b5 197 "help": "RX pin for serial connection to external device",
nikapov 0:694e888fd1b5 198 "value": "PA_12"
nikapov 0:694e888fd1b5 199 }
nikapov 0:694e888fd1b5 200 ```
nikapov 0:694e888fd1b5 201
nikapov 0:694e888fd1b5 202 #### Compile configuration for ODIN WiFi
nikapov 0:694e888fd1b5 203
nikapov 0:694e888fd1b5 204 To compile ODIN WiFi configuration, you need to tell mbed NOT to compile the related files. To do that, set up a `.mbedignore` file. An example file is available in the `configs` folder.
nikapov 0:694e888fd1b5 205
nikapov 0:694e888fd1b5 206 This should resolve the issue:
nikapov 0:694e888fd1b5 207
nikapov 0:694e888fd1b5 208 ```
nikapov 0:694e888fd1b5 209 cp configs/eth-wifi-mbedignore ./.mbedignore
nikapov 0:694e888fd1b5 210 ```
nikapov 0:694e888fd1b5 211
nikapov 0:694e888fd1b5 212 ### Non listed board support
nikapov 0:694e888fd1b5 213
nikapov 0:694e888fd1b5 214 Apart from the listed configurations, this example can work on other mbed OS supported hardware boards which support any of the given network interface including Ethernet, WiFi, Mesh (6LoWPAN) or Thread, provided the configuration fulfills condition that the target hardware has TLS entropy implemented for it. On devices where hardware entropy is not present, TLS is disabled by default. This would result in compile time failures or linking failures.
nikapov 0:694e888fd1b5 215
nikapov 0:694e888fd1b5 216 To learn why entropy is required, read the [TLS Porting guide](https://docs.mbed.com/docs/mbed-os-handbook/en/5.2/advanced/tls_porting/).
nikapov 0:694e888fd1b5 217
nikapov 0:694e888fd1b5 218 Also, the complete example configuration of mbed Client, the selected network interface and mbed OS components must fit into hardware's given memory size (Flash size and RAM size).
nikapov 0:694e888fd1b5 219
nikapov 0:694e888fd1b5 220 <span class="notes">**Note:** On non-K64F boards, there is no unregistration functionality and button presses are simulated through timer ticks incrementing every 15 seconds.</span>
nikapov 0:694e888fd1b5 221
nikapov 0:694e888fd1b5 222 <span class="notes">**Note:** To see how different targets are built please see the supplied `build_all.sh script`.</span>
nikapov 0:694e888fd1b5 223
nikapov 0:694e888fd1b5 224
nikapov 0:694e888fd1b5 225 ### Client credentials
nikapov 0:694e888fd1b5 226
nikapov 0:694e888fd1b5 227 To register the application with the mbed Device Connector service, you need to create and set the client side certificate.
nikapov 0:694e888fd1b5 228
nikapov 0:694e888fd1b5 229 1. Go to [mbed Device Connector](https://connector.mbed.com) and log in with your mbed account.
nikapov 0:694e888fd1b5 230 1. On mbed Device Connector, go to [My Devices > Security credentials](https://connector.mbed.com/#credentials) and click the **Get my device security credentials** to get new credentials for your device.
nikapov 0:694e888fd1b5 231 1. Replace the contents in the `security.h` file of this project's folder with the content copied above.
nikapov 0:694e888fd1b5 232
nikapov 0:694e888fd1b5 233 ### IP address setup
nikapov 0:694e888fd1b5 234
nikapov 0:694e888fd1b5 235 This example uses IPv4 to communicate with the [mbed Device Connector Server](https://api.connector.mbed.com) except for 6LoWPAN ND and Thread. However, you can easily change it to IPv6 by changing the `mbed_app.json` you make:
nikapov 0:694e888fd1b5 236
nikapov 0:694e888fd1b5 237 ```
nikapov 0:694e888fd1b5 238 "target_overrides": {
nikapov 0:694e888fd1b5 239 "*": {
nikapov 0:694e888fd1b5 240 "target.features_add": ["LWIP", "NANOSTACK", "COMMON_PAL"],
nikapov 0:694e888fd1b5 241 "lwip.ipv4-enabled": false,
nikapov 0:694e888fd1b5 242 "lwip.ipv6-enabled": true,
nikapov 0:694e888fd1b5 243 "mbed-trace.enable": 0
nikapov 0:694e888fd1b5 244 }
nikapov 0:694e888fd1b5 245 ```
nikapov 0:694e888fd1b5 246
nikapov 0:694e888fd1b5 247 by modifying the `ipv4-enabled` or `ipv6-enabled` to `true/false`. Only one should be true.
nikapov 0:694e888fd1b5 248
nikapov 0:694e888fd1b5 249 The example program should automatically get an IP address from the router when connected over Ethernet or WiFi.
nikapov 0:694e888fd1b5 250
nikapov 0:694e888fd1b5 251 If your network does not have DHCP enabled, you have to manually assign a static IP address to the board. We recommend having DHCP enabled to make everything run smoothly.
nikapov 0:694e888fd1b5 252
nikapov 0:694e888fd1b5 253 ### Changing the socket type
nikapov 0:694e888fd1b5 254
nikapov 0:694e888fd1b5 255 Your device can connect to mbed Device Connector via UDP or TCP binding mode. The default and only allowed value is UDP for Thread and 6LoWPAN. TCP is the default for other connections. The binding mode cannot be changed in 6LoWPAN ND or Thread mode.
nikapov 0:694e888fd1b5 256
nikapov 0:694e888fd1b5 257 To change the binding mode:
nikapov 0:694e888fd1b5 258
nikapov 0:694e888fd1b5 259 1. In the `simpleclient.h` file, find the parameter `SOCKET_MODE`. The default is `M2MInterface::UDP` for mesh and `M2MInterface::TCP` for others.
nikapov 0:694e888fd1b5 260 1. To switch to UDP, change it to `M2MInterface::UDP`.
nikapov 0:694e888fd1b5 261 1. Rebuild and flash the application.
nikapov 0:694e888fd1b5 262
nikapov 0:694e888fd1b5 263 <span class="tips">**Tip:** The instructions in this document remain the same, irrespective of the socket mode you select.</span>
nikapov 0:694e888fd1b5 264
nikapov 0:694e888fd1b5 265 Possible socket types per connection:
nikapov 0:694e888fd1b5 266
nikapov 0:694e888fd1b5 267 | Network interface | UDP | TCP |
nikapov 0:694e888fd1b5 268 | ------------------------------|:-----:|:-----:|
nikapov 0:694e888fd1b5 269 | Ethernet (IPv4) | X | X |
nikapov 0:694e888fd1b5 270 | Ethernet (IPv6) | X | |
nikapov 0:694e888fd1b5 271 | Wifi (IPv4) | X | X |
nikapov 0:694e888fd1b5 272 | Wifi (IPv6) - Not supported | | |
nikapov 0:694e888fd1b5 273 | 6LoWPAN/Thread (IPv6) | X | |
nikapov 0:694e888fd1b5 274
nikapov 0:694e888fd1b5 275 ## Building the example
nikapov 0:694e888fd1b5 276
nikapov 0:694e888fd1b5 277 To build the example using mbed CLI:
nikapov 0:694e888fd1b5 278
nikapov 0:694e888fd1b5 279 1. Open a command line tool and navigate to the project’s directory.
nikapov 0:694e888fd1b5 280
nikapov 0:694e888fd1b5 281 2. Import this example:
nikapov 0:694e888fd1b5 282
nikapov 0:694e888fd1b5 283 ```
nikapov 0:694e888fd1b5 284 mbed import mbed-os-example-client
nikapov 0:694e888fd1b5 285 ```
nikapov 0:694e888fd1b5 286
nikapov 0:694e888fd1b5 287 3. To build the application, select the hardware board and build the toolchain using the command:
nikapov 0:694e888fd1b5 288
nikapov 0:694e888fd1b5 289 (Specify the config file in the build command, for example for 6LoWPAN)
nikapov 0:694e888fd1b5 290
nikapov 0:694e888fd1b5 291 ```
nikapov 0:694e888fd1b5 292 mbed compile -m K64F -t GCC_ARM -c --app-config configs/6lowpan_Atmel_RF.json
nikapov 0:694e888fd1b5 293 ```
nikapov 0:694e888fd1b5 294
nikapov 0:694e888fd1b5 295 If you are using either of the following configurations remember to copy .mbedignore as well:
nikapov 0:694e888fd1b5 296
nikapov 0:694e888fd1b5 297 ```
nikapov 0:694e888fd1b5 298 configs/eth_*
nikapov 0:694e888fd1b5 299 configs/wifi_*
nikapov 0:694e888fd1b5 300 ```
nikapov 0:694e888fd1b5 301
nikapov 0:694e888fd1b5 302 ```
nikapov 0:694e888fd1b5 303 cp configs/eth-wifi-mbedignore ./.mbedignore
nikapov 0:694e888fd1b5 304 ```
nikapov 0:694e888fd1b5 305
nikapov 0:694e888fd1b5 306 mbed CLI builds a binary file under the project’s `BUILD/` directory.
nikapov 0:694e888fd1b5 307
nikapov 0:694e888fd1b5 308 4. Plug the Ethernet cable into the board if you are using Ethernet mode.
nikapov 0:694e888fd1b5 309
nikapov 0:694e888fd1b5 310 5. If you are using 6LoWPAN ND or Thread mode, connect and power on the Border Router first.
nikapov 0:694e888fd1b5 311
nikapov 0:694e888fd1b5 312 6. Plug the micro-USB cable into the **OpenSDA** port. The board is listed as a mass-storage device.
nikapov 0:694e888fd1b5 313
nikapov 0:694e888fd1b5 314 7. Drag the binary `BUILD/K64F/GCC_ARM/mbed-os-example-client.bin` to the board to flash the application.
nikapov 0:694e888fd1b5 315
nikapov 0:694e888fd1b5 316 8. The board is automatically programmed with the new binary. A flashing LED on it indicates that it is still working. When the LED stops blinking, the board is ready to work.
nikapov 0:694e888fd1b5 317
nikapov 0:694e888fd1b5 318 9. Press the **Reset** button on the board to run the program.
nikapov 0:694e888fd1b5 319
nikapov 0:694e888fd1b5 320 10. For verification, continue to the [Monitoring the application](#monitoring-the-application) chapter.
nikapov 0:694e888fd1b5 321
nikapov 0:694e888fd1b5 322 **To build the example using the Online IDE:**
nikapov 0:694e888fd1b5 323
nikapov 0:694e888fd1b5 324 Import this repository in the Online IDE and continue from step 3 onwards.
nikapov 0:694e888fd1b5 325
nikapov 0:694e888fd1b5 326 ## Monitoring the application
nikapov 0:694e888fd1b5 327
nikapov 0:694e888fd1b5 328 The application prints debug messages over the serial port, so you can monitor its activity with a serial port monitor. The application uses baud rate 115200.
nikapov 0:694e888fd1b5 329
nikapov 0:694e888fd1b5 330 <span class="notes">**Note:** Instructions to set this up are located [here](https://developer.mbed.org/handbook/SerialPC#host-interface-and-terminal-applications).</span>
nikapov 0:694e888fd1b5 331
nikapov 0:694e888fd1b5 332 After connecting, you should see messages about connecting to mbed Device Connector:
nikapov 0:694e888fd1b5 333
nikapov 0:694e888fd1b5 334 ```
nikapov 0:694e888fd1b5 335 Starting mbed Client example
nikapov 0:694e888fd1b5 336 [EasyConnect] IPv4 mode
nikapov 0:694e888fd1b5 337 [EasyConnect] Using Ethernet
nikapov 0:694e888fd1b5 338 [EasyConnect] Connected to Network successfully
nikapov 0:694e888fd1b5 339 [EasyConnect] IP address 192.168.8.110
nikapov 0:694e888fd1b5 340 [EasyConnect] MAC address 5c:cf:7f:86:de:bf
nikapov 0:694e888fd1b5 341
nikapov 0:694e888fd1b5 342 SOCKET_MODE : TCP
nikapov 0:694e888fd1b5 343
nikapov 0:694e888fd1b5 344 Connecting to coap://api.connector.mbed.com:5684
nikapov 0:694e888fd1b5 345
nikapov 0:694e888fd1b5 346 Registered object succesfully!
nikapov 0:694e888fd1b5 347 ```
nikapov 0:694e888fd1b5 348
nikapov 0:694e888fd1b5 349 <span class="notes">**Note:** Device name is the endpoint name you will need later on when [testing the application](https://github.com/ARMmbed/mbed-os-example-client#testing-the-application).</span>
nikapov 0:694e888fd1b5 350
nikapov 0:694e888fd1b5 351 When you press the **SW2** button on your board you should see messages about the value changes:
nikapov 0:694e888fd1b5 352
nikapov 0:694e888fd1b5 353 ```
nikapov 0:694e888fd1b5 354 handle_button_click, new value of counter is 1
nikapov 0:694e888fd1b5 355 ```
nikapov 0:694e888fd1b5 356
nikapov 0:694e888fd1b5 357 ## Testing the application
nikapov 0:694e888fd1b5 358
nikapov 0:694e888fd1b5 359 1. Flash the application.
nikapov 0:694e888fd1b5 360 2. Verify that the registration succeeded. You should see `Registered object successfully!` printed to the serial port.
nikapov 0:694e888fd1b5 361 3. On mbed Device Connector, go to [My devices > Connected devices](https://connector.mbed.com/#endpoints). Your device should be listed here.
nikapov 0:694e888fd1b5 362 4. Press the **SW2** button on the device a number of times (make a note of how many times you did that).
nikapov 0:694e888fd1b5 363 5. Go to [Device Connector > API Console](https://connector.mbed.com/#console).
nikapov 0:694e888fd1b5 364 6. Click the **Endpoint directory lookups** drop down menu.
nikapov 0:694e888fd1b5 365 ![](/docs/img/ep_lookup.PNG)
nikapov 0:694e888fd1b5 366 7. In the menu, click **GET** next to **Endpoint's resource representation**. Select your _endpoint_ and _resource-path_. For example, the _endpoint_ is the identifier of your endpoint that can be found in the `security.h` file as `MBED_ENDPOINT_NAME`. Select `3200/0/5501`as a resource path and click **TEST API**.
nikapov 0:694e888fd1b5 367 8. The number of times you pressed **SW2** is shown.
nikapov 0:694e888fd1b5 368 9. Press the **SW3** button to unregister from mbed Device Connector. You should see `Unregistered Object Successfully` printed to the serial port and the LED starts blinking. This will also stop your application. Press the **Reset** button to run the program again.
nikapov 0:694e888fd1b5 369
nikapov 0:694e888fd1b5 370 <span class="notes">**Note:** On non-K64F boards, there is no unregistration functionality and button presses are simulated through timer ticks incrementing every 15 seconds.</span>
nikapov 0:694e888fd1b5 371
nikapov 0:694e888fd1b5 372 ![SW2 pressed five times, as shown by the API Console](clicks.png)
nikapov 0:694e888fd1b5 373
nikapov 0:694e888fd1b5 374 <span class="tips">**Tip:** If you get an error, for example `Server Response: 410 (Gone)`, clear your browser's cache, log out, and log back in.</span>
nikapov 0:694e888fd1b5 375
nikapov 0:694e888fd1b5 376 <span class="notes">**Note:** Only GET methods can be executed through [Device Connector > API Console](https://connector.mbed.com/#console). For other methods, check the [mbed Device Connector Quick Start](https://github.com/ARMmbed/mbed-connector-api-node-quickstart).
nikapov 0:694e888fd1b5 377
nikapov 0:694e888fd1b5 378 ### Application resources
nikapov 0:694e888fd1b5 379
nikapov 0:694e888fd1b5 380 The application exposes three [resources](https://docs.mbed.com/docs/mbed-device-connector-web-interfaces/en/latest/#the-mbed-device-connector-data-model):
nikapov 0:694e888fd1b5 381
nikapov 0:694e888fd1b5 382 1. `3200/0/5501`. Number of presses of **SW2** (GET).
nikapov 0:694e888fd1b5 383 2. `3201/0/5850`. Blink function, blinks **LED1** when executed (POST).
nikapov 0:694e888fd1b5 384 3. `3201/0/5853`. Blink pattern, used by the blink function to determine how to blink. In the format of `1000:500:1000:500:1000:500` (PUT).
nikapov 0:694e888fd1b5 385
nikapov 0:694e888fd1b5 386 To learn how to get notifications when resource 1 changes, or how to use resources 2 and 3, read the [mbed Device Connector Quick Start](https://github.com/ARMmbed/mbed-connector-api-node-quickstart).
nikapov 0:694e888fd1b5 387
nikapov 0:694e888fd1b5 388 ## Known issues
nikapov 0:694e888fd1b5 389
nikapov 0:694e888fd1b5 390 ### mbed OS 5.4
nikapov 0:694e888fd1b5 391
nikapov 0:694e888fd1b5 392 * [UBLOX_EVK_ODIN_W2]: This example is not compiling with IAR. See [#194](https://github.com/ARMmbed/mbed-os-example-client/issues/194)
nikapov 0:694e888fd1b5 393 * [NUCLEO_F429ZI]: This example is not compiling with IAR. See [#194](https://github.com/ARMmbed/mbed-os-example-client/issues/194)
nikapov 0:694e888fd1b5 394
nikapov 0:694e888fd1b5 395 Fix for those issues coming via; [mbed-os PR 3920] (https://github.com/ARMmbed/mbed-os/pull/3920)