MQTT cellular example
Dependencies: C027_Support C12832 MQTT mbed
Fork of Cellular_HelloMQTT by
Diff: main.cpp
- Revision:
- 8:b32c94be6522
- Parent:
- 7:3de634f2d40c
- Child:
- 10:6f1c3b718b9c
diff -r 3de634f2d40c -r b32c94be6522 main.cpp --- 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); }