Connect through Wifi to IBM MQTT cloud https://quickstart.internetofthings.ibmcloud.com

Dependencies:   MQTT NetworkSocketAPI X_NUCLEO_IDW01M1v2 X_NUCLEO_IKS01A1 mbed NDefLib X_NUCLEO_NFC01A1

Fork of IDW01M1_Cloud_IBM by ST Expansion SW Team

To start the demo the following expansion boards are required

X_NUCLEO_IDW01M1v2, X_NUCLEO_IKS01A1, X_NUCLEO_NFC01A1

After having mounted the board stack on the Nucleo board the below steps should be followed:

  • Program in the application source code you local WiFi SSID and password and flash the binary. Make sure the Wifi network has visible SSID.
  • Reset the Nucleo board and after few seconds the Nucleo green led will be on (it means the Nucleo is connected to the local Wifi and to the IBM cloud server)
  • Read the NFC tag with an Android device and the browser will be automatically opened and directed to the specific brocker IBM demo page where the environmental values are displayed in form of a x-y graph. The values are updated every few seconds. On the Hyperterminal is possible to see the values sent to the IBM cloud server and the board mac address to be entered on the IBM quickstart web page if a manual connection is needed (eg. to connect from a PC browser).
Revision:
8:6df01cb43137
Parent:
6:0d838d564181
Child:
10:c7b62ce013ad
--- a/main.cpp	Tue Apr 19 08:25:01 2016 +0000
+++ b/main.cpp	Fri May 13 12:24:36 2016 +0000
@@ -7,65 +7,63 @@
 // 9600 bauds, 8-bit data, no parity
 //------------------------------------
 
-Serial pc(SERIAL_TX, SERIAL_RX);
- 
+Serial pc(SERIAL_TX, SERIAL_RX); 
 DigitalOut myled(LED1);
-
 SpwfSAInterface spwf(PA_9, PA_10, PC_12, PC_8, PA_12, true);
-TCPSocket tcp_(&spwf);    
     
 int main() {
-    int32_t err;    
+    int err;    
     char * ssid = "STM";
     char * seckey = "STMdemoPWD";
-    char * data = "Hello World!\r\n";
-    uint32_t len = strlen(data);
     
     pc.printf("\r\nX-NUCLEO-IDW01M1 mbed Application\r\n");     
-    pc.printf("\r\n[APP] connecting to AP\r\n");
+    pc.printf("\r\nconnecting to AP\r\n");
             
-    err = spwf.connect(ssid, seckey, NS_SECURITY_WPA);
+    err = spwf.connect(ssid, seckey, NSAPI_SECURITY_WPA);
     if(err!=0)
     {
-        pc.printf("\r\n[APP] error connecting to AP.\r\n");
+        pc.printf("\r\nerror connecting to AP.\r\n");
         return -1;
     }
     
-    pc.printf("\r\n[APP] now connected\r\n");
+    pc.printf("\r\nnow connected\r\n");
             
-    const char *ip = spwf.getIPAddress();
-    const char *mac = spwf.getMACAddress();
+    const char *ip = spwf.get_ip_address();
+    const char *mac = spwf.get_mac_address();
     
-    pc.printf("\r\n[APP] IP Address is: %s\r\n", (ip) ? ip : "No IP");
-    pc.printf("\r\n[APP] MAC Address is: %s\r\n", (mac) ? mac : "No MAC");
+    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");
+    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");   //time-d.nist.gov
     
-    pc.printf("\r\n[APP] opening socket\r\n");
-          
-    err = tcp_.open("time-d.nist.gov", 37);
-            
-    if(err==0)
-    {                
-        pc.printf("\r\n[APP] socket open OK\r\n");
-        pc.printf("\r\n[APP] hostname resolved to: %s\r\n", tcp_.getIPAddress());
+    TCPSocket socket(&spwf);
+    err = socket.connect("time-d.nist.gov", 37);
+    if(err!=0) 
+    {
+      pc.printf("\r\nCould not connect to Socket, err = %d!!\r\n", err); 
+      return -1;
+    }
+    char buffer[64];
+    int count = 0;
+    pc.printf("\r\nReceiving Data\r\n"); 
+    count = socket.recv(buffer, sizeof buffer);
+    
+    if(count > 0)
+    {
+        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();
         
-        err = tcp_.send(data, len);
-        
-        if(err == 0)
-            pc.printf("\r\n[APP] socket send OK\r\n");
-        else
-            pc.printf("\r\n[APP] socket send error\r\n");
-        
-        char received[4];
-        int32_t size = 0;
-        pc.printf("\r\n[APP] waiting for data recv\r\n");
-        size = tcp_.recv(received, sizeof(received));
-        if(size==0) 
-            pc.printf("\r\n[APP] Receive error.");
-        else
-            pc.printf("\r\n[APP] Received: %ld bytes, 0x%02x 0x%02x 0x%02x 0x%02x\r\n", size, received[0], received[1], received[2], received[3]);
-    }            
-    else 
-        pc.printf("\r\n[APP] socket open Error\r\n");
+    pc.printf("\r\ndisconnecting....\r\n");
+    spwf.disconnect();
+    pc.printf("\r\nTest complete.\r\n");
                 
     while(1) { 
       wait(1);