nothing
Dependencies: C12832 EthernetInterface MQTT mbed-rtos mbed
Fork of HelloMQTT by
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
Generated on Tue Jul 12 2022 21:13:02 by 1.7.2