MQTT demo program for Nucleo F401RE and Seeedstudio W5200 Ethernet Shield which is based on Wiznet IBMIoTClientEthernetExample_W5500.

Dependencies:   MQTT W5200Interface mbed DHT11

Fork of IBMIoTClientEthernetExample_W5500 by W5500-Ethernet-Interface Makers

I post description regarding this source code here.

http://developer.mbed.org/users/hillkim7/notebook/ibmiotclientethernetexample_w5200/

Revision:
3:64a7d39e423b
Parent:
2:87c816cd88e2
Child:
4:0c9bdee36e2a
--- a/main.cpp	Mon Sep 29 05:06:13 2014 +0000
+++ b/main.cpp	Thu Dec 25 11:25:49 2014 +0000
@@ -2,13 +2,42 @@
 #include "MQTTClient.h"
 #include "MQTTEthernet.h"
 
+/* Dec 25, 2014
+This tutorial program is written to test IBM MQTT client functionality.
+This program is based on sample from Wiznet team but they only provides sample for W5500 chip.
+http://developer.mbed.org/teams/EthernetInterfaceW5500-makers/
+So I import that program and change it to run on W5200 chip.
+
+You don't need to subscribe IBM cloud service to test demo.
+You can check it in QUICKSTARTMODE 1.
+
+Test Environment:
+Nucleo F401RE + Seeedstudio W5200 Ethernet Shield.
+
+Before you run this sample it is strongly recommended to read quick overview page from IBM.
+https://developer.ibm.com/iot/recipes/improvise-connect-quickstart/
+
+Once you are success to compile and run this sample you can see demo result with your web browser
+by typing MAC address in " https://quickstart.internetofthings.ibmcloud.com/".
+Don't forget to change hard-coded MAC address in "W5200.cpp" file.
+
+
+Keep in mind, MAC address in client ID field should be lowercase.
+Original Wiznet code don't consider this and took my time.
+char id[30] = ID; // <<---- MAC address in this variable
+*/
+
 // Configuration values needed to connect to IBM IoT Cloud
-#define QUICKSTARTMODE 0
+// Defined "QUICKSTARTMODE 1" unless you subscribed IBM IoT service.
+
+#define QUICKSTARTMODE 1
+
 #if (QUICKSTARTMODE)
-#define ORG "uasfg"
-#define ID ""
-#define AUTH_TOKEN "mhhWy4Qg)C*w3jL@(O"
-#define TYPE "W5500"
+// Configuration values needed to connect to IBM IoT Cloud
+#define ORG "quickstart"             // For a registered connection, replace with your org
+#define ID ""                        // For a registered connection, replace with your id
+#define AUTH_TOKEN ""                // For a registered connection, replace with your auth-token
+#define TYPE "iotsample-mbed-nucleo"
 #else
 #define ORG "uasfg"
 #define ID ""
@@ -41,6 +70,13 @@
     char* pos;                                                 // Remove colons from mac address
     while ((pos = strchr(buf, ':')) != NULL)
         memmove(pos, pos + 1, strlen(pos) + 1);
+
+	size_t len = strlen(buf);
+	while (len-- > 0)
+		if (buf[len] >= 'A' && buf[len] <= 'Z')
+		{
+			buf[len] = buf[len] + ('a' - 'A');
+		}
     return buf;
 }
 
@@ -51,6 +87,9 @@
 
     char hostname[strlen(org) + strlen(iot_ibm) + 1];
     sprintf(hostname, "%s%s", org, iot_ibm);
+
+	//strcpy(hostname, "192.168.11.203");
+    DEBUG("connect host='%s' port=%u\r\n", hostname, IBM_IOT_PORT);
     int rc = ipstack->connect(hostname, IBM_IOT_PORT);
 
     if (rc != 0)
@@ -76,6 +115,10 @@
     {
         connected = true;
     }
+	else
+	{		
+        WARN("MQTT client connect error: %d\r\n", rc);
+	}
 
     return rc;
 }
@@ -114,8 +157,8 @@
 
     char buf[250];
     sprintf(buf,
-     "{\"d\":{\"myName\":\"IoT mbed\",\"cputemp\":%0.4f,\"testvalue\":%s}}",
-            12.4,"W5500");
+     "{\"d\":{\"myName\":\"IoT mbed\",\"test_value\":%d}}",
+            12+(rand()%10));
 
     message.qos = MQTT::QOS0;
     message.retained = false;
@@ -161,24 +204,35 @@
 
 int main()
 {    
-#if defined(TARGET_KL25Z)
+//#if defined(TARGET_KL25Z)
     Serial pc(USBTX, USBRX);
     pc.baud(115200);
 
     SPI spi(D11, D12, D13); // mosi, miso, sclk
     wait(1);
-    
+
+#if defined(TARGET_STM32F401RE)
+    MQTTEthernet ipstack(&spi, D10, D5);
+#else
     MQTTEthernet ipstack(&spi, D10, D9); //scs(D10), nRESET(PTA20)
+#endif
     MQTT::Client<MQTTEthernet, Countdown, MQTT_MAX_PACKET_SIZE> client(ipstack);
-#endif    
+//#endif    
 
+	LOG("ETH MAC: %s IP: %s GW: %s\r\n",
+		ipstack.getEth().getMACAddress(),
+		ipstack.getEth().getIPAddress(),
+		ipstack.getEth().getGateway());
     getMac(ipstack.getEth(), id, sizeof(id));
+	LOG("attemptConnect\r\n");
     attemptConnect(&client, &ipstack);
 
     int count = 0;
     while (true)
     {
         if (!ipstack.getEth().linkstatus()) {
+			WARN("Reset on link down\r\n");
+			wait(1);
             NVIC_SystemReset();
             // if ipstack and client were on the heap we could deconstruct and goto a label where they are constructed
             //  or maybe just add the proper members to do this disconnect and call attemptConnect(...)
@@ -187,10 +241,14 @@
         if (++count == 100)
         {               // Publish a message every second
             if (publish(&client, &ipstack) != 0)
-                attemptConnect(&client, &ipstack);   // if we have lost the connection
+            {
+				WARN("publish error\r\n");
+                //attemptConnect(&client, &ipstack);   // if we have lost the connection
+            }
             count = 0;
         }
 
         client.yield(10);  // allow the MQTT client to receive messages
     }
 }
+