Connect a secure socket with TLS server authentication through X-NUCLEO_IDW01M1 Wi-Fi.

Dependencies:   NetworkSocketAPI X_NUCLEO_IDW01M1v2 mbed

Fork of HelloWorld_IDW01M1v2 by ST

Example of TLS connection using X-NUCLEO-IDW01M1 Wi-Fi expansion board.
The application is meant to be used with mbed OS 2 ("Classic") only (no mbedOS 5 support).
It uses the TLS/SSL feature provided natively by the Wi-Fi module and performs secure connection to https://mbed.org also verifying the server identity.
To avoid expired CA certificates, system time (in epoch) must be manually entered (e..g. using http://www.epochconverter.com/ ) .
Retrieval of current time from an NTP server is shown by this example.

Files at this revision

API Documentation at this revision

Comitter:
mridup
Date:
Fri Jul 08 06:28:58 2016 +0000
Child:
1:daf71fa3674c
Commit message:
example program with X_NUCLEO_IDW01M1v2 library

Changed in this revision

NetworkSocketAPI.lib Show annotated file Show diff for this revision Revisions of this file
X_NUCLEO_IDW01M1v2.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/NetworkSocketAPI.lib	Fri Jul 08 06:28:58 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/NetworkSocketAPI/code/NetworkSocketAPI/#ea3a618e0818
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/X_NUCLEO_IDW01M1v2.lib	Fri Jul 08 06:28:58 2016 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/mridup/code/X_NUCLEO_IDW01M1v2/#2f3f156a3b0b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Jul 08 06:28:58 2016 +0000
@@ -0,0 +1,94 @@
+/* SpwfInterface NetworkSocketAPI Example Program
+ * Copyright (c) 2015 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 "SpwfInterface.h"
+#include "TCPSocket.h"
+
+//------------------------------------
+// Hyperterminal configuration
+// 9600 bauds, 8-bit data, no parity
+//------------------------------------
+
+Serial pc(SERIAL_TX, SERIAL_RX); 
+DigitalOut myled(LED1);
+SpwfSAInterface spwf(PA_9, PA_10, false);
+    
+int main() {
+    int err;    
+    char * ssid = "STM";
+    char * seckey = "STMdemoPWD";
+    
+    pc.printf("\r\nX-NUCLEO-IDW01M1 mbed Application\r\n");     
+    pc.printf("\r\nconnecting to AP\r\n");
+            
+    if(spwf.connect(ssid, seckey, NSAPI_SECURITY_WPA2)) {      
+        pc.printf("\r\nnow connected\r\n");
+    } else {
+        pc.printf("\r\nerror connecting to AP.\r\n");
+        return -1;
+    }   
+            
+    const char *ip = spwf.get_ip_address();
+    const char *mac = spwf.get_mac_address();
+    
+    pc.printf("\r\nIP Address is: %s\r\n", (ip) ? ip : "No IP");
+    pc.printf("\r\nMAC Address is: %s\r\n", (mac) ? mac : "No MAC");    
+    
+    SocketAddress addr(&spwf, "st.com");   
+    pc.printf("\r\nst.com resolved to: %s\r\n", addr.get_ip_address());    
+
+    pc.printf("\r\nconnecting to http://time-d.nist.gov\r\n");
+    
+    TCPSocket socket(&spwf);
+    //err = socket.connect("192.168.1.6", 32000);
+    err = socket.connect("4.ifcfg.me", 23);//"4.ifcfg.me", 23;//"time-d.nist.gov", 37
+    if(err!=0) 
+    {
+      pc.printf("\r\nCould not connect to Socket, err = %d!!\r\n", err); 
+      return -1;
+    } else pc.printf("\r\nconnected to host server\r\n"); 
+    
+    //char * str = "test";
+    //socket.send(str, strlen(str));
+    
+#if 1
+    char buffer[64];
+    int count = 0;
+    pc.printf("\r\nReceiving Data\r\n"); 
+    count = socket.recv(buffer, sizeof buffer);
+    
+    if(count > 0)
+    {
+        printf("public IP address is: %s\r\n", &buffer[15]);
+        //pc.printf("\r\nReceived: %ld bytes, 0x%02x 0x%02x 0x%02x 0x%02x\r\n", \
+          //                  count, buffer[0], buffer[1], buffer[2], buffer[3]);
+    }
+    else pc.printf("\r\nData not received\r\n");
+
+    //pc.printf("\r\nClosing Socket\r\n");
+   // socket.close();
+        
+    //pc.printf("\r\ndisconnecting....\r\n");
+    //spwf.disconnect();
+    //pc.printf("\r\nTest complete.\r\n");
+#endif
+                
+    while(1) { 
+      wait(1);
+      myled = !myled;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Jul 08 06:28:58 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/6c34061e7c34
\ No newline at end of file