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
I post description regarding this source code here.
http://developer.mbed.org/users/hillkim7/notebook/ibmiotclientethernetexample_w5200/
Diff: main.cpp
- Revision:
- 3:64a7d39e423b
- Parent:
- 2:87c816cd88e2
- Child:
- 4:0c9bdee36e2a
diff -r 87c816cd88e2 -r 64a7d39e423b main.cpp --- 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 } } +