nothing

Dependencies:   C12832 EthernetInterface MQTT mbed-rtos mbed

Fork of HelloMQTT by MQTT

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 // Do not remove the include below
00002 #include "mbed.h"
00003 #include "MQTTEthernet.h"
00004 #include "MQTTClient.h"
00005 #include "pb_decode.h"
00006 #include "sitewhere.h"
00007 #include "sitewhere.pb.h"
00008 
00009 #define MQTTCLIENT_QOS2 1
00010 int arrivedcount = 0;
00011 bool registered = false;
00012 
00013 DigitalOut led1(LED1);
00014 DigitalOut led2(LED2);
00015 DigitalOut led3(LED3);
00016 DigitalOut led4(LED4);
00017 
00018 void messageArrived(MQTT::MessageData& md)
00019 {
00020     uint8_t buffer[512];
00021     MQTT::Message &message = md.message;
00022     printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
00023     printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
00024     ++arrivedcount;
00025 /*
00026     buffer = message.payload;
00027     Device_Header header;
00028     pb_istream_t stream = pb_istream_from_buffer(buffer, message.payloadlen);
00029 
00030     // Read header to find what type of command follows.
00031       if (pb_decode_delimited(&stream, Device_Header_fields, &header)) {
00032         // Handle a registration acknowledgement.
00033         if (header.command == Device_Command_REGISTER_ACK) {
00034           Device_RegistrationAck ack;
00035           if (pb_decode_delimited(&stream, Device_RegistrationAck_fields, &ack)) {
00036             if (ack.state == Device_RegistrationAckState_NEW_REGISTRATION) {
00037               printf("Registered new device.");
00038               registered = true;
00039             } else if (ack.state == Device_RegistrationAckState_ALREADY_REGISTERED) {
00040               printf("Device was already registered.");
00041               registered = true;
00042             } else if (ack.state == Device_RegistrationAckState_REGISTRATION_ERROR) {
00043               printf("Error registering device.");
00044             }
00045           }
00046         }
00047       } else {
00048         printf("Unable to decode system command.");
00049       }
00050     */
00051 }
00052 
00053 
00054 int main(int argc, char* argv[])
00055 {
00056     MQTTEthernet ipstack = MQTTEthernet();
00057     float version = 0.5;
00058     char* topic = "SiteWhere/input/protobuf";
00059     char* hardwareId = "enno-device-mbed-id-2";
00060     char* specificationToken = "9556b504-52cc-4194-89c0-f301a782b286";
00061     char* system = "SiteWhere/system/mbed-test-A";
00062     char* hostname = "139.217.10.99";//sitewhere.chinacloudapp.cn:1883
00063     int port = 1883;
00064 
00065     led1=1;led2=1;led3=1;led4=1;
00066     wait(0.5);
00067     led1=!led1;led2=!led2;led3=!led3;led4=!led4;
00068     wait(0.5);
00069     led1=!led1;led2=!led2;led3=!led3;led4=!led4;
00070 
00071     printf("HelloMQTT: version is %f\n", version);
00072     MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
00073     printf("Connecting to %s:%d\n", hostname, port);
00074     int rc = ipstack.connect(hostname, port);
00075 
00076     if (rc != 0){                           //tcp connect error!
00077         printf("rc from TCP connect is %d\n", rc);
00078        }
00079     if (rc == 0){                            //tcp connected!
00080         led1=!led1;wait(1);led1=!led1;wait(1);led1=!led1;
00081 
00082          MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
00083          data.MQTTVersion = 3;
00084          data.clientID.cstring = "mbed-sample";
00085          data.username.cstring = NULL;
00086          data.password.cstring = NULL;
00087          if ((rc = client.connect(data)) != 0)
00088              printf("rc from MQTT connect is %d\n", rc);
00089          if (rc == 0){                      //MQTT Client connected!
00090              led2=!led2;wait(1);led2=!led2;wait(1);led2=!led2;
00091 
00092              if ((rc = client.subscribe(system, MQTT::QOS2, messageArrived)) != 0)
00093                  printf("rc from MQTT subscribe is %d\n", rc);
00094              if(rc == 0){                       //subscribe successed!
00095                  led3=!led3;wait(1);led3=!led3;wait(1);led3=!led3;
00096 
00097                  MQTT::Message message;
00098 
00099              // QoS 0
00100                  char buf[100];
00101                  //unsigned char buffer[512];
00102                  uint8_t buffer[512];                                // Caution: unsigned char cause an error!!!
00103                  unsigned int len = 0;
00104                  sprintf(buf, "Hello World!  QoS 0 message from app version %f\n", version);
00105                  message.qos = MQTT::QOS0;
00106                  message.retained = false;
00107                  message.dup = false;
00108                 // message.payload = (void*)buf;
00109                 // message.payloadlen = strlen(buf)+1;                //??
00110                  /*********** serialization ************/
00111                  len = sw_register(hardwareId, specificationToken, buffer, 512,NULL);
00112                  message.payload = buffer;
00113                  message.payloadlen = len;
00114                  /*************************************/
00115                  rc = client.publish(topic, message);
00116         //       while (arrivedcount < 1)
00117         //           client.yield(100);
00118 
00119 
00120 
00121  // QoS 1
00122                  /*********** serialization ************/
00123                 // len = sw_alert(hardwareId, "enno.info","mbed is alive", NULL, buffer, 512, NULL);
00124                  len = sw_location(hardwareId, 27.59, 86.55, 8844.43, 0,buffer, 512, NULL);
00125                  message.payload = buffer;
00126                  message.payloadlen = len;
00127                  sprintf(buf, "Hello World!  QoS 1 message from app version %f\n", version);
00128                  message.qos = MQTT::QOS1;
00129 
00130                  while (0 == rc) {
00131                          client.yield(1000);
00132                          //sleep();
00133                          //wait(0.5);
00134                          client.publish(topic, message);
00135                          printf("Location updated.\n");
00136                          led4=!led4;
00137 
00138                      }
00139                  return 0;
00140              }
00141          }
00142     }
00143 }
00144 /*
00145     // QoS 2
00146     sprintf(buf, "Hello World!  QoS 2 message from app version %f\n", version);
00147     message.qos = MQTT::QOS2;
00148     message.payloadlen = strlen(buf)+1;
00149     rc = client.publish(topic, message);
00150     while (arrivedcount < 3)
00151         client.yield(100);
00152 */
00153 /*
00154  if ((rc = client.unsubscribe(topic)) != 0)
00155          printf("rc from unsubscribe was %d\n", rc);
00156 
00157      if ((rc = client.disconnect()) != 0)
00158          printf("rc from disconnect was %d\n", rc);
00159 
00160      ipstack.disconnect();
00161 
00162      printf("Version %.2f: finish %d msgs\n", version, arrivedcount); */
00163 
00164 
00165 
00166 //  Auto Added by "SMeshLink SMeshStudio"
00167