![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
This is a simple mbed client example demonstrating, registration of a device with mbed Device Connector and reading and writing values as well as deregistering on different Network Interfaces including Ethernet, WiFi, 6LoWPAN ND and Thread respectively.
Fork of mbed-os-example-client by
README.md@21:b88cdeb5b302, 2016-10-21 (annotated)
- Committer:
- mbed_official
- Date:
- Fri Oct 21 09:30:10 2016 +0100
- Revision:
- 21:b88cdeb5b302
- Parent:
- 13:c44e318674db
- Child:
- 22:e39e09d79a63
Merge branch 'oob_change'
Commit copied from https://github.com/ARMmbed/mbed-os-example-client
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Yogesh Pande |
0:7d5ec759888b | 1 | # Getting started with mbed Client on mbed OS |
Yogesh Pande |
0:7d5ec759888b | 2 | |
Yogesh Pande |
0:7d5ec759888b | 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. |
Yogesh Pande |
0:7d5ec759888b | 4 | |
Yogesh Pande |
0:7d5ec759888b | 5 | The application: |
Yogesh Pande |
0:7d5ec759888b | 6 | |
Yogesh Pande |
0:7d5ec759888b | 7 | * Connects to network with WiFi, Ethernet, 6LoWPAN ND or Thread connection. |
Yogesh Pande |
0:7d5ec759888b | 8 | * Registers with mbed Device Connector. |
Yogesh Pande |
0:7d5ec759888b | 9 | * Gives mbed Device Connector access to its resources (read and write). |
Yogesh Pande |
0:7d5ec759888b | 10 | * Records the number of clicks on the device’s button and sends the number to mbed Device Connector. |
Yogesh Pande |
0:7d5ec759888b | 11 | * Lets you control the blink pattern of the LED on the device (through mbed Device Connector). |
Yogesh Pande |
0:7d5ec759888b | 12 | |
Yogesh Pande |
0:7d5ec759888b | 13 | ## Required hardware |
Yogesh Pande |
0:7d5ec759888b | 14 | |
Yogesh Pande |
0:7d5ec759888b | 15 | * [FRDM-K64F](http://developer.mbed.org/platforms/frdm-k64f/) board. |
Yogesh Pande |
0:7d5ec759888b | 16 | * 1-2 micro-USB cables. |
Yogesh Pande |
0:7d5ec759888b | 17 | * [mbed 6LoWPAN gateway router](https://firefly-iot.com/product/firefly-6lowpan-gateway-2-4ghz/) for 6LoWPAN ND and Thread. |
Yogesh Pande |
0:7d5ec759888b | 18 | * mbed 6LoWPAN shield (AT86RF212B/[AT86RF233](https://firefly-iot.com/product/firefly-arduino-shield-2-4ghz/)) for 6LoWPAN ND and Thread. |
Yogesh Pande |
0:7d5ec759888b | 19 | * Ethernet cable and connection to the internet. |
Yogesh Pande |
0:7d5ec759888b | 20 | |
mbed_official | 21:b88cdeb5b302 | 21 | ## Requirements for non-K64F boards |
mbed_official | 21:b88cdeb5b302 | 22 | |
mbed_official | 21:b88cdeb5b302 | 23 | * This example requires TLS functionality to be enabled on mbed TLS. |
mbed_official | 21:b88cdeb5b302 | 24 | On devices where hardware entropy is not present, TLS is disabled by default. |
mbed_official | 21:b88cdeb5b302 | 25 | This would result in compile time failures or linking failures. |
mbed_official | 7:9a1ee269650b | 26 | |
mbed_official | 21:b88cdeb5b302 | 27 | To learn why entropy is required, read the |
mbed_official | 21:b88cdeb5b302 | 28 | [TLS Porting guide](https://docs.mbed.com/docs/mbed-os-handbook/en/5.2/advanced/tls_porting/). |
mbed_official | 21:b88cdeb5b302 | 29 | |
mbed_official | 21:b88cdeb5b302 | 30 | * On non-K64F boards, there is no unregistration functionality and |
mbed_official | 21:b88cdeb5b302 | 31 | button presses are simulated through timer ticks incrementing every 15 seconds. |
mbed_official | 7:9a1ee269650b | 32 | |
Yogesh Pande |
0:7d5ec759888b | 33 | ## Required software |
Yogesh Pande |
0:7d5ec759888b | 34 | |
Yogesh Pande |
0:7d5ec759888b | 35 | * [ARM mbed account](https://developer.mbed.org/account/login/?next=/). |
Yogesh Pande |
0:7d5ec759888b | 36 | * [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). |
Yogesh Pande |
0:7d5ec759888b | 37 | * [Serial port monitor](https://developer.mbed.org/handbook/SerialPC#host-interface-and-terminal-applications). |
Yogesh Pande |
0:7d5ec759888b | 38 | |
Yogesh Pande |
0:7d5ec759888b | 39 | ## Application setup |
Yogesh Pande |
0:7d5ec759888b | 40 | |
mbed_official | 21:b88cdeb5b302 | 41 | To configure the example application: |
Yogesh Pande |
0:7d5ec759888b | 42 | |
Yogesh Pande |
0:7d5ec759888b | 43 | 1. [Select the connection type](#connection-type). |
Yogesh Pande |
0:7d5ec759888b | 44 | 1. [Set the client credentials](#client-credentials). |
Yogesh Pande |
0:7d5ec759888b | 45 | 1. [Change 6LoWPAN ND & Thread settings](#6lowpan-nd-and-thread-settings). |
Yogesh Pande |
0:7d5ec759888b | 46 | 1. [Change Ethernet settings](#ethernet-settings). |
Yogesh Pande |
0:7d5ec759888b | 47 | 1. [Change Wi-Fi settings](#wi-fi-settings). |
Yogesh Pande |
0:7d5ec759888b | 48 | 1. [Set up an IP address](#ip-address-setup). This step is optional. |
Yogesh Pande |
0:7d5ec759888b | 49 | 1. [Change the socket type](#changing-socket-type). This step is optional. |
Yogesh Pande |
0:7d5ec759888b | 50 | |
Yogesh Pande |
0:7d5ec759888b | 51 | ### Connection type |
Yogesh Pande |
0:7d5ec759888b | 52 | |
Yogesh Pande |
0:7d5ec759888b | 53 | The application uses Ethernet as the default connection type. To change the connection type, set one of them in `mbed_app.json`. For example, to enable 6LoWPAN ND mode: |
Yogesh Pande |
0:7d5ec759888b | 54 | |
Yogesh Pande |
0:7d5ec759888b | 55 | ```json |
Yogesh Pande |
0:7d5ec759888b | 56 | "network-interface": { |
Yogesh Pande |
0:7d5ec759888b | 57 | "help": "options are ETHERNET,WIFI,MESH_LOWPAN_ND,MESH_THREAD.", |
Yogesh Pande |
0:7d5ec759888b | 58 | "value": "MESH_LOWPAN_ND" |
Yogesh Pande |
0:7d5ec759888b | 59 | } |
Yogesh Pande |
0:7d5ec759888b | 60 | ``` |
Yogesh Pande |
0:7d5ec759888b | 61 | |
Yogesh Pande |
0:7d5ec759888b | 62 | ### Client credentials |
Yogesh Pande |
0:7d5ec759888b | 63 | |
mbed_official | 21:b88cdeb5b302 | 64 | To register the application with the Connector service, you need to create and set the client side certificate. |
Yogesh Pande |
0:7d5ec759888b | 65 | |
Yogesh Pande |
0:7d5ec759888b | 66 | 1. Go to [mbed Device Connector](https://connector.mbed.com) and log in with your mbed account. |
mbed_official | 21:b88cdeb5b302 | 67 | 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. |
mbed_official | 21:b88cdeb5b302 | 68 | 1. Replace the contents in the `security.h` file of this project's directory with the content copied above. |
Yogesh Pande |
0:7d5ec759888b | 69 | |
Yogesh Pande |
0:7d5ec759888b | 70 | ### 6LoWPAN ND and Thread settings |
Yogesh Pande |
0:7d5ec759888b | 71 | |
mbed_official | 21:b88cdeb5b302 | 72 | First, you need to select the RF driver to be used by the 6LoWPAN/Thread stack. This example supports [AT86RF233/212B](https://github.com/ARMmbed/atmel-rf-driver) and [NXP-MCR20a](https://github.com/ARMmbed/mcr20a-rf-driver) radio shields. |
Yogesh Pande |
1:e06e899acba6 | 73 | |
mbed_official | 21:b88cdeb5b302 | 74 | To add the Atmel driver to you application from command line, call: `mbed add https://github.com/ARMmbed/atmel-rf-driver`. |
mbed_official | 21:b88cdeb5b302 | 75 | Please make sure that the `mbed_app.json` file points to the correct radio driver type: |
Yogesh Pande |
1:e06e899acba6 | 76 | |
mbed_official | 21:b88cdeb5b302 | 77 | ```json |
mbed_official | 21:b88cdeb5b302 | 78 | "mesh_radio_type": { |
mbed_official | 21:b88cdeb5b302 | 79 | "help": "options are ATMEL, MCR20", |
mbed_official | 21:b88cdeb5b302 | 80 | "value": "ATMEL" |
mbed_official | 21:b88cdeb5b302 | 81 | }, |
mbed_official | 21:b88cdeb5b302 | 82 | ``` |
Yogesh Pande |
1:e06e899acba6 | 83 | |
mbed_official | 21:b88cdeb5b302 | 84 | 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: |
Yogesh Pande |
1:e06e899acba6 | 85 | |
Yogesh Pande |
1:e06e899acba6 | 86 | ``` |
mbed_official | 21:b88cdeb5b302 | 87 | "target.features_add": ["NANOSTACK", "LOWPAN_ROUTER", "COMMON_PAL"], |
mbed_official | 21:b88cdeb5b302 | 88 | ``` |
mbed_official | 21:b88cdeb5b302 | 89 | |
mbed_official | 21:b88cdeb5b302 | 90 | If your connection type is `MESH_THREAD` then you may want to use the THREAD_ROUTER configuration: |
mbed_official | 21:b88cdeb5b302 | 91 | |
mbed_official | 21:b88cdeb5b302 | 92 | ``` |
mbed_official | 21:b88cdeb5b302 | 93 | "target.features_add": ["NANOSTACK", "THREAD_ROUTER", "COMMON_PAL"], |
Yogesh Pande |
1:e06e899acba6 | 94 | ``` |
Yogesh Pande |
1:e06e899acba6 | 95 | |
Yogesh Pande |
0:7d5ec759888b | 96 | 6LoWPAN ND and Thread use IPv6 for connectivity. Therefore, you need to verify first that you have a working IPv6 connection. To do that, ping the Connector IPv6 address `2607:f0d0:2601:52::20` from your network. |
Yogesh Pande |
0:7d5ec759888b | 97 | |
mbed_official | 21:b88cdeb5b302 | 98 | <span class="notes">**Note:** If you are using the [k64f-border-router](https://github.com/ARMmbed/k64f-border-router) (that can be used only as a 6LoWPAN BR and only with FRDM-K64F), you need to enable another security feature. By default, the `k64f-border-router` uses `PSK` as security.</span> |
mbed_official | 21:b88cdeb5b302 | 99 | |
mbed_official | 21:b88cdeb5b302 | 100 | You can enable the security here on your mbed-os-example-client application, for example: |
mbed_official | 6:8fff223f3f84 | 101 | |
mbed_official | 6:8fff223f3f84 | 102 | ```json |
mbed_official | 6:8fff223f3f84 | 103 | "target_overrides": { |
mbed_official | 6:8fff223f3f84 | 104 | "*": { |
mbed_official | 6:8fff223f3f84 | 105 | "mbed-mesh-api.6lowpan-nd-security-mode": "PSK", |
mbed_official | 6:8fff223f3f84 | 106 | } |
mbed_official | 6:8fff223f3f84 | 107 | } |
mbed_official | 6:8fff223f3f84 | 108 | ``` |
mbed_official | 21:b88cdeb5b302 | 109 | |
mbed_official | 21:b88cdeb5b302 | 110 | Alternatively, you can remove the link layer security from the `k64f-border-router`. To do that, change the [mbed_app.json](https://github.com/ARMmbed/k64f-border-router/blob/master/mbed_app.json) fetched from the `k64f-border-router` repository, for example: |
mbed_official | 6:8fff223f3f84 | 111 | |
mbed_official | 6:8fff223f3f84 | 112 | ```json |
mbed_official | 6:8fff223f3f84 | 113 | "config": { |
mbed_official | 6:8fff223f3f84 | 114 | "security-mode": "NONE", |
mbed_official | 6:8fff223f3f84 | 115 | } |
mbed_official | 6:8fff223f3f84 | 116 | ``` |
mbed_official | 21:b88cdeb5b302 | 117 | |
Yogesh Pande |
0:7d5ec759888b | 118 | #### mbed gateway |
Yogesh Pande |
0:7d5ec759888b | 119 | |
Yogesh Pande |
0:7d5ec759888b | 120 | To connect the example application in 6LoWPAN ND or Thread mode to Connector, you need to set up an mbed 6LoWPAN gateway router as follows: |
Yogesh Pande |
0:7d5ec759888b | 121 | |
Yogesh Pande |
0:7d5ec759888b | 122 | 1. Use an Ethernet cable to connect the mbed 6LoWPAN gateway router to the internet. |
Yogesh Pande |
0:7d5ec759888b | 123 | 2. Use a micro-USB cable to connect the mbed 6LoWPAN gateway router to your computer. The computer will list the router as removable storage. |
Yogesh Pande |
0:7d5ec759888b | 124 | 3. The firmware for the gateway is located in the `GW_Binary` folder in the root of this example. Select the binary matching your application bootstrap mode: |
Yogesh Pande |
0:7d5ec759888b | 125 | |
Yogesh Pande |
0:7d5ec759888b | 126 | * For the **6LoWPAN ND** bootstrap, use `gateway6LoWPANDynamic.bin`. |
Yogesh Pande |
0:7d5ec759888b | 127 | * For the **Thread** bootstrap, use `gatewayThreadDynamic.bin`. |
Yogesh Pande |
0:7d5ec759888b | 128 | |
Yogesh Pande |
0:7d5ec759888b | 129 | The dynamic binaries use IPv6 autoconfiguration and enable the client to connect to the Connector service. The static binaries create a site-local IPv6 network and packets cannot be routed outside. |
Yogesh Pande |
0:7d5ec759888b | 130 | |
Yogesh Pande |
0:7d5ec759888b | 131 | 4. Copy the gateway binary file to the mbed 6LoWPAN gateway router to flash the device. The device reboots automatically after flashing. If that does not happen, press the **Reset** button on the board. |
Yogesh Pande |
0:7d5ec759888b | 132 | |
Yogesh Pande |
0:7d5ec759888b | 133 | You can view debug traces from the gateway with a serial port monitor. The gateway uses baud rate 460800. The gateway IPv6 address is correctly configured when the following trace is visible: `Eth bootstrap ready, IP=XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX`. |
Yogesh Pande |
0:7d5ec759888b | 134 | |
Yogesh Pande |
0:7d5ec759888b | 135 | #### Channel settings |
Yogesh Pande |
0:7d5ec759888b | 136 | |
Yogesh Pande |
0:7d5ec759888b | 137 | The default 2.4GHz channel settings are already defined by the [mbed-mesh-api](https://github.com/ARMmbed/mbed-mesh-api) to match the mbed gateway settings. The application can override these settings by adding them to the `mbed_app.json` file in the main project directory. For example: |
Yogesh Pande |
0:7d5ec759888b | 138 | |
Yogesh Pande |
0:7d5ec759888b | 139 | ```json |
Yogesh Pande |
0:7d5ec759888b | 140 | "target_overrides": { |
Yogesh Pande |
0:7d5ec759888b | 141 | "*": { |
Yogesh Pande |
0:7d5ec759888b | 142 | "mbed-mesh-api.6lowpan-nd-channel-page": 0, |
Yogesh Pande |
0:7d5ec759888b | 143 | "mbed-mesh-api.6lowpan-nd-channel": 12, |
Yogesh Pande |
0:7d5ec759888b | 144 | "mbed-mesh-api.thread-config-channel-page": 0, |
Yogesh Pande |
0:7d5ec759888b | 145 | "mbed-mesh-api.thread-config-channel": 12 |
Yogesh Pande |
0:7d5ec759888b | 146 | } |
Yogesh Pande |
0:7d5ec759888b | 147 | } |
Yogesh Pande |
0:7d5ec759888b | 148 | ``` |
Yogesh Pande |
0:7d5ec759888b | 149 | |
Yogesh Pande |
0:7d5ec759888b | 150 | For sub-GHz shields (AT86RF212B) use the following overrides, **6LoWPAN ND only**: |
Yogesh Pande |
0:7d5ec759888b | 151 | |
Yogesh Pande |
0:7d5ec759888b | 152 | ```json |
Yogesh Pande |
0:7d5ec759888b | 153 | "mbed-mesh-api.6lowpan-nd-channel-page": 2, |
Yogesh Pande |
0:7d5ec759888b | 154 | "mbed-mesh-api.6lowpan-nd-channel": 1 |
Yogesh Pande |
0:7d5ec759888b | 155 | ``` |
Yogesh Pande |
0:7d5ec759888b | 156 | |
mbed_official | 21:b88cdeb5b302 | 157 | For more information about the radio shields, see [the related documentation](docs/radio_module_identify.md). All configurable settings can be found in the `mbed-os-example-client/mbed-os/features/FEATURE_IPV6/mbed-mesh-api/mbed_lib.json` file. |
Yogesh Pande |
0:7d5ec759888b | 158 | |
Yogesh Pande |
0:7d5ec759888b | 159 | #### Thread-specific settings |
Yogesh Pande |
0:7d5ec759888b | 160 | |
Yogesh Pande |
0:7d5ec759888b | 161 | 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: |
Yogesh Pande |
0:7d5ec759888b | 162 | |
Yogesh Pande |
0:7d5ec759888b | 163 | ```json |
Yogesh Pande |
0:7d5ec759888b | 164 | "mbed-mesh-api.thread-device-type": "MESH_DEVICE_TYPE_THREAD_SLEEPY_END_DEVICE" |
Yogesh Pande |
0:7d5ec759888b | 165 | ``` |
Yogesh Pande |
0:7d5ec759888b | 166 | |
Yogesh Pande |
0:7d5ec759888b | 167 | ### Ethernet settings |
Yogesh Pande |
0:7d5ec759888b | 168 | |
Yogesh Pande |
0:7d5ec759888b | 169 | For running the example application using Ethernet, you need: |
Yogesh Pande |
0:7d5ec759888b | 170 | |
Yogesh Pande |
0:7d5ec759888b | 171 | - An Ethernet cable. |
Yogesh Pande |
0:7d5ec759888b | 172 | - An Ethernet connection to the internet. |
Yogesh Pande |
0:7d5ec759888b | 173 | |
Yogesh Pande |
0:7d5ec759888b | 174 | ### Wi-Fi settings |
Yogesh Pande |
0:7d5ec759888b | 175 | |
Yogesh Pande |
0:7d5ec759888b | 176 | The example application uses ESP8266 WiFi Interface for managing the wireless connectivity. To run this application using WiFi, you need: |
Yogesh Pande |
0:7d5ec759888b | 177 | |
mbed_official | 21:b88cdeb5b302 | 178 | 1. An [ESP8266](https://en.wikipedia.org/wiki/ESP8266) WiFi module. |
mbed_official | 21:b88cdeb5b302 | 179 | 1. Updated [Espressif Firmware](https://developer.mbed.org/teams/ESP8266/wiki/Firmware-Update). |
mbed_official | 21:b88cdeb5b302 | 180 | 1. Mount the WiFi module onto [K64F Grove Shield v2](https://developer.mbed.org/platforms/FRDM-K64F/#supported-seeed-studio-grove-extension). |
Yogesh Pande |
0:7d5ec759888b | 181 | 1. Attach the shield on the K64F board. |
Yogesh Pande |
0:7d5ec759888b | 182 | 1. In the `mbed_app.json` file, change |
mbed_official | 21:b88cdeb5b302 | 183 | |
Yogesh Pande |
0:7d5ec759888b | 184 | ```json |
Yogesh Pande |
0:7d5ec759888b | 185 | "network-interface": { |
Yogesh Pande |
0:7d5ec759888b | 186 | "help": "options are ETHERNET,WIFI,MESH_LOWPAN_ND,MESH_THREAD.", |
Yogesh Pande |
0:7d5ec759888b | 187 | "value": "WIFI" |
Yogesh Pande |
0:7d5ec759888b | 188 | } |
Yogesh Pande |
0:7d5ec759888b | 189 | ``` |
Yogesh Pande |
0:7d5ec759888b | 190 | |
Yogesh Pande |
0:7d5ec759888b | 191 | 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. |
mbed_official | 21:b88cdeb5b302 | 192 | |
Yogesh Pande |
0:7d5ec759888b | 193 | ```json |
Yogesh Pande |
0:7d5ec759888b | 194 | "wifi-ssid": { |
Yogesh Pande |
0:7d5ec759888b | 195 | "help": "WiFi SSID", |
Yogesh Pande |
0:7d5ec759888b | 196 | "value": "\"SSID\"" |
Yogesh Pande |
0:7d5ec759888b | 197 | }, |
Yogesh Pande |
0:7d5ec759888b | 198 | "wifi-password": { |
Yogesh Pande |
0:7d5ec759888b | 199 | "help": "WiFi Password", |
Yogesh Pande |
0:7d5ec759888b | 200 | "value": "\"Password\"" |
Yogesh Pande |
0:7d5ec759888b | 201 | } |
Yogesh Pande |
0:7d5ec759888b | 202 | ``` |
Yogesh Pande |
0:7d5ec759888b | 203 | |
mbed_official | 21:b88cdeb5b302 | 204 | <span class="notes">**Note:** Some devices do not support the Grove Shield or use the primary UART for USB communication. On such devices, the `mbed_app.json` should be modified to use the serial pins connected to the ESP8266.</span> |
mbed_official | 13:c44e318674db | 205 | |
mbed_official | 21:b88cdeb5b302 | 206 | For example, NUCLEO_F401RE requires a different serial connection: |
mbed_official | 13:c44e318674db | 207 | |
mbed_official | 13:c44e318674db | 208 | ```json |
mbed_official | 13:c44e318674db | 209 | "wifi-tx": { |
mbed_official | 13:c44e318674db | 210 | "help": "TX pin for serial connection to external device", |
mbed_official | 13:c44e318674db | 211 | "value": "PA_11" |
mbed_official | 13:c44e318674db | 212 | }, |
mbed_official | 13:c44e318674db | 213 | "wifi-rx": { |
mbed_official | 13:c44e318674db | 214 | "help": "RX pin for serial connection to external device", |
mbed_official | 13:c44e318674db | 215 | "value": "PA_12" |
mbed_official | 13:c44e318674db | 216 | } |
mbed_official | 13:c44e318674db | 217 | ``` |
mbed_official | 13:c44e318674db | 218 | |
mbed_official | 13:c44e318674db | 219 | |
Yogesh Pande |
0:7d5ec759888b | 220 | ### IP address setup |
Yogesh Pande |
0:7d5ec759888b | 221 | |
Yogesh Pande |
0:7d5ec759888b | 222 | This example uses IPv4 to communicate with the [mbed Device Connector Server](https://api.connector.mbed.com) except for 6LoWPAN ND and Thread. The example program should automatically get an IPv4 address from the router when connected over Ethernet. |
Yogesh Pande |
0:7d5ec759888b | 223 | |
Yogesh Pande |
0:7d5ec759888b | 224 | 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. |
Yogesh Pande |
0:7d5ec759888b | 225 | |
Yogesh Pande |
0:7d5ec759888b | 226 | ### Changing socket type |
Yogesh Pande |
0:7d5ec759888b | 227 | |
Yogesh Pande |
0:7d5ec759888b | 228 | Your device can connect to mbed Device Connector via UDP or TCP binding mode. The default is UDP. The binding mode cannot be changed in 6LoWPAN ND or Thread mode. |
Yogesh Pande |
0:7d5ec759888b | 229 | |
Yogesh Pande |
0:7d5ec759888b | 230 | To change the binding mode: |
Yogesh Pande |
0:7d5ec759888b | 231 | |
Yogesh Pande |
0:7d5ec759888b | 232 | 1. In the `simpleclient.h` file, find the parameter `SOCKET_MODE`. The default is `M2MInterface::UDP`. |
Yogesh Pande |
0:7d5ec759888b | 233 | 1. To switch to TCP, change it to `M2MInterface::TCP`. |
Yogesh Pande |
0:7d5ec759888b | 234 | 1. Rebuild and flash the application. |
Yogesh Pande |
0:7d5ec759888b | 235 | |
Yogesh Pande |
0:7d5ec759888b | 236 | <span class="tips">**Tip:** The instructions in this document remain the same, irrespective of the socket mode you select.</span> |
Yogesh Pande |
0:7d5ec759888b | 237 | |
Yogesh Pande |
0:7d5ec759888b | 238 | ## Building the example |
Yogesh Pande |
0:7d5ec759888b | 239 | |
mbed_official | 21:b88cdeb5b302 | 240 | To build the example using mbed CLI: |
Yogesh Pande |
0:7d5ec759888b | 241 | |
Yogesh Pande |
0:7d5ec759888b | 242 | 1. Open a command line tool and navigate to the project’s directory. |
mbed_official | 21:b88cdeb5b302 | 243 | |
mbed_official | 21:b88cdeb5b302 | 244 | 2. Import this example: |
mbed_official | 21:b88cdeb5b302 | 245 | |
mbed_official | 21:b88cdeb5b302 | 246 | ``` |
mbed_official | 21:b88cdeb5b302 | 247 | mbed import mbed-os-example-client |
mbed_official | 21:b88cdeb5b302 | 248 | ``` |
mbed_official | 21:b88cdeb5b302 | 249 | |
mbed_official | 21:b88cdeb5b302 | 250 | 3. [Configure](#application-setup) the client application. |
mbed_official | 21:b88cdeb5b302 | 251 | |
mbed_official | 21:b88cdeb5b302 | 252 | 4. To build the application, select the hardware board and build the toolchain using the command: |
mbed_official | 21:b88cdeb5b302 | 253 | |
mbed_official | 21:b88cdeb5b302 | 254 | ``` |
mbed_official | 21:b88cdeb5b302 | 255 | mbed compile -m K64F -t GCC_ARM -c |
mbed_official | 21:b88cdeb5b302 | 256 | ``` |
mbed_official | 21:b88cdeb5b302 | 257 | |
mbed_official | 21:b88cdeb5b302 | 258 | mbed CLI builds a binary file under the project’s `BUILD/` directory. |
Yogesh Pande |
0:7d5ec759888b | 259 | |
mbed_official | 21:b88cdeb5b302 | 260 | 5. Plug the Ethernet cable into the board if you are using Ethernet mode. |
mbed_official | 21:b88cdeb5b302 | 261 | |
mbed_official | 21:b88cdeb5b302 | 262 | 6. If you are using 6LoWPAN ND or Thread mode, connect and power on the gateway first. |
mbed_official | 21:b88cdeb5b302 | 263 | |
mbed_official | 21:b88cdeb5b302 | 264 | 7. Plug the micro-USB cable into the **OpenSDA** port. The board is listed as a mass-storage device. |
mbed_official | 21:b88cdeb5b302 | 265 | |
mbed_official | 21:b88cdeb5b302 | 266 | 8. Drag the binary `BUILD/K64F/GCC_ARM/mbed-os-example-client.bin` to the board to flash the application. |
mbed_official | 21:b88cdeb5b302 | 267 | |
mbed_official | 21:b88cdeb5b302 | 268 | 9. 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. |
mbed_official | 21:b88cdeb5b302 | 269 | |
mbed_official | 21:b88cdeb5b302 | 270 | 10. Press the **Reset** button on the board to run the program. |
mbed_official | 21:b88cdeb5b302 | 271 | |
mbed_official | 21:b88cdeb5b302 | 272 | 11. For verification, continue to the [Monitoring the application](#monitoring-the-application) chapter. |
mbed_official | 21:b88cdeb5b302 | 273 | |
mbed_official | 21:b88cdeb5b302 | 274 | **To build the example using the Online IDE:** |
mbed_official | 21:b88cdeb5b302 | 275 | |
mbed_official | 21:b88cdeb5b302 | 276 | Import this repository in the Online IDE and continue from step 3 onwards. |
Yogesh Pande |
0:7d5ec759888b | 277 | |
Yogesh Pande |
0:7d5ec759888b | 278 | ## Monitoring the application |
Yogesh Pande |
0:7d5ec759888b | 279 | |
Yogesh Pande |
0:7d5ec759888b | 280 | 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. |
Yogesh Pande |
0:7d5ec759888b | 281 | |
Yogesh Pande |
0:7d5ec759888b | 282 | <span class="notes">**Note:** Instructions to set this up are located [here](https://developer.mbed.org/handbook/SerialPC#host-interface-and-terminal-applications).</span> |
Yogesh Pande |
0:7d5ec759888b | 283 | |
Yogesh Pande |
0:7d5ec759888b | 284 | After connecting, you should see messages about connecting to mbed Device Connector: |
Yogesh Pande |
0:7d5ec759888b | 285 | |
Yogesh Pande |
0:7d5ec759888b | 286 | ``` |
mbed_official | 5:b7d7ca715fdb | 287 | Starting mbed Client example... |
mbed_official | 5:b7d7ca715fdb | 288 | Using <Network Interface> |
mbed_official | 5:b7d7ca715fdb | 289 | |
mbed_official | 5:b7d7ca715fdb | 290 | Connected to Network successfully |
mbed_official | 5:b7d7ca715fdb | 291 | IP address xxx.xxx.xxx.xxx |
mbed_official | 5:b7d7ca715fdb | 292 | |
mbed_official | 5:b7d7ca715fdb | 293 | SOCKET_MODE : UDP |
mbed_official | 5:b7d7ca715fdb | 294 | Connecting to coap://api.connector.mbed.com:5684 |
mbed_official | 5:b7d7ca715fdb | 295 | |
Yogesh Pande |
0:7d5ec759888b | 296 | ``` |
Yogesh Pande |
0:7d5ec759888b | 297 | |
mbed_official | 21:b88cdeb5b302 | 298 | <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> |
Yogesh Pande |
0:7d5ec759888b | 299 | |
mbed_official | 21:b88cdeb5b302 | 300 | When you press the **SW2** button on your board you should see messages about the value changes: |
Yogesh Pande |
0:7d5ec759888b | 301 | |
Yogesh Pande |
0:7d5ec759888b | 302 | ``` |
Yogesh Pande |
0:7d5ec759888b | 303 | handle_button_click, new value of counter is 1 |
Yogesh Pande |
0:7d5ec759888b | 304 | ``` |
Yogesh Pande |
0:7d5ec759888b | 305 | |
Yogesh Pande |
0:7d5ec759888b | 306 | ## Testing the application |
Yogesh Pande |
0:7d5ec759888b | 307 | |
Yogesh Pande |
0:7d5ec759888b | 308 | 1. Flash the application. |
mbed_official | 21:b88cdeb5b302 | 309 | 2. Verify that the registration succeeded. You should see `Registered object successfully!` printed to the serial port. |
mbed_official | 21:b88cdeb5b302 | 310 | 3. On mbed Device Connector, go to [My devices > Connected devices](https://connector.mbed.com/#endpoints). Your device should be listed here. |
mbed_official | 21:b88cdeb5b302 | 311 | 4. Press the **SW2** button on the device a number of times (make a note of how many times you did that). |
mbed_official | 21:b88cdeb5b302 | 312 | 5. Go to [Device Connector > API Console](https://connector.mbed.com/#console). |
mbed_official | 21:b88cdeb5b302 | 313 | 6. Click the **Endpoint directory lookups** drop down menu. |
mbed_official | 21:b88cdeb5b302 | 314 | ![](/docs/img/ep_lookup.PNG) |
mbed_official | 21:b88cdeb5b302 | 315 | 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`. Choose `3200/0/5501`as a resource path and click **TEST API**. |
mbed_official | 21:b88cdeb5b302 | 316 | 8. The number of times you pressed **SW2** is shown. |
mbed_official | 21:b88cdeb5b302 | 317 | 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. |
Yogesh Pande |
0:7d5ec759888b | 318 | |
mbed_official | 21:b88cdeb5b302 | 319 | <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> |
Yogesh Pande |
0:7d5ec759888b | 320 | |
Yogesh Pande |
0:7d5ec759888b | 321 | ![SW2 pressed five times, as shown by the API Console](clicks.png) |
Yogesh Pande |
0:7d5ec759888b | 322 | |
Yogesh Pande |
0:7d5ec759888b | 323 | <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> |
Yogesh Pande |
0:7d5ec759888b | 324 | |
mbed_official | 21:b88cdeb5b302 | 325 | <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). |
Yogesh Pande |
0:7d5ec759888b | 326 | |
Yogesh Pande |
0:7d5ec759888b | 327 | ### Application resources |
Yogesh Pande |
0:7d5ec759888b | 328 | |
Yogesh Pande |
0:7d5ec759888b | 329 | The application exposes three [resources](https://docs.mbed.com/docs/mbed-device-connector-web-interfaces/en/latest/#the-mbed-device-connector-data-model): |
Yogesh Pande |
0:7d5ec759888b | 330 | |
mbed_official | 21:b88cdeb5b302 | 331 | 1. `3200/0/5501`. Number of presses of **SW2** (GET). |
mbed_official | 21:b88cdeb5b302 | 332 | 2. `3201/0/5850`. Blink function, blinks **LED1** when executed (POST). |
Yogesh Pande |
0:7d5ec759888b | 333 | 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). |
Yogesh Pande |
0:7d5ec759888b | 334 | |
mbed_official | 21:b88cdeb5b302 | 335 | 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). |