Modified version of easy-connect for W5500 Ethernet components
Dependents: http-webserver-example mbed-os-example-sockets
Fork of easy-connect by
README.md@6:307d527714cf, 2018-08-13 (annotated)
- Committer:
- Bongjun
- Date:
- Mon Aug 13 08:10:37 2018 +0000
- Revision:
- 6:307d527714cf
- Parent:
- 0:e8ce78953d20
move DNS functions into W5500Interface
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sgnezdov | 0:e8ce78953d20 | 1 | # Easy Connect - Easily add all supported connectivity methods to your mbed OS project |
sgnezdov | 0:e8ce78953d20 | 2 | |
sgnezdov | 0:e8ce78953d20 | 3 | Often you want to give users of your application the choice to switch between connectivity methods. The `NetworkInterface` API makes this easy, but you'll still need a mechanism for the user to chooce the method, throw in some `#define`'s, etc. Easy Connect handles all this for you. Just declare the desired connectivity method in your `mbed_app.json` file, and call `easy_connect()` from your application. |
sgnezdov | 0:e8ce78953d20 | 4 | |
sgnezdov | 0:e8ce78953d20 | 5 | ## Specifying connectivity method |
sgnezdov | 0:e8ce78953d20 | 6 | |
sgnezdov | 0:e8ce78953d20 | 7 | Add the following to your ``mbed_app.json`` file: |
sgnezdov | 0:e8ce78953d20 | 8 | |
sgnezdov | 0:e8ce78953d20 | 9 | ```json |
sgnezdov | 0:e8ce78953d20 | 10 | { |
sgnezdov | 0:e8ce78953d20 | 11 | "config": { |
sgnezdov | 0:e8ce78953d20 | 12 | "network-interface":{ |
sgnezdov | 0:e8ce78953d20 | 13 | "help": "options are ETHERNET,WIFI_ESP8266,WIFI_ODIN, WIFI_REALTEK, MESH_LOWPAN_ND,MESH_THREAD", |
sgnezdov | 0:e8ce78953d20 | 14 | "value": "ETHERNET" |
sgnezdov | 0:e8ce78953d20 | 15 | } |
sgnezdov | 0:e8ce78953d20 | 16 | }, |
sgnezdov | 0:e8ce78953d20 | 17 | "target_overrides": { |
sgnezdov | 0:e8ce78953d20 | 18 | "*": { |
sgnezdov | 0:e8ce78953d20 | 19 | "target.features_add": ["NANOSTACK", "LOWPAN_ROUTER", "COMMON_PAL"], |
sgnezdov | 0:e8ce78953d20 | 20 | "mbed-mesh-api.6lowpan-nd-channel-page": 0, |
sgnezdov | 0:e8ce78953d20 | 21 | "mbed-mesh-api.6lowpan-nd-channel": 12 |
sgnezdov | 0:e8ce78953d20 | 22 | } |
sgnezdov | 0:e8ce78953d20 | 23 | } |
sgnezdov | 0:e8ce78953d20 | 24 | } |
sgnezdov | 0:e8ce78953d20 | 25 | ``` |
sgnezdov | 0:e8ce78953d20 | 26 | If you choose `ETHERNET` with `UBLOX_ODIN_EVK_W2` you must add this to your `target-overrides` section in `mbed_app.json`: |
sgnezdov | 0:e8ce78953d20 | 27 | ```json |
sgnezdov | 0:e8ce78953d20 | 28 | "UBLOX_EVK_ODIN_W2": { |
sgnezdov | 0:e8ce78953d20 | 29 | "target.device_has_remove": ["EMAC"] |
sgnezdov | 0:e8ce78953d20 | 30 | ``` |
sgnezdov | 0:e8ce78953d20 | 31 | |
sgnezdov | 0:e8ce78953d20 | 32 | If you choose `WIFI_ESP8266`, `WIFI_ODIN` or `WIFI_REALTEK`, you'll also need to add the WiFi SSID and password: |
sgnezdov | 0:e8ce78953d20 | 33 | |
sgnezdov | 0:e8ce78953d20 | 34 | ```json |
sgnezdov | 0:e8ce78953d20 | 35 | "config": { |
sgnezdov | 0:e8ce78953d20 | 36 | "network-interface":{ |
sgnezdov | 0:e8ce78953d20 | 37 | "help": "options are ETHERNET,WIFI_ESP8266,WIFI_ODIN,WIFI_REALTEK,MESH_LOWPAN_ND,MESH_THREAD", |
sgnezdov | 0:e8ce78953d20 | 38 | "value": "WIFI_ESP8266" |
sgnezdov | 0:e8ce78953d20 | 39 | }, |
sgnezdov | 0:e8ce78953d20 | 40 | "esp8266-tx": { |
sgnezdov | 0:e8ce78953d20 | 41 | "help": "Pin used as TX (connects to ESP8266 RX)", |
sgnezdov | 0:e8ce78953d20 | 42 | "value": "PTD3" |
sgnezdov | 0:e8ce78953d20 | 43 | }, |
sgnezdov | 0:e8ce78953d20 | 44 | "esp8266-rx": { |
sgnezdov | 0:e8ce78953d20 | 45 | "help": "Pin used as RX (connects to ESP8266 TX)", |
sgnezdov | 0:e8ce78953d20 | 46 | "value": "PTD2" |
sgnezdov | 0:e8ce78953d20 | 47 | }, |
sgnezdov | 0:e8ce78953d20 | 48 | "esp8266-debug": { |
sgnezdov | 0:e8ce78953d20 | 49 | "value": true |
sgnezdov | 0:e8ce78953d20 | 50 | }, |
sgnezdov | 0:e8ce78953d20 | 51 | "wifi-ssid": { |
sgnezdov | 0:e8ce78953d20 | 52 | "value": "\"SSID\"" |
sgnezdov | 0:e8ce78953d20 | 53 | }, |
sgnezdov | 0:e8ce78953d20 | 54 | "wifi-password": { |
sgnezdov | 0:e8ce78953d20 | 55 | "value": "\"Password\"" |
sgnezdov | 0:e8ce78953d20 | 56 | } |
sgnezdov | 0:e8ce78953d20 | 57 | } |
sgnezdov | 0:e8ce78953d20 | 58 | ``` |
sgnezdov | 0:e8ce78953d20 | 59 | |
sgnezdov | 0:e8ce78953d20 | 60 | If you use `MESH_LOWPAN_ND` or `MESH_THREAD` you will need to specify your radio module: |
sgnezdov | 0:e8ce78953d20 | 61 | |
sgnezdov | 0:e8ce78953d20 | 62 | ```json |
sgnezdov | 0:e8ce78953d20 | 63 | "config": { |
sgnezdov | 0:e8ce78953d20 | 64 | "network-interface":{ |
sgnezdov | 0:e8ce78953d20 | 65 | "help": "options are ETHERNET,WIFI_ESP8266,WIFI_ODIN,MESH_LOWPAN_ND,MESH_THREAD", |
sgnezdov | 0:e8ce78953d20 | 66 | "value": "MESH_LOWPAN_ND" |
sgnezdov | 0:e8ce78953d20 | 67 | }, |
sgnezdov | 0:e8ce78953d20 | 68 | "mesh_radio_type": { |
sgnezdov | 0:e8ce78953d20 | 69 | "help": "options are ATMEL, MCR20, SPIRIT1", |
sgnezdov | 0:e8ce78953d20 | 70 | "value": "ATMEL" |
sgnezdov | 0:e8ce78953d20 | 71 | } |
sgnezdov | 0:e8ce78953d20 | 72 | } |
sgnezdov | 0:e8ce78953d20 | 73 | ``` |
sgnezdov | 0:e8ce78953d20 | 74 | |
sgnezdov | 0:e8ce78953d20 | 75 | ## Using Easy Connect from your application |
sgnezdov | 0:e8ce78953d20 | 76 | |
sgnezdov | 0:e8ce78953d20 | 77 | Easy Connect has just one function which will either return a `NetworkInterface`-pointer or `NULL`: |
sgnezdov | 0:e8ce78953d20 | 78 | |
sgnezdov | 0:e8ce78953d20 | 79 | ```cpp |
sgnezdov | 0:e8ce78953d20 | 80 | #include "easy-connect.h" |
sgnezdov | 0:e8ce78953d20 | 81 | |
sgnezdov | 0:e8ce78953d20 | 82 | int main(int, char**) { |
sgnezdov | 0:e8ce78953d20 | 83 | NetworkInterface* network = easy_connect(true); /* has 1 argument, enable_logging (pass in true to log to serial port) */ |
sgnezdov | 0:e8ce78953d20 | 84 | if (!network) { |
sgnezdov | 0:e8ce78953d20 | 85 | printf("Connecting to the network failed... See serial output.\r\n"); |
sgnezdov | 0:e8ce78953d20 | 86 | return 1; |
sgnezdov | 0:e8ce78953d20 | 87 | } |
sgnezdov | 0:e8ce78953d20 | 88 | |
sgnezdov | 0:e8ce78953d20 | 89 | // Rest of your program |
sgnezdov | 0:e8ce78953d20 | 90 | } |
sgnezdov | 0:e8ce78953d20 | 91 | ``` |
sgnezdov | 0:e8ce78953d20 | 92 | ## CR/LF in serial output |
sgnezdov | 0:e8ce78953d20 | 93 | |
sgnezdov | 0:e8ce78953d20 | 94 | If you want to avoid using `\r\n` in your printouts and just use normal C-style `\n` instead, please specify these to your `mbed_app.json` |
sgnezdov | 0:e8ce78953d20 | 95 | |
sgnezdov | 0:e8ce78953d20 | 96 | ```json |
sgnezdov | 0:e8ce78953d20 | 97 | "target_overrides": { |
sgnezdov | 0:e8ce78953d20 | 98 | "*": { |
sgnezdov | 0:e8ce78953d20 | 99 | "platform.stdio-baud-rate": 115200, |
sgnezdov | 0:e8ce78953d20 | 100 | "platform.stdio-convert-newlines": true |
sgnezdov | 0:e8ce78953d20 | 101 | } |
sgnezdov | 0:e8ce78953d20 | 102 | } |
sgnezdov | 0:e8ce78953d20 | 103 | ``` |
sgnezdov | 0:e8ce78953d20 | 104 | |
sgnezdov | 0:e8ce78953d20 | 105 | ## Network errors |
sgnezdov | 0:e8ce78953d20 | 106 | |
sgnezdov | 0:e8ce78953d20 | 107 | If easy-connect cannot connect to the network it returns a network error, with an error code. To see what these error code mean, see the [mbed OS Communication API](https://docs.mbed.com/docs/mbed-os-api-reference/en/latest/APIs/communication/network_sockets/#network-errors). |
sgnezdov | 0:e8ce78953d20 | 108 | |
sgnezdov | 0:e8ce78953d20 | 109 | ## Extra defines |
sgnezdov | 0:e8ce78953d20 | 110 | |
sgnezdov | 0:e8ce78953d20 | 111 | If you'd like to use Easy Connect with mbed Client then you're in luck. Easy Connect automatically defines the `MBED_SERVER_ADDRESS` macro depending on your connectivity method (either IPv4 or IPv6 address). Use this address to connect to the right instance of mbed Device Connector. |