WiFi AP example for Odin-W2

mbed-os-example-odinw2-wifi-ap

Wi-Fi access point example for Mbed OS

Getting started with the Wi-Fi API

This is an example of a Wi-Fi access point application using the odinWiFiInterface and network socket APIs that [Mbed OS](https://github.com/ARMmbed/mbed-os) provides.

The program brings up the Wi-Fi access point and the underlying network interface and brings up a TCP echo server on access point.

Supported hardware

Getting started

1. Import the example.

mbed import mbed-os-example-odinw2-wifi-ap cd mbed-os-example-odinw2-wifi-ap

2. Configure the Wi-Fi to enable and use access point.

Edit mbed_app.json to include the correct Wi-Fi configurations, SSID and password:

   "macros": ["DEVICE_WIFI_AP=1"],
      "config": {
           "wifi-ssid": {
            "help": "AP SSID",
            "value": "\"odin-w2\""
				},
			"ap-ip": {
            "help": "AP IP",
            "value": "\"ip value\""
				},
			"ap-netmask": {
            "help": "Netmask",
            "value": "\"netmask value\""
				},
			"ap-gateway": {
            "help": "Network gateway",
            "value": "\"gateway value\""
				},
			"ap-channel": {
            "help": "AP channel",
            "value": "\"some channel\""
				},
			"wifi-password": {
            "help": "WiFi Password",
            "value": "\"some pass\""
				}

3. Compile and generate binary.

For example, for 'GCC':

mbed compile -t GCC_ARM -m UBLOX_EVK_ODIN_W2 ```

4. 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-odinw2-wifi-ap' in the folder 'mbed-os-example-odinw2-wifi-ap/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:

Starting AP

AP started successfully

TCP: connected with 10.0.0.1 server

7. After the server message is displayed, connect a TCP client, upton sending a message to server, message will be echoed to client.

Limitations

1. DHCP mode is not supported.

Files at this revision

API Documentation at this revision

Comitter:
AmmadRehmatUbx
Date:
Mon Sep 24 09:19:50 2018 +0000
Child:
1:b7bd774d83cb
Commit message:
WiFi AP example mbed-os

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed_app.json Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Sep 24 09:19:50 2018 +0000
@@ -0,0 +1,145 @@
+/* WiFi AP Example
+ * Copyright (c) 2018 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mbed.h"
+#include "OdinWiFiInterface.h"
+#include "TCPSocket.h"
+#include <string> 
+
+#ifdef DEVICE_WIFI_AP
+static const char *wifi_ssid = MBED_CONF_APP_WIFI_SSID;
+static const char *wifi_password = MBED_CONF_APP_WIFI_PASSWORD;
+static const char *ap_ip = MBED_CONF_APP_AP_IP;
+static const char *ap_netmask = MBED_CONF_APP_AP_NETMASK;
+static const char *ap_gateway = MBED_CONF_APP_AP_GATEWAY;
+#endif
+
+#define ECHO_SERVER_PORT   5050
+
+OdinWiFiInterface   *_wifi;
+
+
+static void start_ap(nsapi_security_t security = NSAPI_SECURITY_WPA_WPA2)
+{
+    nsapi_error_t error_code;
+
+    printf("\nStarting AP\n");
+
+    // AP Configure and start
+    error_code = _wifi->set_ap_network(ap_ip, ap_netmask, ap_gateway);
+    MBED_ASSERT(error_code == NSAPI_ERROR_OK);
+    
+    //DHCP not available
+    error_code = _wifi->set_ap_dhcp(false);
+    MBED_ASSERT(error_code == NSAPI_ERROR_OK);
+    
+    //Set beacon interval to default value
+    _wifi->set_ap_beacon_interval(100);
+    
+    //Set ap ssid, password and channel
+    error_code = _wifi->ap_start(wifi_ssid, wifi_password, security, cbWLAN_CHANNEL_01);
+    MBED_ASSERT(error_code == NSAPI_ERROR_OK);
+    
+    printf("\nAP started successfully\n");
+}
+
+
+static void stop_ap()
+{
+    nsapi_error_t error_code;
+
+    error_code = _wifi->ap_stop();
+    MBED_ASSERT(error_code == NSAPI_ERROR_OK);
+    
+    printf("\nAP stopped\n");
+
+}
+ 
+int main()
+{
+    nsapi_size_or_error_t errcode;
+    nsapi_error_t *err;
+    TCPSocket sock, *sock_data;
+    int n = 0;
+    char recv_buf[1024];
+    
+    /*Start AP*/
+    
+    _wifi = new OdinWiFiInterface(true);
+
+    start_ap(); 
+    
+    /*Socket initialization*/
+    
+    errcode = sock.open(_wifi);
+    if (errcode != NSAPI_ERROR_OK) {
+        printf("TCPSocket.open() fails, code: %d\n", errcode);
+        return -1;
+    }  
+
+    errcode = sock.bind("10.0.0.1", ECHO_SERVER_PORT);
+    if (errcode < 0) {
+        printf("TCPSocket.connect() fails, code: %d\n", errcode);
+        return -1;
+    }
+    else {
+        printf("TCP: connected with %s server\n", "10.0.0.1");
+    }
+   
+    /*Echo server*/
+    if (sock.listen() == 0)
+    {
+        sock_data = sock.accept(err = NULL);
+        
+        if (sock_data != NULL)
+        {
+            while (true)
+            {
+                n = sock_data->recv((void*) recv_buf, sizeof(recv_buf));
+                if (n > 0) 
+                {
+                    printf("\n Received from client %d bytes: %s \n", n, recv_buf);
+                    
+                    errcode = sock_data->send((void*) recv_buf, n);
+                    if (errcode < 0)
+                    {
+                        printf("\n TCPSocket.send() fails, code: %d\n", errcode);
+                        return -1;
+                    }
+                    else 
+                    {
+                        printf("\n TCP: Sent %d Bytes to client\n", n);
+                    }
+                }
+                else
+                {
+                    printf("\n TCPSocket.recv() failed");
+                    return -1;
+                }
+              
+            }
+
+        }
+
+    }
+    
+    sock_data->close();
+    sock.close();
+    
+    stop_ap();
+                        
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed_app.json	Mon Sep 24 09:19:50 2018 +0000
@@ -0,0 +1,29 @@
+{
+    "macros": ["DEVICE_WIFI_AP=1"],
+    "config": {
+        "wifi-ssid": {
+            "help": "AP SSID",
+            "value": "\"odin-w2\""
+        },
+        "ap-ip": {
+            "help": "AP IP",
+            "value": "\"ip value\""
+        },
+        "ap-netmask": {
+            "help": "Netmask",
+            "value": "\"netmask value\""
+        },
+        "ap-gateway": {
+            "help": "Network gateway",
+            "value": "\"gateway value\""
+        },
+        "ap-channel": {
+            "help": "AP channel",
+            "value": "\"some channel\""
+        },
+        "wifi-password": {
+            "help": "WiFi Password",
+            "value": "\"some pass\""
+        }
+    }
+}