![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
nothing
Dependencies: C12832 EthernetInterface MQTT mbed-rtos mbed
Fork of HelloMQTT by
Revision 20:82721643145a, committed 2015-11-20
- Comitter:
- weiarm2015
- Date:
- Fri Nov 20 05:47:25 2015 +0000
- Parent:
- 19:7f7aba7a4a8b
- Commit message:
- v.0.01
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
serialzation_lib.lib | Show annotated file Show diff for this revision Revisions of this file |
diff -r 7f7aba7a4a8b -r 82721643145a main.cpp --- a/main.cpp Thu Jul 30 13:49:18 2015 +0000 +++ b/main.cpp Fri Nov 20 05:47:25 2015 +0000 @@ -1,118 +1,147 @@ -/******************************************************************************* - * Copyright (c) 2014, 2015 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - * Ian Craggs - make sure QoS2 processing works, and add device headers - *******************************************************************************/ - - /** - This is a sample program to illustrate the use of the MQTT Client library - on the mbed platform. The Client class requires two classes which mediate - access to system interfaces for networking and timing. As long as these two - classes provide the required public programming interfaces, it does not matter - what facilities they use underneath. In this program, they use the mbed - system libraries. - - */ - - // change this to 0 to output messages to serial instead of LCD -#define USE_LCD 1 - -#if USE_LCD -#include "C12832.h" - -#if defined(TARGET_UBLOX_C027) -#warning "Compiling for mbed C027" -#include "C027.h" -#elif defined(TARGET_LPC1768) -#warning "Compiling for mbed LPC1768" -#include "LPC1768.h" -#elif defined(TARGET_K64F) -#warning "Compiling for mbed K64F" -#include "K64F.h" -#endif - -#define printf lcd.cls();lcd.printf - -#endif +// Do not remove the include below +#include "mbed.h" +#include "MQTTEthernet.h" +#include "MQTTClient.h" +#include "pb_decode.h" +#include "sitewhere.h" +#include "sitewhere.pb.h" #define MQTTCLIENT_QOS2 1 +int arrivedcount = 0; +bool registered = false; -#include "MQTTEthernet.h" -#include "MQTTClient.h" - -int arrivedcount = 0; - +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); void messageArrived(MQTT::MessageData& md) { + uint8_t buffer[512]; MQTT::Message &message = md.message; printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id); printf("Payload %.*s\n", message.payloadlen, (char*)message.payload); ++arrivedcount; +/* + buffer = message.payload; + Device_Header header; + pb_istream_t stream = pb_istream_from_buffer(buffer, message.payloadlen); + + // Read header to find what type of command follows. + if (pb_decode_delimited(&stream, Device_Header_fields, &header)) { + // Handle a registration acknowledgement. + if (header.command == Device_Command_REGISTER_ACK) { + Device_RegistrationAck ack; + if (pb_decode_delimited(&stream, Device_RegistrationAck_fields, &ack)) { + if (ack.state == Device_RegistrationAckState_NEW_REGISTRATION) { + printf("Registered new device."); + registered = true; + } else if (ack.state == Device_RegistrationAckState_ALREADY_REGISTERED) { + printf("Device was already registered."); + registered = true; + } else if (ack.state == Device_RegistrationAckState_REGISTRATION_ERROR) { + printf("Error registering device."); + } + } + } + } else { + printf("Unable to decode system command."); + } + */ } int main(int argc, char* argv[]) -{ +{ MQTTEthernet ipstack = MQTTEthernet(); float version = 0.5; - char* topic = "mbed-sample"; - + char* topic = "SiteWhere/input/protobuf"; + char* hardwareId = "enno-device-mbed-id-2"; + char* specificationToken = "9556b504-52cc-4194-89c0-f301a782b286"; + char* system = "SiteWhere/system/mbed-test-A"; + char* hostname = "139.217.10.99";//sitewhere.chinacloudapp.cn:1883 + int port = 1883; + + led1=1;led2=1;led3=1;led4=1; + wait(0.5); + led1=!led1;led2=!led2;led3=!led3;led4=!led4; + wait(0.5); + led1=!led1;led2=!led2;led3=!led3;led4=!led4; + printf("HelloMQTT: version is %f\n", version); - MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack); - - char* hostname = "m2m.eclipse.org"; - int port = 1883; printf("Connecting to %s:%d\n", hostname, port); int rc = ipstack.connect(hostname, port); - if (rc != 0) + + if (rc != 0){ //tcp connect error! printf("rc from TCP connect is %d\n", rc); - - MQTTPacket_connectData data = MQTTPacket_connectData_initializer; - data.MQTTVersion = 3; - data.clientID.cstring = "mbed-sample"; - data.username.cstring = "testuser"; - data.password.cstring = "testpassword"; - if ((rc = client.connect(data)) != 0) - printf("rc from MQTT connect is %d\n", rc); - - if ((rc = client.subscribe(topic, MQTT::QOS2, messageArrived)) != 0) - printf("rc from MQTT subscribe is %d\n", rc); + } + if (rc == 0){ //tcp connected! + led1=!led1;wait(1);led1=!led1;wait(1);led1=!led1; - MQTT::Message message; + MQTTPacket_connectData data = MQTTPacket_connectData_initializer; + data.MQTTVersion = 3; + data.clientID.cstring = "mbed-sample"; + data.username.cstring = NULL; + data.password.cstring = NULL; + if ((rc = client.connect(data)) != 0) + printf("rc from MQTT connect is %d\n", rc); + if (rc == 0){ //MQTT Client connected! + led2=!led2;wait(1);led2=!led2;wait(1);led2=!led2; + + if ((rc = client.subscribe(system, MQTT::QOS2, messageArrived)) != 0) + printf("rc from MQTT subscribe is %d\n", rc); + if(rc == 0){ //subscribe successed! + led3=!led3;wait(1);led3=!led3;wait(1);led3=!led3; + + MQTT::Message message; - // QoS 0 - char buf[100]; - sprintf(buf, "Hello World! QoS 0 message from app version %f\n", version); - message.qos = MQTT::QOS0; - message.retained = false; - message.dup = false; - message.payload = (void*)buf; - message.payloadlen = strlen(buf)+1; - rc = client.publish(topic, message); - while (arrivedcount < 1) - client.yield(100); - - // QoS 1 - sprintf(buf, "Hello World! QoS 1 message from app version %f\n", version); - message.qos = MQTT::QOS1; - message.payloadlen = strlen(buf)+1; - rc = client.publish(topic, message); - while (arrivedcount < 2) - client.yield(100); - + // QoS 0 + char buf[100]; + //unsigned char buffer[512]; + uint8_t buffer[512]; // Caution: unsigned char cause an error!!! + unsigned int len = 0; + sprintf(buf, "Hello World! QoS 0 message from app version %f\n", version); + message.qos = MQTT::QOS0; + message.retained = false; + message.dup = false; + // message.payload = (void*)buf; + // message.payloadlen = strlen(buf)+1; //?? + /*********** serialization ************/ + len = sw_register(hardwareId, specificationToken, buffer, 512,NULL); + message.payload = buffer; + message.payloadlen = len; + /*************************************/ + rc = client.publish(topic, message); + // while (arrivedcount < 1) + // client.yield(100); + + + + // QoS 1 + /*********** serialization ************/ + // len = sw_alert(hardwareId, "enno.info","mbed is alive", NULL, buffer, 512, NULL); + len = sw_location(hardwareId, 27.59, 86.55, 8844.43, 0,buffer, 512, NULL); + message.payload = buffer; + message.payloadlen = len; + sprintf(buf, "Hello World! QoS 1 message from app version %f\n", version); + message.qos = MQTT::QOS1; + + while (0 == rc) { + client.yield(1000); + //sleep(); + //wait(0.5); + client.publish(topic, message); + printf("Location updated.\n"); + led4=!led4; + + } + return 0; + } + } + } +} +/* // QoS 2 sprintf(buf, "Hello World! QoS 2 message from app version %f\n", version); message.qos = MQTT::QOS2; @@ -120,16 +149,19 @@ rc = client.publish(topic, message); while (arrivedcount < 3) client.yield(100); - - if ((rc = client.unsubscribe(topic)) != 0) - printf("rc from unsubscribe was %d\n", rc); - - if ((rc = client.disconnect()) != 0) - printf("rc from disconnect was %d\n", rc); - - ipstack.disconnect(); - - printf("Version %.2f: finish %d msgs\n", version, arrivedcount); - - return 0; -} +*/ +/* + if ((rc = client.unsubscribe(topic)) != 0) + printf("rc from unsubscribe was %d\n", rc); + + if ((rc = client.disconnect()) != 0) + printf("rc from disconnect was %d\n", rc); + + ipstack.disconnect(); + + printf("Version %.2f: finish %d msgs\n", version, arrivedcount); */ + + + +// Auto Added by "SMeshLink SMeshStudio" +
diff -r 7f7aba7a4a8b -r 82721643145a serialzation_lib.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serialzation_lib.lib Fri Nov 20 05:47:25 2015 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/weiarm2015/code/serialzation_lib/#07a2c4774b74