An mbed BLE-to-Cloud Gateway using Nucleo-F429ZI+X-Nucleo-IDB05A1 or Nucleo-L476RG+X-Nucleo-IDB05A1+X-Nucleo-IDW01M1.

Information

Nucleo- F429ZI configuration requires two hardware patches:

  1. on Nucleo-F429ZI open SB121 and close SB122
  2. on X-Nucleo-IDB05A1 move R4 to R6

The BLE client searches for and connects to a MotEnv node.

Committer:
nikapov
Date:
Thu Oct 12 13:58:45 2017 +0200
Revision:
0:c7083010ae49
Clone of https://github.com/ARMmbed/mbed-os-example-client/#0a4d843a59eee05e678cc163146d533c80c0b1d7

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nikapov 0:c7083010ae49 1 # Getting started with mbed Client on mbed OS
nikapov 0:c7083010ae49 2
nikapov 0:c7083010ae49 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:c7083010ae49 4
nikapov 0:c7083010ae49 5 ## Required software
nikapov 0:c7083010ae49 6
nikapov 0:c7083010ae49 7 * [ARM mbed account](https://developer.mbed.org/account/login/?next=/).
nikapov 0:c7083010ae49 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:c7083010ae49 9 * [Serial port monitor](https://developer.mbed.org/handbook/SerialPC#host-interface-and-terminal-applications).
nikapov 0:c7083010ae49 10
nikapov 0:c7083010ae49 11 The application:
nikapov 0:c7083010ae49 12
nikapov 0:c7083010ae49 13 * Connects to network with WiFi, Ethernet, 6LoWPAN ND or Thread connection.
nikapov 0:c7083010ae49 14 * Registers with mbed Device Connector.
nikapov 0:c7083010ae49 15 * Gives mbed Device Connector access to its resources (read and write).
nikapov 0:c7083010ae49 16 * Records the number of clicks on the device’s button and sends the number to mbed Device Connector.
nikapov 0:c7083010ae49 17 * Lets you control the blink pattern of the LED on the device (through mbed Device Connector).
nikapov 0:c7083010ae49 18
nikapov 0:c7083010ae49 19 ## Application setup
nikapov 0:c7083010ae49 20
nikapov 0:c7083010ae49 21 To configure the example application:
nikapov 0:c7083010ae49 22
nikapov 0:c7083010ae49 23 1. [Select network and board](#select-network-and-board)
nikapov 0:c7083010ae49 24 * [Ethernet](#ethernet)
nikapov 0:c7083010ae49 25 * [Mesh (6LoWPAN and Thread)](#mesh)
nikapov 0:c7083010ae49 26 * [WiFi](#wifi)
nikapov 0:c7083010ae49 27 * [Non listed boards](#non-listed-board-support)
nikapov 0:c7083010ae49 28 1. [Set the client credentials](#client-credentials).
nikapov 0:c7083010ae49 29 1. [Set up an IP address](#ip-address-setup). This step is optional.
nikapov 0:c7083010ae49 30 1. [Change the socket type](#changing-the-socket-type). This step is optional.
nikapov 0:c7083010ae49 31
nikapov 0:c7083010ae49 32 ### Select network and board
nikapov 0:c7083010ae49 33
nikapov 0:c7083010ae49 34 This example supports following hardware-network combinations:
nikapov 0:c7083010ae49 35
nikapov 0:c7083010ae49 36 ### Ethernet
nikapov 0:c7083010ae49 37
nikapov 0:c7083010ae49 38 #### Supported boards
nikapov 0:c7083010ae49 39
nikapov 0:c7083010ae49 40 * K64F
nikapov 0:c7083010ae49 41 * NUCLEO_F429ZI
nikapov 0:c7083010ae49 42 * UBLOX_EVK_ODIN_W2 (use the supplied `configs/eth_v4.json`)
nikapov 0:c7083010ae49 43
nikapov 0:c7083010ae49 44 For running the example application using Ethernet, you need:
nikapov 0:c7083010ae49 45
nikapov 0:c7083010ae49 46 - An Ethernet cable.
nikapov 0:c7083010ae49 47 - An Ethernet connection to the internet.
nikapov 0:c7083010ae49 48
nikapov 0:c7083010ae49 49 ### Mesh
nikapov 0:c7083010ae49 50
nikapov 0:c7083010ae49 51 There are example settings under the configs directory, which provide the easiest way to start with the applications.
nikapov 0:c7083010ae49 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:c7083010ae49 53 defines the defaults settings for applications. The most relevant parameters are described in more detail in the following sections.
nikapov 0:c7083010ae49 54
nikapov 0:c7083010ae49 55 #### Supported boards
nikapov 0:c7083010ae49 56
nikapov 0:c7083010ae49 57 * K64F + NXP MCR20 15.4 shield (mesh `NANOSTACK_FULL` mode)
nikapov 0:c7083010ae49 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:c7083010ae49 59 * NUCLEO_F429ZI + ATMEL AT233 15.4 shield (mesh `LOWPAN_ROUTER` mode)
nikapov 0:c7083010ae49 60 * [Supported combinations of board and shields](#supported-combinations-of-board-and-shields)
nikapov 0:c7083010ae49 61
nikapov 0:c7083010ae49 62 First, you need to select the RF driver to be used by the 6LoWPAN/Thread stack.
nikapov 0:c7083010ae49 63
nikapov 0:c7083010ae49 64 This example supports these shields:
nikapov 0:c7083010ae49 65
nikapov 0:c7083010ae49 66 * [AT86RF233/212B](https://github.com/ARMmbed/atmel-rf-driver)
nikapov 0:c7083010ae49 67 * [NXP-MCR20a](https://github.com/ARMmbed/mcr20a-rf-driver)
nikapov 0:c7083010ae49 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:c7083010ae49 69
nikapov 0:c7083010ae49 70 To select the radio shield make sure that the `mbed_app.json` file points to the correct radio driver type:
nikapov 0:c7083010ae49 71
nikapov 0:c7083010ae49 72 ```json
nikapov 0:c7083010ae49 73 "mesh_radio_type": {
nikapov 0:c7083010ae49 74 "help": "options are ATMEL, MCR20, SPIRIT1",
nikapov 0:c7083010ae49 75 "value": "ATMEL"
nikapov 0:c7083010ae49 76 },
nikapov 0:c7083010ae49 77 ```
nikapov 0:c7083010ae49 78
nikapov 0:c7083010ae49 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:c7083010ae49 80
nikapov 0:c7083010ae49 81 ```
nikapov 0:c7083010ae49 82 "target.features_add": ["NANOSTACK", "LOWPAN_ROUTER", "COMMON_PAL"],
nikapov 0:c7083010ae49 83 ```
nikapov 0:c7083010ae49 84
nikapov 0:c7083010ae49 85 If your connection type is `MESH_THREAD` then you may want to use the `THREAD_ROUTER` configuration:
nikapov 0:c7083010ae49 86
nikapov 0:c7083010ae49 87 ```
nikapov 0:c7083010ae49 88 "target.features_add": ["NANOSTACK", "THREAD_ROUTER", "COMMON_PAL"],
nikapov 0:c7083010ae49 89 ```
nikapov 0:c7083010ae49 90
nikapov 0:c7083010ae49 91 Since 6LoWPAN ND and Thread use IPv6 for connectivity, you need to verify first that you have a working IPv6 connection.
nikapov 0:c7083010ae49 92 To do that, ping the Connector IPv6 address `2607:f0d0:2601:52::20` from your network.
nikapov 0:c7083010ae49 93
nikapov 0:c7083010ae49 94 #### Compile configuration for Spirit1
nikapov 0:c7083010ae49 95
nikapov 0:c7083010ae49 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:c7083010ae49 97
nikapov 0:c7083010ae49 98 ```json
nikapov 0:c7083010ae49 99 "target_overrides": {
nikapov 0:c7083010ae49 100 "*": {
nikapov 0:c7083010ae49 101 "spirit1.mac-address": "{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7}"
nikapov 0:c7083010ae49 102 },
nikapov 0:c7083010ae49 103 }
nikapov 0:c7083010ae49 104 ```
nikapov 0:c7083010ae49 105
nikapov 0:c7083010ae49 106 #### Channel settings
nikapov 0:c7083010ae49 107
nikapov 0:c7083010ae49 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:c7083010ae49 109
nikapov 0:c7083010ae49 110 ```json
nikapov 0:c7083010ae49 111 "target_overrides": {
nikapov 0:c7083010ae49 112 "*": {
nikapov 0:c7083010ae49 113 "mbed-mesh-api.6lowpan-nd-channel-page": 0,
nikapov 0:c7083010ae49 114 "mbed-mesh-api.6lowpan-nd-channel": 12,
nikapov 0:c7083010ae49 115 "mbed-mesh-api.thread-config-channel-page": 0,
nikapov 0:c7083010ae49 116 "mbed-mesh-api.thread-config-channel": 22
nikapov 0:c7083010ae49 117 }
nikapov 0:c7083010ae49 118 }
nikapov 0:c7083010ae49 119 ```
nikapov 0:c7083010ae49 120
nikapov 0:c7083010ae49 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:c7083010ae49 122
nikapov 0:c7083010ae49 123 ```json
nikapov 0:c7083010ae49 124 "mbed-mesh-api.6lowpan-nd-channel-page": 2,
nikapov 0:c7083010ae49 125 "mbed-mesh-api.6lowpan-nd-channel": 1
nikapov 0:c7083010ae49 126 ```
nikapov 0:c7083010ae49 127
nikapov 0:c7083010ae49 128 For more information about the radio shields, see [the related documentation](docs/radio_module_identify.md).
nikapov 0:c7083010ae49 129
nikapov 0:c7083010ae49 130 =======
nikapov 0:c7083010ae49 131 #### Supported combinations of board and shields
nikapov 0:c7083010ae49 132
nikapov 0:c7083010ae49 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:c7083010ae49 134
nikapov 0:c7083010ae49 135 #### Border router
nikapov 0:c7083010ae49 136
nikapov 0:c7083010ae49 137 There are two options for border router.
nikapov 0:c7083010ae49 138
nikapov 0:c7083010ae49 139 ##### Nanostack-border-router
nikapov 0:c7083010ae49 140
nikapov 0:c7083010ae49 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:c7083010ae49 142
nikapov 0:c7083010ae49 143 #### Thread-specific settings
nikapov 0:c7083010ae49 144
nikapov 0:c7083010ae49 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:c7083010ae49 146
nikapov 0:c7083010ae49 147 ```json
nikapov 0:c7083010ae49 148 "mbed-mesh-api.thread-device-type": "MESH_DEVICE_TYPE_THREAD_SLEEPY_END_DEVICE"
nikapov 0:c7083010ae49 149 ```
nikapov 0:c7083010ae49 150
nikapov 0:c7083010ae49 151 ## WiFi
nikapov 0:c7083010ae49 152
nikapov 0:c7083010ae49 153 #### Supported boards
nikapov 0:c7083010ae49 154
nikapov 0:c7083010ae49 155 * UBLOX_EVK_ODIN_W2. Check instructions for compilation [here](#compile-configuration-for-odin-wifi).
nikapov 0:c7083010ae49 156 * K64F + GROVE SEEED shield using [ESP8266](https://en.wikipedia.org/wiki/ESP8266) WiFi module.
nikapov 0:c7083010ae49 157 * NUCLEO_F429ZI + GROVE SEEED shield using [ESP8266](https://en.wikipedia.org/wiki/ESP8266) WiFi module.
nikapov 0:c7083010ae49 158
nikapov 0:c7083010ae49 159 To run this application using ESP8266 WiFi Interface, you need:
nikapov 0:c7083010ae49 160
nikapov 0:c7083010ae49 161 1. An [ESP8266](https://en.wikipedia.org/wiki/ESP8266) WiFi module.
nikapov 0:c7083010ae49 162 1. Updated [Espressif Firmware](https://developer.mbed.org/teams/ESP8266/wiki/Firmware-Update).
nikapov 0:c7083010ae49 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:c7083010ae49 164 1. Attach the shield on your board.
nikapov 0:c7083010ae49 165 1. In the `mbed_app.json` file, change:
nikapov 0:c7083010ae49 166
nikapov 0:c7083010ae49 167 ```json
nikapov 0:c7083010ae49 168 "network-interface": {
nikapov 0:c7083010ae49 169 "help": "options are ETHERNET,WIFI,MESH_LOWPAN_ND,MESH_THREAD.",
nikapov 0:c7083010ae49 170 "value": "WIFI"
nikapov 0:c7083010ae49 171 }
nikapov 0:c7083010ae49 172 ```
nikapov 0:c7083010ae49 173
nikapov 0:c7083010ae49 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:c7083010ae49 175
nikapov 0:c7083010ae49 176 ```json
nikapov 0:c7083010ae49 177 "wifi-ssid": {
nikapov 0:c7083010ae49 178 "help": "WiFi SSID",
nikapov 0:c7083010ae49 179 "value": "\"SSID\""
nikapov 0:c7083010ae49 180 },
nikapov 0:c7083010ae49 181 "wifi-password": {
nikapov 0:c7083010ae49 182 "help": "WiFi Password",
nikapov 0:c7083010ae49 183 "value": "\"Password\""
nikapov 0:c7083010ae49 184 }
nikapov 0:c7083010ae49 185 ```
nikapov 0:c7083010ae49 186
nikapov 0:c7083010ae49 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:c7083010ae49 188
nikapov 0:c7083010ae49 189 For example, NUCLEO_F401RE requires a different serial connection:
nikapov 0:c7083010ae49 190
nikapov 0:c7083010ae49 191 ```json
nikapov 0:c7083010ae49 192 "wifi-tx": {
nikapov 0:c7083010ae49 193 "help": "TX pin for serial connection to external device",
nikapov 0:c7083010ae49 194 "value": "PA_11"
nikapov 0:c7083010ae49 195 },
nikapov 0:c7083010ae49 196 "wifi-rx": {
nikapov 0:c7083010ae49 197 "help": "RX pin for serial connection to external device",
nikapov 0:c7083010ae49 198 "value": "PA_12"
nikapov 0:c7083010ae49 199 }
nikapov 0:c7083010ae49 200 ```
nikapov 0:c7083010ae49 201
nikapov 0:c7083010ae49 202 #### Compile configuration for ODIN WiFi
nikapov 0:c7083010ae49 203
nikapov 0:c7083010ae49 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:c7083010ae49 205
nikapov 0:c7083010ae49 206 This should resolve the issue:
nikapov 0:c7083010ae49 207
nikapov 0:c7083010ae49 208 ```
nikapov 0:c7083010ae49 209 cp configs/eth-wifi-mbedignore ./.mbedignore
nikapov 0:c7083010ae49 210 ```
nikapov 0:c7083010ae49 211
nikapov 0:c7083010ae49 212 ### Non listed board support
nikapov 0:c7083010ae49 213
nikapov 0:c7083010ae49 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:c7083010ae49 215
nikapov 0:c7083010ae49 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:c7083010ae49 217
nikapov 0:c7083010ae49 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:c7083010ae49 219
nikapov 0:c7083010ae49 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:c7083010ae49 221
nikapov 0:c7083010ae49 222 <span class="notes">**Note:** To see how different targets are built please see the supplied `build_all.sh script`.</span>
nikapov 0:c7083010ae49 223
nikapov 0:c7083010ae49 224
nikapov 0:c7083010ae49 225 ### Client credentials
nikapov 0:c7083010ae49 226
nikapov 0:c7083010ae49 227 To register the application with the mbed Device Connector service, you need to create and set the client side certificate.
nikapov 0:c7083010ae49 228
nikapov 0:c7083010ae49 229 1. Go to [mbed Device Connector](https://connector.mbed.com) and log in with your mbed account.
nikapov 0:c7083010ae49 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:c7083010ae49 231 1. Replace the contents in the `security.h` file of this project's folder with the content copied above.
nikapov 0:c7083010ae49 232
nikapov 0:c7083010ae49 233 ### IP address setup
nikapov 0:c7083010ae49 234
nikapov 0:c7083010ae49 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:c7083010ae49 236
nikapov 0:c7083010ae49 237 ```
nikapov 0:c7083010ae49 238 "target_overrides": {
nikapov 0:c7083010ae49 239 "*": {
nikapov 0:c7083010ae49 240 "target.features_add": ["LWIP", "NANOSTACK", "COMMON_PAL"],
nikapov 0:c7083010ae49 241 "lwip.ipv4-enabled": false,
nikapov 0:c7083010ae49 242 "lwip.ipv6-enabled": true,
nikapov 0:c7083010ae49 243 "mbed-trace.enable": 0
nikapov 0:c7083010ae49 244 }
nikapov 0:c7083010ae49 245 ```
nikapov 0:c7083010ae49 246
nikapov 0:c7083010ae49 247 by modifying the `ipv4-enabled` or `ipv6-enabled` to `true/false`. Only one should be true.
nikapov 0:c7083010ae49 248
nikapov 0:c7083010ae49 249 The example program should automatically get an IP address from the router when connected over Ethernet or WiFi.
nikapov 0:c7083010ae49 250
nikapov 0:c7083010ae49 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:c7083010ae49 252
nikapov 0:c7083010ae49 253 ### Changing the socket type
nikapov 0:c7083010ae49 254
nikapov 0:c7083010ae49 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:c7083010ae49 256
nikapov 0:c7083010ae49 257 To change the binding mode:
nikapov 0:c7083010ae49 258
nikapov 0:c7083010ae49 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:c7083010ae49 260 1. To switch to UDP, change it to `M2MInterface::UDP`.
nikapov 0:c7083010ae49 261 1. Rebuild and flash the application.
nikapov 0:c7083010ae49 262
nikapov 0:c7083010ae49 263 <span class="tips">**Tip:** The instructions in this document remain the same, irrespective of the socket mode you select.</span>
nikapov 0:c7083010ae49 264
nikapov 0:c7083010ae49 265 Possible socket types per connection:
nikapov 0:c7083010ae49 266
nikapov 0:c7083010ae49 267 | Network interface | UDP | TCP |
nikapov 0:c7083010ae49 268 | ------------------------------|:-----:|:-----:|
nikapov 0:c7083010ae49 269 | Ethernet (IPv4) | X | X |
nikapov 0:c7083010ae49 270 | Ethernet (IPv6) | X | |
nikapov 0:c7083010ae49 271 | Wifi (IPv4) | X | X |
nikapov 0:c7083010ae49 272 | Wifi (IPv6) - Not supported | | |
nikapov 0:c7083010ae49 273 | 6LoWPAN/Thread (IPv6) | X | |
nikapov 0:c7083010ae49 274
nikapov 0:c7083010ae49 275 ## Building the example
nikapov 0:c7083010ae49 276
nikapov 0:c7083010ae49 277 To build the example using mbed CLI:
nikapov 0:c7083010ae49 278
nikapov 0:c7083010ae49 279 1. Open a command line tool and navigate to the project’s directory.
nikapov 0:c7083010ae49 280
nikapov 0:c7083010ae49 281 2. Import this example:
nikapov 0:c7083010ae49 282
nikapov 0:c7083010ae49 283 ```
nikapov 0:c7083010ae49 284 mbed import mbed-os-example-client
nikapov 0:c7083010ae49 285 ```
nikapov 0:c7083010ae49 286
nikapov 0:c7083010ae49 287 3. To build the application, select the hardware board and build the toolchain using the command:
nikapov 0:c7083010ae49 288
nikapov 0:c7083010ae49 289 (Specify the config file in the build command, for example for 6LoWPAN)
nikapov 0:c7083010ae49 290
nikapov 0:c7083010ae49 291 ```
nikapov 0:c7083010ae49 292 mbed compile -m K64F -t GCC_ARM -c --app-config configs/6lowpan_Atmel_RF.json
nikapov 0:c7083010ae49 293 ```
nikapov 0:c7083010ae49 294
nikapov 0:c7083010ae49 295 If you are using either of the following configurations remember to copy .mbedignore as well:
nikapov 0:c7083010ae49 296
nikapov 0:c7083010ae49 297 ```
nikapov 0:c7083010ae49 298 configs/eth_*
nikapov 0:c7083010ae49 299 configs/wifi_*
nikapov 0:c7083010ae49 300 ```
nikapov 0:c7083010ae49 301
nikapov 0:c7083010ae49 302 ```
nikapov 0:c7083010ae49 303 cp configs/eth-wifi-mbedignore ./.mbedignore
nikapov 0:c7083010ae49 304 ```
nikapov 0:c7083010ae49 305
nikapov 0:c7083010ae49 306 mbed CLI builds a binary file under the project’s `BUILD/` directory.
nikapov 0:c7083010ae49 307
nikapov 0:c7083010ae49 308 4. Plug the Ethernet cable into the board if you are using Ethernet mode.
nikapov 0:c7083010ae49 309
nikapov 0:c7083010ae49 310 5. If you are using 6LoWPAN ND or Thread mode, connect and power on the Border Router first.
nikapov 0:c7083010ae49 311
nikapov 0:c7083010ae49 312 6. Plug the micro-USB cable into the **OpenSDA** port. The board is listed as a mass-storage device.
nikapov 0:c7083010ae49 313
nikapov 0:c7083010ae49 314 7. Drag the binary `BUILD/K64F/GCC_ARM/mbed-os-example-client.bin` to the board to flash the application.
nikapov 0:c7083010ae49 315
nikapov 0:c7083010ae49 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:c7083010ae49 317
nikapov 0:c7083010ae49 318 9. Press the **Reset** button on the board to run the program.
nikapov 0:c7083010ae49 319
nikapov 0:c7083010ae49 320 10. For verification, continue to the [Monitoring the application](#monitoring-the-application) chapter.
nikapov 0:c7083010ae49 321
nikapov 0:c7083010ae49 322 **To build the example using the Online IDE:**
nikapov 0:c7083010ae49 323
nikapov 0:c7083010ae49 324 Import this repository in the Online IDE and continue from step 3 onwards.
nikapov 0:c7083010ae49 325
nikapov 0:c7083010ae49 326 ## Monitoring the application
nikapov 0:c7083010ae49 327
nikapov 0:c7083010ae49 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:c7083010ae49 329
nikapov 0:c7083010ae49 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:c7083010ae49 331
nikapov 0:c7083010ae49 332 After connecting, you should see messages about connecting to mbed Device Connector:
nikapov 0:c7083010ae49 333
nikapov 0:c7083010ae49 334 ```
nikapov 0:c7083010ae49 335 Starting mbed Client example
nikapov 0:c7083010ae49 336 [EasyConnect] IPv4 mode
nikapov 0:c7083010ae49 337 [EasyConnect] Using Ethernet
nikapov 0:c7083010ae49 338 [EasyConnect] Connected to Network successfully
nikapov 0:c7083010ae49 339 [EasyConnect] IP address 192.168.8.110
nikapov 0:c7083010ae49 340 [EasyConnect] MAC address 5c:cf:7f:86:de:bf
nikapov 0:c7083010ae49 341
nikapov 0:c7083010ae49 342 SOCKET_MODE : TCP
nikapov 0:c7083010ae49 343
nikapov 0:c7083010ae49 344 Connecting to coap://api.connector.mbed.com:5684
nikapov 0:c7083010ae49 345
nikapov 0:c7083010ae49 346 Registered object succesfully!
nikapov 0:c7083010ae49 347 ```
nikapov 0:c7083010ae49 348
nikapov 0:c7083010ae49 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:c7083010ae49 350
nikapov 0:c7083010ae49 351 When you press the **SW2** button on your board you should see messages about the value changes:
nikapov 0:c7083010ae49 352
nikapov 0:c7083010ae49 353 ```
nikapov 0:c7083010ae49 354 handle_button_click, new value of counter is 1
nikapov 0:c7083010ae49 355 ```
nikapov 0:c7083010ae49 356
nikapov 0:c7083010ae49 357 ## Testing the application
nikapov 0:c7083010ae49 358
nikapov 0:c7083010ae49 359 1. Flash the application.
nikapov 0:c7083010ae49 360 2. Verify that the registration succeeded. You should see `Registered object successfully!` printed to the serial port.
nikapov 0:c7083010ae49 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:c7083010ae49 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:c7083010ae49 363 5. Go to [Device Connector > API Console](https://connector.mbed.com/#console).
nikapov 0:c7083010ae49 364 6. Click the **Endpoint directory lookups** drop down menu.
nikapov 0:c7083010ae49 365 ![](/docs/img/ep_lookup.PNG)
nikapov 0:c7083010ae49 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:c7083010ae49 367 8. The number of times you pressed **SW2** is shown.
nikapov 0:c7083010ae49 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:c7083010ae49 369
nikapov 0:c7083010ae49 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:c7083010ae49 371
nikapov 0:c7083010ae49 372 ![SW2 pressed five times, as shown by the API Console](clicks.png)
nikapov 0:c7083010ae49 373
nikapov 0:c7083010ae49 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:c7083010ae49 375
nikapov 0:c7083010ae49 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:c7083010ae49 377
nikapov 0:c7083010ae49 378 ### Application resources
nikapov 0:c7083010ae49 379
nikapov 0:c7083010ae49 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:c7083010ae49 381
nikapov 0:c7083010ae49 382 1. `3200/0/5501`. Number of presses of **SW2** (GET).
nikapov 0:c7083010ae49 383 2. `3201/0/5850`. Blink function, blinks **LED1** when executed (POST).
nikapov 0:c7083010ae49 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:c7083010ae49 385
nikapov 0:c7083010ae49 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:c7083010ae49 387
nikapov 0:c7083010ae49 388 ## Known issues
nikapov 0:c7083010ae49 389
nikapov 0:c7083010ae49 390 ### mbed OS 5.4
nikapov 0:c7083010ae49 391
nikapov 0:c7083010ae49 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:c7083010ae49 393 * [NUCLEO_F429ZI]: This example is not compiling with IAR. See [#194](https://github.com/ARMmbed/mbed-os-example-client/issues/194)
nikapov 0:c7083010ae49 394
nikapov 0:c7083010ae49 395 Fix for those issues coming via; [mbed-os PR 3920] (https://github.com/ARMmbed/mbed-os/pull/3920)