WiFi example for mbed OS, fork from https://github.com/ARMmbed/mbed-os-example-wifi

This is an example of a Wi-Fi application using the Wi-Fi and network socket APIs that Mbed OS provides.

The program brings up the Wi-Fi and the underlying network interface and uses it to scan available networks, connects to a network, prints interface and connection details and performs an HTTP operation.

For more information about Wi-Fi APIs, please visit the Mbed OS Wi-Fi documentation.

This example has been used on the following platforms

Revision:
5:01be82512f7a
Parent:
0:0593b97dec0b
--- a/README.md	Thu Feb 22 09:22:32 2018 +0000
+++ b/README.md	Wed Dec 12 05:22:58 2018 +0000
@@ -12,17 +12,33 @@
 
 ### Supported hardware ###
 
-* [u-blox Odin board](https://os.mbed.com/platforms/ublox-EVK-ODIN-W2/) built-in Wi-Fi module.
-* [Realtek RTL8195AM](https://os.mbed.com/platforms/REALTEK-RTL8195AM/) built-in Wi-Fi module.
-* [NUCLEO-F401RE](https://os.mbed.com/platforms/ST-Nucleo-F401RE/) with [X-NUCLEO-IDW04A1](http://www.st.com/content/st_com/en/products/ecosystems/stm32-open-development-environment/stm32-nucleo-expansion-boards/stm32-ode-connect-hw/x-nucleo-idw04a1.html) Wi-Fi expansion board using pins D8 and D2 _(of the Arduino connector)_.
-* [NUCLEO-F401RE](https://os.mbed.com/platforms/ST-Nucleo-F401RE/) with [X-NUCLEO-IDW01M1](https://os.mbed.com/components/X-NUCLEO-IDW01M1/) Wi-Fi expansion board using pins PA_9 and PA_10 _(of the Morpho connector)_.
-* [NUCLEO-F429ZI](https://os.mbed.com/platforms/ST-Nucleo-F429ZI/) with ESP8266-01 module using pins D1 and D0.
-* [NUCLEO-L476RG](https://os.mbed.com/platforms/ST-Nucleo-L476RG/) with ESP8266-01 module using pins D8 and D2.
-* [GR-LYCHEE](https://os.mbed.com/platforms/Renesas-GR-LYCHEE/) with ESP32 module using pins P5_3, P3_14, P7_1 and P0_1.
-* Other Mbed targets with an ESP8266 module, [X-NUCLEO-IDW04A1](http://www.st.com/content/st_com/en/products/ecosystems/stm32-open-development-environment/stm32-nucleo-expansion-boards/stm32-ode-connect-hw/x-nucleo-idw04a1.html) or [X-NUCLEO-IDW01M1](https://os.mbed.com/components/X-NUCLEO-IDW01M1/) expansion board.
-  *(The Mbed target board the Wi-Fi shield connects to shouldn't have any other network interface, for example Ethernet.)*
+* All Mbed OS boards with build-in Wi-Fi module:
+    * [u-blox ODIN-W2](https://os.mbed.com/platforms/ublox-EVK-ODIN-W2/)
+    * [Realtek RTL8195AM](https://os.mbed.com/platforms/REALTEK-RTL8195AM/)
+    * [ST DISCO IOT board](https://os.mbed.com/platforms/ST-Discovery-L475E-IOT01A/) with integrated [ISM43362 WiFi Inventek module](https://github.com/ARMmbed/wifi-ism43362).
+    * [ST DISCO_F413ZH board](https://os.mbed.com/platforms/ST-Discovery-F413H/) with integrated [ISM43362 WiFi Inventek module](https://github.com/ARMmbed/wifi-ism43362).
+    * [Advantech WISE-150](https://os.mbed.com/modules/advantech-wise-1530/)
+    * USI WM-BN-BM-22
+    * MxChip EMW3166
+    * [GR-LYCHEE](https://os.mbed.com/platforms/Renesas-GR-LYCHEE/) with ESP32 module using pins P5_3, P3_14, P7_1 and P0_1.
+* Boards with external WiFi shields.
+    * [NUCLEO-F401RE](https://os.mbed.com/platforms/ST-Nucleo-F401RE/) with [X-NUCLEO-IDW04A1](http://www.st.com/content/st_com/en/products/ecosystems/stm32-open-development-environment/stm32-nucleo-expansion-boards/stm32-ode-connect-hw/x-nucleo-idw04a1.html) Wi-Fi expansion board using pins D8 and D2 _(of the Arduino connector)_.
+    * [NUCLEO-F401RE](https://os.mbed.com/platforms/ST-Nucleo-F401RE/) with [X-NUCLEO-IDW01M1](https://os.mbed.com/components/X-NUCLEO-IDW01M1/) Wi-Fi expansion board using pins PA_9 and PA_10 _(of the Morpho connector)_.
+    * [NUCLEO-F429ZI](https://os.mbed.com/platforms/ST-Nucleo-F429ZI/) with ESP8266-01 module using pins D1 and D0.
+    * [NUCLEO-L476RG](https://os.mbed.com/platforms/ST-Nucleo-L476RG/) with ESP8266-01 module using pins D8 and D2.
+    * Other Mbed targets with an ESP8266 module, [X-NUCLEO-IDW04A1](http://www.st.com/content/st_com/en/products/ecosystems/stm32-open-development-environment/stm32-nucleo-expansion-boards/stm32-ode-connect-hw/x-nucleo-idw04a1.html) or [X-NUCLEO-IDW01M1](https://os.mbed.com/components/X-NUCLEO-IDW01M1/) expansion board.
 
-ESP8266 is a fallback option if the build is for unsupported platform.
+#### Adding connectivity driver
+
+If the target does not have internal WiFi driver, or Mbed OS does not supply one, you need to add driver to your application and configure it to provide default WiFi interface.
+
+```
+mbed add <driver>
+```
+
+For example adding ISM43362 driver `mbed add wifi-ism43362` or ESP8266 `mbed add esp8266-driver` or X-Nucleo-IDW01M1 driver `mbed add wifi-x-nucleo-idw01m1`
+
+Then pin names need to be configured as instructed in the drivers README file.
 
 #### Connecting the ESP8266 ####
 
@@ -42,73 +58,74 @@
    mbed import mbed-os-example-wifi
    cd mbed-os-example-wifi
    ```
-   
-2. Configure the Wi-Fi shield to use.
 
+1. Configure the Wi-Fi shield and settings.
    Edit ```mbed_app.json``` to include the correct Wi-Fi shield, SSID and password:
 
-   ```
-       "config": {
- 	  "wifi-shield": {
-               "help": "Options are internal, WIFI_ESP8266, WIFI_IDW0XX1, WIFI_ESP32",
-               "value": "internal"
-        	  },
-           "wifi-ssid": {
-               "help": "WiFi SSID",
-               "value": "\"SSID\""
-           },
-           "wifi-password": {
-               "help": "WiFi Password",
-               "value": "\"Password\""
-           }
-       },
-   ```
+```json
+{
+    "config": {
+        "wifi-ssid": {
+            "help": "WiFi SSID",
+            "value": "\"SSID\""
+        },
+        "wifi-password": {
+            "help": "WiFi Password",
+            "value": "\"PASSWORD\""
+        }
+    },
+    "target_overrides": {
+        "*": {
+            "platform.stdio-convert-newlines": true,
+            "esp8266.provide-default" : false
+        }
+    }
+}
+```
 
-   Sample ```mbed_app.json``` files are provided for ESP8266 (```mbed_app_esp8266.json```), X-NUCLEO-IDW04A1 (```mbed_app_idw04a1.json```), X-NUCLEO-IDW01M1 (```mbed_app_idw01m1```) and ESP32 (```mbed_app_esp32.json```).
-   
-   For built-in Wi-Fi, ignore the value of `wifi-shield`.
+   For build-in WiFi, you do not need to set any `provide-default` values. Those are required
+   if you use external WiFi shield.
 
-3. Compile and generate binary.
+   Sample ```mbed_app.json``` files are provided for ESP8266 (```mbed_app_esp8266.json```), X-NUCLEO-IDW04A1 (```mbed_app_idw04a1.json```) and X-NUCLEO-IDW01M1 (```mbed_app_idw01m1```).
+
 
-   For example, for `GCC`:
+1. Compile and generate binary.
+    For example, for `GCC`:
+    ```
+    mbed compile -t GCC_ARM -m UBLOX_EVK_ODIN_W2
+    ```
 
-   ```
-   mbed compile -t GCC_ARM -m UBLOX_EVK_ODIN_W2
-   ```
-   
- 4. Open a serial console session with the target platform using the following parameters:
- 
+1. Open a serial console session with the target platform using the following parameters:
     * **Baud rate:** 9600
     * **Data bits:** 8
     * **Stop bits:** 1
     * **Parity:** None
- 
- 5. Copy or drag the application `mbed-os-example-wifi.bin` in the folder `mbed-os-example-wifi/BUILD/<TARGET NAME>/<PLATFORM NAME>` onto the target board.
- 
- 6. The serial console should display a similar output to below, indicating a successful Wi-Fi connection:
- 
- ```
- WiFi example
+
+1. Copy or drag the application `mbed-os-example-wifi.bin` in the folder `mbed-os-example-wifi/BUILD/<TARGET NAME>/<PLATFORM NAME>` onto the target board.
 
-Scan:
-Network: Dave Hot Spot secured: Unknown BSSID: 00:01:02:03:04:05 RSSI: -58 Ch: 1
-1 network available.
+1. The serial console should display a similar output to below, indicating a successful Wi-Fi connection:
+    ```
+    WiFi example
+
+    Scan:
+    Network: Dave Hot Spot secured: Unknown BSSID: 00:01:02:03:04:05 RSSI: -58 Ch: 1
+    1 network available.
 
-Connecting...
-Success
+    Connecting...
+    Success
 
-MAC: 00:01:02:03:04:05
-IP: 192.168.0.5
-Netmask: 255.255.255.0
-Gateway: 192.168.0.1
-RSSI: -27
+    MAC: 00:01:02:03:04:05
+    IP: 192.168.0.5
+    Netmask: 255.255.255.0
+    Gateway: 192.168.0.1
+    RSSI: -27
 
-Sending HTTP request to www.arm.com...
-sent 38 [GET / HTTP/1.1]
-recv 64 [HTTP/1.1 301 Moved Permanently]
+    Sending HTTP request to www.arm.com...
+    sent 38 [GET / HTTP/1.1]
+    recv 64 [HTTP/1.1 301 Moved Permanently]
 
-Done
-```
+    Done
+    ```
 
 ## Troubleshooting