gateway

Dependencies:   EthernetInterface MQTT mbed-rtos mbed

Committer:
girishy
Date:
Mon Dec 12 10:53:37 2016 +0000
Revision:
0:56beb19bc51b
iot gateway

Who changed what in which revision?

UserRevisionLine numberNew contents of line
girishy 0:56beb19bc51b 1 #include "mbed.h"
girishy 0:56beb19bc51b 2 #include "MQTTEthernet.h"
girishy 0:56beb19bc51b 3 #include "MQTTClient.h"
girishy 0:56beb19bc51b 4
girishy 0:56beb19bc51b 5 DigitalOut myled(LED1);
girishy 0:56beb19bc51b 6
girishy 0:56beb19bc51b 7 int arrivedcount = 0;
girishy 0:56beb19bc51b 8
girishy 0:56beb19bc51b 9
girishy 0:56beb19bc51b 10 void messageArrived(MQTT::MessageData& md)
girishy 0:56beb19bc51b 11 {
girishy 0:56beb19bc51b 12 MQTT::Message &message = md.message;
girishy 0:56beb19bc51b 13
girishy 0:56beb19bc51b 14 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
girishy 0:56beb19bc51b 15 printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
girishy 0:56beb19bc51b 16 ++arrivedcount;
girishy 0:56beb19bc51b 17
girishy 0:56beb19bc51b 18 }
girishy 0:56beb19bc51b 19
girishy 0:56beb19bc51b 20 int main(int argc, char* argv[]) {
girishy 0:56beb19bc51b 21
girishy 0:56beb19bc51b 22 MQTTEthernet ipstack = MQTTEthernet();
girishy 0:56beb19bc51b 23 float version = 0.47;
girishy 0:56beb19bc51b 24 char* topic = "tet";
girishy 0:56beb19bc51b 25
girishy 0:56beb19bc51b 26 MQTT::Client<MQTTEthernet,Countdown> client = MQTT::Client<MQTTEthernet,Countdown>(ipstack);
girishy 0:56beb19bc51b 27
girishy 0:56beb19bc51b 28 char* hostname = "nisgvm1.pune.cdac.in";
girishy 0:56beb19bc51b 29 int port = 1883;
girishy 0:56beb19bc51b 30
girishy 0:56beb19bc51b 31
girishy 0:56beb19bc51b 32 int rc = ipstack.connect(hostname, port);
girishy 0:56beb19bc51b 33 if (rc != 0)
girishy 0:56beb19bc51b 34 myled = 1;
girishy 0:56beb19bc51b 35
girishy 0:56beb19bc51b 36 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
girishy 0:56beb19bc51b 37 data.MQTTVersion = 3;
girishy 0:56beb19bc51b 38 data.clientID.cstring = "mbed-sample";
girishy 0:56beb19bc51b 39
girishy 0:56beb19bc51b 40 if ((rc = client.connect(&data)) != 0)
girishy 0:56beb19bc51b 41 myled = 2;
girishy 0:56beb19bc51b 42 //lcd.printf("rc from MQTT connect is %d\n", rc);
girishy 0:56beb19bc51b 43
girishy 0:56beb19bc51b 44 if ((rc = client.subscribe(topic, MQTT::QOS1, messageArrived)) != 0)
girishy 0:56beb19bc51b 45 myled = 0;
girishy 0:56beb19bc51b 46 //lcd.printf("rc from MQTT subscribe is %d\n", rc);
girishy 0:56beb19bc51b 47
girishy 0:56beb19bc51b 48 MQTT::Message message;
girishy 0:56beb19bc51b 49
girishy 0:56beb19bc51b 50 // QoS 0
girishy 0:56beb19bc51b 51 char buf[100];
girishy 0:56beb19bc51b 52 sprintf(buf, "Hello World! QoS 0 message from app version %f\n", version);
girishy 0:56beb19bc51b 53 message.qos = MQTT::QOS0;
girishy 0:56beb19bc51b 54 message.retained = false;
girishy 0:56beb19bc51b 55 message.dup = false;
girishy 0:56beb19bc51b 56 message.payload = (void*)buf;
girishy 0:56beb19bc51b 57 message.payloadlen = strlen(buf)+1;
girishy 0:56beb19bc51b 58 rc = client.publish(topic, &message);
girishy 0:56beb19bc51b 59 while (arrivedcount < 1)
girishy 0:56beb19bc51b 60 client.yield(100);
girishy 0:56beb19bc51b 61
girishy 0:56beb19bc51b 62 // QoS 1
girishy 0:56beb19bc51b 63 sprintf(buf, "Hello World! QoS 1 message from app version %f\n", version);
girishy 0:56beb19bc51b 64 message.qos = MQTT::QOS1;
girishy 0:56beb19bc51b 65 message.payloadlen = strlen(buf)+1;
girishy 0:56beb19bc51b 66 rc = client.publish(topic, &message);
girishy 0:56beb19bc51b 67 while (arrivedcount < 2)
girishy 0:56beb19bc51b 68 client.yield(100);
girishy 0:56beb19bc51b 69
girishy 0:56beb19bc51b 70 // QoS 2
girishy 0:56beb19bc51b 71 sprintf(buf, "Hello World! QoS 2 message from app version %f\n", version);
girishy 0:56beb19bc51b 72 message.qos = MQTT::QOS2;
girishy 0:56beb19bc51b 73 message.payloadlen = strlen(buf)+1;
girishy 0:56beb19bc51b 74 rc = client.publish(topic, &message);
girishy 0:56beb19bc51b 75 while (arrivedcount < 3)
girishy 0:56beb19bc51b 76 client.yield(100);
girishy 0:56beb19bc51b 77
girishy 0:56beb19bc51b 78 // n * QoS 2
girishy 0:56beb19bc51b 79 for (int i = 1; i <= 10; ++i)
girishy 0:56beb19bc51b 80 {
girishy 0:56beb19bc51b 81 sprintf(buf, "Hello World! QoS 2 message number %d from app version %f\n", i, version);
girishy 0:56beb19bc51b 82 message.qos = MQTT::QOS2;
girishy 0:56beb19bc51b 83 message.payloadlen = strlen(buf)+1;
girishy 0:56beb19bc51b 84 rc = client.publish(topic, &message);
girishy 0:56beb19bc51b 85 while (arrivedcount < i + 3)
girishy 0:56beb19bc51b 86 client.yield(100);
girishy 0:56beb19bc51b 87 }
girishy 0:56beb19bc51b 88
girishy 0:56beb19bc51b 89 if ((rc = client.unsubscribe(topic)) != 0)
girishy 0:56beb19bc51b 90 printf("rc from unsubscribe was %d\n", rc);
girishy 0:56beb19bc51b 91
girishy 0:56beb19bc51b 92 if ((rc = client.disconnect()) != 0)
girishy 0:56beb19bc51b 93 printf("rc from disconnect was %d\n", rc);
girishy 0:56beb19bc51b 94
girishy 0:56beb19bc51b 95 ipstack.disconnect();
girishy 0:56beb19bc51b 96
girishy 0:56beb19bc51b 97 // lcd.cls();
girishy 0:56beb19bc51b 98 //lcd.locate(0,3);
girishy 0:56beb19bc51b 99 // lcd.printf("Version %.2f: finish %d msgs\n", version, arrivedcount);
girishy 0:56beb19bc51b 100 printf("Finishing with %d messages received\n", arrivedcount);
girishy 0:56beb19bc51b 101
girishy 0:56beb19bc51b 102 return 0;
girishy 0:56beb19bc51b 103 }