v1
Dependencies: MQTTSN mbed-http
Client-main.cpp
- Committer:
- m_ahsan
- Date:
- 2018-12-10
- Revision:
- 13:8f1f478c300a
File content as of revision 13:8f1f478c300a:
/* SpwfInterface NetworkSocketAPI Example Program
* Copyright (c) 2015 ARM Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "mbed.h"
#define MQTTSNCLIENT_QOS2 1
//#include "TCPSocket.h"
//#include "UDPSocket.h"
#include "MQTTSNUDP.h"
#include "MQTTSNClient.h"
//
//------------------------------------
// Hyperterminal configuration
// 9600 bauds, 8-bit data, no parity
//------------------------------------
Serial pc(USBTX, USBRX);
DigitalOut myled(LED1);
int arrivedcount = 0;
void messageArrived(MQTTSN::MessageData& md)
{
MQTTSN::Message &message = md.message;
printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n, Number: %d", message.qos, message.retained, message.dup, message.id, arrivedcount);
printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
++arrivedcount;
puts((char*)message.payload);
}
int main() {
float version = 0.47;
char* topic = "mbed-sample";
MQTTSNUDP ipstack = MQTTSNUDP();
char * ssid = "KICS-IOT-DHCP";
char * seckey = "AAAFFFBBBC";
printf("\r\nX-NUCLEO-IDW01M1 mbed Application\r\n");
printf("\r\nconnecting to AP\r\n");
if(spwf.connect(ssid, seckey, NSAPI_SECURITY_WPA2)) {
printf("\r\nnow connected\r\n");
} else {
printf("\r\nerror connecting to AP.\r\n");
return -1;
}
const char* Local_IP = spwf.get_ip_address();
printf("IP Address of Device is: %s\n", Local_IP);
const char* Local_MAC = spwf.get_mac_address();
printf("MAC Address of Device is: %s\n", Local_MAC);
MQTTSN::Client<MQTTSNUDP, Countdown> client = MQTTSN::Client<MQTTSNUDP, Countdown>(ipstack);
char* hostname = "192.168.0.114";
int port = 10000;
printf("Connecting to %s:%d\n", hostname, port);
int rc = ipstack.connect(hostname, port);
if (rc != 0)
printf("rc from UDP connect is %d\n", rc);
else
printf("UDP connected\n");
MQTTSNPacket_connectData data = MQTTSNPacket_connectData_initializer;
data.clientID.cstring = "mbed-sample";
data.duration = 60;
if ((rc = client.connect(data)) != 0)
printf("rc from MQTT connect is %d\n", rc);
else
printf("MQTT Connected\n");
MQTTSN_topicid topicid;
topicid.type = MQTTSN_TOPIC_TYPE_NORMAL;
topicid.data.long_.name = topic;
topicid.data.long_.len = strlen(topic);
MQTTSN::QoS grantedQoS;
if ((rc = client.subscribe(topicid, MQTTSN::QOS1, grantedQoS, messageArrived)) != 0)
printf("rc from MQTT subscribe is %d\n", rc);
else
printf("Subscribed to Topic %s\n", topic);
MQTTSN::Message message;
char buf[100];
int i;
// QoS 0
for(i = 0 ; i<= 10; i++){
sprintf(buf, "Hello World! QoS 0 message from app version %f\n", version);
message.qos = MQTTSN::QOS0;
message.retained = false;
message.dup = false;
message.payload = (void*)buf;
message.payloadlen = strlen(buf)+1;
if ((rc = client.publish(topicid, message)) != 0)
printf("rc from MQTT Publish is %d\n", rc);
else
printf("Published Buffer %s to Topic %s\n",buf, topic);
printf("arrivedcount %d, i = %d\n",arrivedcount, i);
//while (arrivedcount < i)
client.yield(100);
}
wait(1);
// QoS 1
sprintf(buf, "Hello World! QoS 1 message from app version %f\n", version);
message.qos = MQTTSN::QOS1;
message.payloadlen = strlen(buf)+1;
if ((rc = client.publish(topicid, message)) != 0)
printf("rc from MQTT Publish is %d\n", rc);
else
printf("Published Buffer %s to Topic %s\n",buf, topic);
i++;
//while (arrivedcount < i)
client.yield(100);
wait(1);
// QoS 1
sprintf(buf, "Hello World! QoS 2 message from app version %f\n", version);
message.qos = MQTTSN::QOS2;
message.payloadlen = strlen(buf)+1;
if ((rc = client.publish(topicid, message)) != 0)
printf("rc from MQTT Publish is %d\n", rc);
else
printf("Published Buffer %s to Topic %s\n",buf, topic);
i++;
//while (arrivedcount < i)
client.yield(100);
wait(1);
/*
// QoS 2
sprintf(buf, "Hello World! QoS 2 message from app version %f\n", version);
message.qos = MQTTSN::QOS2;
message.payloadlen = strlen(buf)+1;
if ((rc = client.publish(topicid, message)) != 0)
printf("rc from MQTT Publish is %d\n", rc);
else
printf("Published Buffer %s to Topic %s\n",buf, topic);
i++;
printf("arrivedcount %d, i = %d\n",arrivedcount, i);
//while (arrivedcount < i)
client.yield(100);
wait(3); */
/*
// n * QoS 2
for (int a = 1; a <= 10; a++)
{
sprintf(buf, "Hello World! QoS 2 message number %d from app version %f\n", i, version);
message.qos = MQTTSN::QOS2;
message.payloadlen = strlen(buf)+1;
if ((rc = client.publish(topicid, message)) != 0)
printf("rc from MQTT Publish is %d\n", rc);
else
printf("Published Buffer %s to Topic %s\n",buf, topic);
i++;
printf("arrivedcount %d, i = %d\n",arrivedcount, i);
while (arrivedcount < i)
client.yield(100);
}
*/
if ((rc = client.unsubscribe(topicid)) != 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);
printf("Finishing with %d messages received\n", arrivedcount);
return 0;
}