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
main.cpp@1:d7773c5860c2, 2018-06-14 (annotated)
- Committer:
- dvn
- Date:
- Thu Jun 14 19:40:33 2018 +0000
- Revision:
- 1:d7773c5860c2
- Parent:
- 0:96a5aefac643
output two messages
Who changed what in which revision?
User | Revision | Line number | New 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 | } |