
123
Dependencies: MQTTSN
Diff: Client-main.cpp
- Revision:
- 13:8f1f478c300a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Client-main.cpp Mon Dec 10 08:03:46 2018 +0000 @@ -0,0 +1,190 @@ +/* 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; + +}