nothing

Dependencies:   C12832 EthernetInterface MQTT mbed-rtos mbed

Fork of HelloMQTT by MQTT

Committer:
weiarm2015
Date:
Fri Nov 20 05:47:25 2015 +0000
Revision:
20:82721643145a
Parent:
19:7f7aba7a4a8b
v.0.01

Who changed what in which revision?

UserRevisionLine numberNew contents of line
weiarm2015 20:82721643145a 1 // Do not remove the include below
weiarm2015 20:82721643145a 2 #include "mbed.h"
weiarm2015 20:82721643145a 3 #include "MQTTEthernet.h"
weiarm2015 20:82721643145a 4 #include "MQTTClient.h"
weiarm2015 20:82721643145a 5 #include "pb_decode.h"
weiarm2015 20:82721643145a 6 #include "sitewhere.h"
weiarm2015 20:82721643145a 7 #include "sitewhere.pb.h"
icraggs 18:07a79d8f01c3 8
icraggs 17:0811bdbdd78a 9 #define MQTTCLIENT_QOS2 1
weiarm2015 20:82721643145a 10 int arrivedcount = 0;
weiarm2015 20:82721643145a 11 bool registered = false;
icraggs 0:0cae29831d01 12
weiarm2015 20:82721643145a 13 DigitalOut led1(LED1);
weiarm2015 20:82721643145a 14 DigitalOut led2(LED2);
weiarm2015 20:82721643145a 15 DigitalOut led3(LED3);
weiarm2015 20:82721643145a 16 DigitalOut led4(LED4);
icraggs 8:a3e3113054a1 17
icraggs 9:5beb8609e9f7 18 void messageArrived(MQTT::MessageData& md)
icraggs 2:638c854c0695 19 {
weiarm2015 20:82721643145a 20 uint8_t buffer[512];
icraggs 9:5beb8609e9f7 21 MQTT::Message &message = md.message;
icraggs 9:5beb8609e9f7 22 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
icraggs 9:5beb8609e9f7 23 printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
icraggs 2:638c854c0695 24 ++arrivedcount;
weiarm2015 20:82721643145a 25 /*
weiarm2015 20:82721643145a 26 buffer = message.payload;
weiarm2015 20:82721643145a 27 Device_Header header;
weiarm2015 20:82721643145a 28 pb_istream_t stream = pb_istream_from_buffer(buffer, message.payloadlen);
weiarm2015 20:82721643145a 29
weiarm2015 20:82721643145a 30 // Read header to find what type of command follows.
weiarm2015 20:82721643145a 31 if (pb_decode_delimited(&stream, Device_Header_fields, &header)) {
weiarm2015 20:82721643145a 32 // Handle a registration acknowledgement.
weiarm2015 20:82721643145a 33 if (header.command == Device_Command_REGISTER_ACK) {
weiarm2015 20:82721643145a 34 Device_RegistrationAck ack;
weiarm2015 20:82721643145a 35 if (pb_decode_delimited(&stream, Device_RegistrationAck_fields, &ack)) {
weiarm2015 20:82721643145a 36 if (ack.state == Device_RegistrationAckState_NEW_REGISTRATION) {
weiarm2015 20:82721643145a 37 printf("Registered new device.");
weiarm2015 20:82721643145a 38 registered = true;
weiarm2015 20:82721643145a 39 } else if (ack.state == Device_RegistrationAckState_ALREADY_REGISTERED) {
weiarm2015 20:82721643145a 40 printf("Device was already registered.");
weiarm2015 20:82721643145a 41 registered = true;
weiarm2015 20:82721643145a 42 } else if (ack.state == Device_RegistrationAckState_REGISTRATION_ERROR) {
weiarm2015 20:82721643145a 43 printf("Error registering device.");
weiarm2015 20:82721643145a 44 }
weiarm2015 20:82721643145a 45 }
weiarm2015 20:82721643145a 46 }
weiarm2015 20:82721643145a 47 } else {
weiarm2015 20:82721643145a 48 printf("Unable to decode system command.");
weiarm2015 20:82721643145a 49 }
weiarm2015 20:82721643145a 50 */
icraggs 2:638c854c0695 51 }
icraggs 0:0cae29831d01 52
icraggs 2:638c854c0695 53
icraggs 2:638c854c0695 54 int main(int argc, char* argv[])
weiarm2015 20:82721643145a 55 {
icraggs 8:a3e3113054a1 56 MQTTEthernet ipstack = MQTTEthernet();
icraggs 17:0811bdbdd78a 57 float version = 0.5;
weiarm2015 20:82721643145a 58 char* topic = "SiteWhere/input/protobuf";
weiarm2015 20:82721643145a 59 char* hardwareId = "enno-device-mbed-id-2";
weiarm2015 20:82721643145a 60 char* specificationToken = "9556b504-52cc-4194-89c0-f301a782b286";
weiarm2015 20:82721643145a 61 char* system = "SiteWhere/system/mbed-test-A";
weiarm2015 20:82721643145a 62 char* hostname = "139.217.10.99";//sitewhere.chinacloudapp.cn:1883
weiarm2015 20:82721643145a 63 int port = 1883;
weiarm2015 20:82721643145a 64
weiarm2015 20:82721643145a 65 led1=1;led2=1;led3=1;led4=1;
weiarm2015 20:82721643145a 66 wait(0.5);
weiarm2015 20:82721643145a 67 led1=!led1;led2=!led2;led3=!led3;led4=!led4;
weiarm2015 20:82721643145a 68 wait(0.5);
weiarm2015 20:82721643145a 69 led1=!led1;led2=!led2;led3=!led3;led4=!led4;
weiarm2015 20:82721643145a 70
icraggs 18:07a79d8f01c3 71 printf("HelloMQTT: version is %f\n", version);
icraggs 8:a3e3113054a1 72 MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
icraggs 18:07a79d8f01c3 73 printf("Connecting to %s:%d\n", hostname, port);
icraggs 6:e4c690c45021 74 int rc = ipstack.connect(hostname, port);
weiarm2015 20:82721643145a 75
weiarm2015 20:82721643145a 76 if (rc != 0){ //tcp connect error!
icraggs 18:07a79d8f01c3 77 printf("rc from TCP connect is %d\n", rc);
weiarm2015 20:82721643145a 78 }
weiarm2015 20:82721643145a 79 if (rc == 0){ //tcp connected!
weiarm2015 20:82721643145a 80 led1=!led1;wait(1);led1=!led1;wait(1);led1=!led1;
icraggs 2:638c854c0695 81
weiarm2015 20:82721643145a 82 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
weiarm2015 20:82721643145a 83 data.MQTTVersion = 3;
weiarm2015 20:82721643145a 84 data.clientID.cstring = "mbed-sample";
weiarm2015 20:82721643145a 85 data.username.cstring = NULL;
weiarm2015 20:82721643145a 86 data.password.cstring = NULL;
weiarm2015 20:82721643145a 87 if ((rc = client.connect(data)) != 0)
weiarm2015 20:82721643145a 88 printf("rc from MQTT connect is %d\n", rc);
weiarm2015 20:82721643145a 89 if (rc == 0){ //MQTT Client connected!
weiarm2015 20:82721643145a 90 led2=!led2;wait(1);led2=!led2;wait(1);led2=!led2;
weiarm2015 20:82721643145a 91
weiarm2015 20:82721643145a 92 if ((rc = client.subscribe(system, MQTT::QOS2, messageArrived)) != 0)
weiarm2015 20:82721643145a 93 printf("rc from MQTT subscribe is %d\n", rc);
weiarm2015 20:82721643145a 94 if(rc == 0){ //subscribe successed!
weiarm2015 20:82721643145a 95 led3=!led3;wait(1);led3=!led3;wait(1);led3=!led3;
weiarm2015 20:82721643145a 96
weiarm2015 20:82721643145a 97 MQTT::Message message;
icraggs 0:0cae29831d01 98
weiarm2015 20:82721643145a 99 // QoS 0
weiarm2015 20:82721643145a 100 char buf[100];
weiarm2015 20:82721643145a 101 //unsigned char buffer[512];
weiarm2015 20:82721643145a 102 uint8_t buffer[512]; // Caution: unsigned char cause an error!!!
weiarm2015 20:82721643145a 103 unsigned int len = 0;
weiarm2015 20:82721643145a 104 sprintf(buf, "Hello World! QoS 0 message from app version %f\n", version);
weiarm2015 20:82721643145a 105 message.qos = MQTT::QOS0;
weiarm2015 20:82721643145a 106 message.retained = false;
weiarm2015 20:82721643145a 107 message.dup = false;
weiarm2015 20:82721643145a 108 // message.payload = (void*)buf;
weiarm2015 20:82721643145a 109 // message.payloadlen = strlen(buf)+1; //??
weiarm2015 20:82721643145a 110 /*********** serialization ************/
weiarm2015 20:82721643145a 111 len = sw_register(hardwareId, specificationToken, buffer, 512,NULL);
weiarm2015 20:82721643145a 112 message.payload = buffer;
weiarm2015 20:82721643145a 113 message.payloadlen = len;
weiarm2015 20:82721643145a 114 /*************************************/
weiarm2015 20:82721643145a 115 rc = client.publish(topic, message);
weiarm2015 20:82721643145a 116 // while (arrivedcount < 1)
weiarm2015 20:82721643145a 117 // client.yield(100);
weiarm2015 20:82721643145a 118
weiarm2015 20:82721643145a 119
weiarm2015 20:82721643145a 120
weiarm2015 20:82721643145a 121 // QoS 1
weiarm2015 20:82721643145a 122 /*********** serialization ************/
weiarm2015 20:82721643145a 123 // len = sw_alert(hardwareId, "enno.info","mbed is alive", NULL, buffer, 512, NULL);
weiarm2015 20:82721643145a 124 len = sw_location(hardwareId, 27.59, 86.55, 8844.43, 0,buffer, 512, NULL);
weiarm2015 20:82721643145a 125 message.payload = buffer;
weiarm2015 20:82721643145a 126 message.payloadlen = len;
weiarm2015 20:82721643145a 127 sprintf(buf, "Hello World! QoS 1 message from app version %f\n", version);
weiarm2015 20:82721643145a 128 message.qos = MQTT::QOS1;
weiarm2015 20:82721643145a 129
weiarm2015 20:82721643145a 130 while (0 == rc) {
weiarm2015 20:82721643145a 131 client.yield(1000);
weiarm2015 20:82721643145a 132 //sleep();
weiarm2015 20:82721643145a 133 //wait(0.5);
weiarm2015 20:82721643145a 134 client.publish(topic, message);
weiarm2015 20:82721643145a 135 printf("Location updated.\n");
weiarm2015 20:82721643145a 136 led4=!led4;
weiarm2015 20:82721643145a 137
weiarm2015 20:82721643145a 138 }
weiarm2015 20:82721643145a 139 return 0;
weiarm2015 20:82721643145a 140 }
weiarm2015 20:82721643145a 141 }
weiarm2015 20:82721643145a 142 }
weiarm2015 20:82721643145a 143 }
weiarm2015 20:82721643145a 144 /*
icraggs 2:638c854c0695 145 // QoS 2
icraggs 2:638c854c0695 146 sprintf(buf, "Hello World! QoS 2 message from app version %f\n", version);
icraggs 2:638c854c0695 147 message.qos = MQTT::QOS2;
icraggs 2:638c854c0695 148 message.payloadlen = strlen(buf)+1;
icraggs 16:28d062c5522b 149 rc = client.publish(topic, message);
icraggs 12:086a9314e8a5 150 while (arrivedcount < 3)
icraggs 2:638c854c0695 151 client.yield(100);
weiarm2015 20:82721643145a 152 */
weiarm2015 20:82721643145a 153 /*
weiarm2015 20:82721643145a 154 if ((rc = client.unsubscribe(topic)) != 0)
weiarm2015 20:82721643145a 155 printf("rc from unsubscribe was %d\n", rc);
weiarm2015 20:82721643145a 156
weiarm2015 20:82721643145a 157 if ((rc = client.disconnect()) != 0)
weiarm2015 20:82721643145a 158 printf("rc from disconnect was %d\n", rc);
weiarm2015 20:82721643145a 159
weiarm2015 20:82721643145a 160 ipstack.disconnect();
weiarm2015 20:82721643145a 161
weiarm2015 20:82721643145a 162 printf("Version %.2f: finish %d msgs\n", version, arrivedcount); */
weiarm2015 20:82721643145a 163
weiarm2015 20:82721643145a 164
weiarm2015 20:82721643145a 165
weiarm2015 20:82721643145a 166 // Auto Added by "SMeshLink SMeshStudio"
weiarm2015 20:82721643145a 167