gateway
Dependencies: EthernetInterface MQTT mbed-rtos mbed
main.cpp@0:56beb19bc51b, 2016-12-12 (annotated)
- Committer:
- girishy
- Date:
- Mon Dec 12 10:53:37 2016 +0000
- Revision:
- 0:56beb19bc51b
iot gateway
Who changed what in which revision?
User | Revision | Line number | New 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 | } |