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.
Dependencies: C12832 EthernetInterface MQTT mbed-rtos mbed
Fork of HelloMQTT by
main.cpp
- Committer:
- weiarm2015
- Date:
- 2015-11-20
- Revision:
- 20:82721643145a
- Parent:
- 19:7f7aba7a4a8b
File content as of revision 20:82721643145a:
// 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;
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 = "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);
printf("Connecting to %s:%d\n", hostname, port);
int rc = ipstack.connect(hostname, port);
if (rc != 0){ //tcp connect error!
printf("rc from TCP connect is %d\n", rc);
}
if (rc == 0){ //tcp connected!
led1=!led1;wait(1);led1=!led1;wait(1);led1=!led1;
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];
//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;
message.payloadlen = strlen(buf)+1;
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); */
// Auto Added by "SMeshLink SMeshStudio"
