Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ennoTest2.cpp
00001 // Do not remove the include below 00002 #include "ennoTest2.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-1"; 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 Thu Jul 14 2022 02:43:24 by
1.7.2