Simple mqtt client using the MqttPacket lib to create a connect to the public broker and publish series of message. Done over Ethernet.

Dependencies:   C12832_lcd EthernetInterface MQTTPacket mbed-rtos mbed

Committer:
dvn
Date:
Thu Jun 14 19:43:47 2018 +0000
Revision:
2:c285b1e518a6
Parent:
1:d7773c5860c2
Simple mqtt connect and publish program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dvn 1:d7773c5860c2 1 /*******************************************************************************
dvn 1:d7773c5860c2 2 * Copyright (c) 2014 IBM Corp.
dvn 1:d7773c5860c2 3 *
dvn 1:d7773c5860c2 4 * All rights reserved. This program and the accompanying materials
dvn 1:d7773c5860c2 5 * are made available under the terms of the Eclipse Public License v1.0
dvn 1:d7773c5860c2 6 * and Eclipse Distribution License v1.0 which accompany this distribution.
dvn 1:d7773c5860c2 7 *
dvn 1:d7773c5860c2 8 * The Eclipse Public License is available at
dvn 1:d7773c5860c2 9 * http://www.eclipse.org/legal/epl-v10.html
dvn 1:d7773c5860c2 10 * and the Eclipse Distribution License is available at
dvn 1:d7773c5860c2 11 * http://www.eclipse.org/org/documents/edl-v10.php.
dvn 1:d7773c5860c2 12 *
dvn 1:d7773c5860c2 13 * Contributors:
dvn 1:d7773c5860c2 14 * Ian Craggs - initial API and implementation and/or initial documentation
dvn 1:d7773c5860c2 15 *******************************************************************************/
dvn 1:d7773c5860c2 16
dvn 1:d7773c5860c2 17 #include "mbed.h"
dvn 0:96a5aefac643 18 #include "EthernetInterface.h"
dvn 1:d7773c5860c2 19 #include "C12832_lcd.h"
dvn 1:d7773c5860c2 20
dvn 1:d7773c5860c2 21 #include "MQTTPacket.h"
dvn 1:d7773c5860c2 22
dvn 1:d7773c5860c2 23 DigitalOut myled(LED2);
dvn 1:d7773c5860c2 24 C12832_LCD lcd;
dvn 1:d7773c5860c2 25
dvn 1:d7773c5860c2 26 int publish(char* payload)
dvn 0:96a5aefac643 27 {
dvn 1:d7773c5860c2 28 int rc = 0;
dvn 1:d7773c5860c2 29 int len = 0;
dvn 1:d7773c5860c2 30 int payloadlen = strlen(payload);
dvn 1:d7773c5860c2 31 MQTTString topicString = MQTTString_initializer;
dvn 1:d7773c5860c2 32 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
dvn 1:d7773c5860c2 33 TCPSocketConnection mysock;
dvn 1:d7773c5860c2 34 unsigned char buf[1024];
dvn 1:d7773c5860c2 35 int buflen = sizeof(buf);
dvn 1:d7773c5860c2 36
dvn 1:d7773c5860c2 37 data.clientID.cstring = "0x556677448899330000";
dvn 1:d7773c5860c2 38 data.keepAliveInterval = 30;
dvn 1:d7773c5860c2 39 data.cleansession = 1;
dvn 1:d7773c5860c2 40 data.MQTTVersion = 3;
dvn 1:d7773c5860c2 41
dvn 1:d7773c5860c2 42 mysock.connect("m2m.eclipse.org", 1883);
dvn 1:d7773c5860c2 43
dvn 1:d7773c5860c2 44 len = MQTTSerialize_connect((unsigned char*)buf, buflen, &data);
dvn 1:d7773c5860c2 45
dvn 1:d7773c5860c2 46 topicString.cstring = "base";
dvn 1:d7773c5860c2 47 len += MQTTSerialize_publish((unsigned char*)buf + len, buflen - len, 0, 0, 0, 0, topicString, (unsigned char*)payload, payloadlen);
dvn 1:d7773c5860c2 48
dvn 1:d7773c5860c2 49 len += MQTTSerialize_disconnect((unsigned char*)buf + len, buflen - len);
dvn 1:d7773c5860c2 50
dvn 1:d7773c5860c2 51 rc = 0;
dvn 1:d7773c5860c2 52 while (rc < len) {
dvn 1:d7773c5860c2 53 int rc1 = mysock.send((char*)buf, len);
dvn 1:d7773c5860c2 54 if (rc1 == -1) {
dvn 1:d7773c5860c2 55 lcd.printf("Send failed\n");
dvn 1:d7773c5860c2 56 break;
dvn 1:d7773c5860c2 57 } else
dvn 1:d7773c5860c2 58 rc += rc1;
dvn 1:d7773c5860c2 59 }
dvn 1:d7773c5860c2 60 if (rc == len)
dvn 1:d7773c5860c2 61 lcd.printf("Sent: %s \n", payload);
dvn 1:d7773c5860c2 62 wait(0.2);
dvn 1:d7773c5860c2 63
dvn 1:d7773c5860c2 64 return 0;
dvn 0:96a5aefac643 65 }
dvn 1:d7773c5860c2 66
dvn 0:96a5aefac643 67 int main()
dvn 0:96a5aefac643 68 {
dvn 0:96a5aefac643 69 EthernetInterface eth;
dvn 0:96a5aefac643 70 eth.init(); //Use DHCP
dvn 0:96a5aefac643 71 eth.connect();
dvn 1:d7773c5860c2 72 lcd.printf("IP Address is %s\n", eth.getIPAddress());
dvn 1:d7773c5860c2 73
dvn 1:d7773c5860c2 74 myled = 1;
dvn 1:d7773c5860c2 75 publish("Message 1");
dvn 1:d7773c5860c2 76 wait(0.2);
dvn 1:d7773c5860c2 77 myled = 0;
dvn 1:d7773c5860c2 78 publish("Message 2");
dvn 1:d7773c5860c2 79 wait(0.2);
dvn 1:d7773c5860c2 80
dvn 0:96a5aefac643 81 eth.disconnect();
dvn 0:96a5aefac643 82 }