MQTT cellular example

Dependencies:   C027_Support C12832 MQTT mbed

Fork of Cellular_HelloMQTT by Michael Ammann

Revision:
8:b32c94be6522
Parent:
7:3de634f2d40c
Child:
10:6f1c3b718b9c
--- a/main.cpp	Sun May 11 19:17:05 2014 +0000
+++ b/main.cpp	Mon May 12 09:59:50 2014 +0000
@@ -26,9 +26,33 @@
 
 #include "mbed.h"
 #include "EthernetInterfaceIPStack.h"
+#include "C027.h"
+#include "MDM.h"
+
+//----------------------------------------------------------------------
+// You may need to configure these parameters
+
+/** Set your secret SIM pin here "1234"
+*/
+#define SIMPIN      NULL
+
+/** The APN of your network operator, sometimes it is "internet" 
+    check your contract with the network operator
+*/
+#define APN         "gprs.swisscom.ch"
+
+/** Set the user name for your APN, or NULL if not needed
+*/
+#define USERNAME    NULL
+
+/** Set the password for your APN, or NULL if not needed
+*/
+#define PASSWORD    NULL 
+
+C027 c027;
 
 #include "C12832.h"
-C12832 lcd(p5, p7, p6, p8, p11);
+C12832 lcd(D11, D13, D12, D7, D10);
 
 #include "FP.cpp"
 #include "MQTTClient.h"
@@ -45,84 +69,111 @@
     lcd.puts((char*)message->payload);
 }
 
-
-
 int main(int argc, char* argv[])
 {   
-    IPStack ipstack = IPStack();
-    float version = 0.43;
-    char* topic = "mbed-sample";
+    // turn on the supplies of the Modem and the GPS
+    c027.mdmPower(true);
+    wait(2);
+    // Create the modem object
+    MDMSerial mdm;
     
-    lcd.printf("Version is %f\n", version);
-    printf("Version is %f\n", version);
-              
-    MQTT::Client<IPStack, Countdown> client = MQTT::Client<IPStack, Countdown>(ipstack);
+    // initialize the modem 
+    printf("Modem Initialize\r\n");
+    MDMParser::DevStatus devStatus;
+    bool mdmOk = mdm.init(SIMPIN, &devStatus);
+    if (mdmOk)
+    {
+        // wait until we are connected
+        printf("Network Check\r\n");
+        MDMParser::NetStatus netStatus;
+        while (!mdm.checkNetStatus(&netStatus))
+            wait_ms(1000);
     
-    char* hostname = "m2m.eclipse.org";
-    int port = 1883;
-    lcd.printf("Connecting to %s:%d\n", hostname, port);
-    int rc = ipstack.connect(hostname, port);
-    if (rc != 0)
-        lcd.printf("rc from TCP connect is %d\n", rc);
- 
-    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;       
-    data.MQTTVersion = 3;
-    data.clientID.cstring = "mbed-icraggs";
-    rc = client.connect(&data);
-    if (rc != 0)
-        lcd.printf("rc from MQTT connect is %d\n", rc);
-    
-    rc = client.subscribe(topic, MQTT::QOS1, messageArrived);   
-    if (rc != 0) {
-        printf("rc from MQTT subscribe is %d\n", rc);
-    }
-
-    MQTT::Message message;
+        printf("Network Join\r\n");
+        // join the internet connection 
+        MDMParser::IP ip = mdm.join(APN,USERNAME,PASSWORD);
+        if (ip != NOIP)
+        {
+            printf("  IP Address: " IPSTR "\r\n", IPNUM(ip));
+            
+            IPStack ipstack = IPStack();
+            float version = 0.43;
+            char* topic = "mbed-sample";
+            
+            lcd.printf("Version is %f\n", version);
+            printf("Version is %f\n", version);
+                      
+            MQTT::Client<IPStack, Countdown> client = MQTT::Client<IPStack, Countdown>(ipstack);
+            
+            char* hostname = "m2m.eclipse.org";
+            int port = 1883;
+            lcd.printf("Connecting to %s:%d\n", hostname, port);
+            int rc = ipstack.connect(hostname, port);
+            if (rc != 0)
+                lcd.printf("rc from TCP connect is %d\n", rc);
+         
+            MQTTPacket_connectData data = MQTTPacket_connectData_initializer;       
+            data.MQTTVersion = 3;
+            data.clientID.cstring = "mbed-icraggs";
+            rc = client.connect(&data);
+            if (rc != 0)
+                lcd.printf("rc from MQTT connect is %d\n", rc);
+            
+            rc = client.subscribe(topic, MQTT::QOS1, messageArrived);   
+            if (rc != 0) {
+                printf("rc from MQTT subscribe is %d\n", rc);
+            }
+        
+            MQTT::Message message;
+        
+            // QoS 0
+            char buf[100];
+            sprintf(buf, "Hello World!  QoS 0 message from app version %f\n", version);
+            message.qos = MQTT::QOS0;
+            message.retained = false;
+            message.dup = false;
+            message.payload = (void*)buf;
+            message.payloadlen = strlen(buf)+1;
+            rc = client.publish(topic, &message);
+            while (arrivedcount == 0)
+                client.yield(100);
+                
+            // QoS 1
+            sprintf(buf, "Hello World!  QoS 1 message from app version %f\n", version);
+            message.qos = MQTT::QOS1;
+            message.payloadlen = strlen(buf)+1;
+            rc = client.publish(topic, &message);
+            while (arrivedcount == 1)
+                client.yield(100);
+                
+            // QoS 2
+            sprintf(buf, "Hello World!  QoS 2 message from app version %f\n", version);
+            message.qos = MQTT::QOS2;
+            message.payloadlen = strlen(buf)+1;
+            rc = client.publish(topic, &message);
+            while (arrivedcount == 2)
+                client.yield(100);
+            
+            rc = client.unsubscribe(topic);
+            if (rc != 0) {
+                printf("rc from unsubscribe was %d\n", rc);
+            }
+            
+            rc = client.disconnect();
+            if (rc != 0) {
+                printf("rc from disconnect was %d\n", rc);
+            }
 
-    // QoS 0
-    char buf[100];
-    sprintf(buf, "Hello World!  QoS 0 message from app version %f\n", version);
-    message.qos = MQTT::QOS0;
-    message.retained = false;
-    message.dup = false;
-    message.payload = (void*)buf;
-    message.payloadlen = strlen(buf)+1;
-    rc = client.publish(topic, &message);
-    while (arrivedcount == 0)
-        client.yield(100);
-        
-    // QoS 1
-    sprintf(buf, "Hello World!  QoS 1 message from app version %f\n", version);
-    message.qos = MQTT::QOS1;
-    message.payloadlen = strlen(buf)+1;
-    rc = client.publish(topic, &message);
-    while (arrivedcount == 1)
-        client.yield(100);
-        
-    // QoS 2
-    sprintf(buf, "Hello World!  QoS 2 message from app version %f\n", version);
-    message.qos = MQTT::QOS2;
-    message.payloadlen = strlen(buf)+1;
-    rc = client.publish(topic, &message);
-    while (arrivedcount == 2)
-        client.yield(100);
-    
-    rc = client.unsubscribe(topic);
-    if (rc != 0) {
-        printf("rc from unsubscribe was %d\n", rc);
+            mdm.disconnect();
+        }
     }
-    
-    rc = client.disconnect();
-    if (rc != 0) {
-        printf("rc from disconnect was %d\n", rc);
-    }
-    
-    ipstack.disconnect();
+    mdm.powerOff();
+    c027.mdmPower(false);
     
     lcd.cls();
     lcd.locate(0,3);
     lcd.printf("Finish: %d msgs\n", arrivedcount);
     printf("Finishing with %d messages received\n", arrivedcount);
     
-    return 0;
+    while(true);
 }