Example MQTT implemented on the ESP8266

Dependencies:   ESP8266Interface MQTT mbed-rtos mbed

Fork of HelloMQTT by MQTT

This is an example of how to run MQTT using the esp8266 as the network connection. This program will default to trying to talk to a public MQTT server (test.mosquitto.org). The example will subscribe to a topic and then publish to that topic. In this way it will effectively echo back to itself. You can alternatively use a private mqtt broker,[[TODO: |instructions here]]

Please note that the ESP8266 interface cannot translate hostnames to IP Addresses, it can only accept raw IP Addresses as input.

main.cpp

Committer:
icraggs
Date:
2014-02-04
Revision:
0:0cae29831d01
Child:
1:a1d5c7a6acbc

File content as of revision 0:0cae29831d01:

#include "mbed.h"
#include "EthernetInterface.h"
#include "C12832_lcd.h"

#include "MQTTPacket.h"


DigitalOut myled(LED2);
C12832_LCD lcd;

int publish()
{
    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
    int rc = 0;
    char buf[200];
    int buflen = sizeof(buf);
    TCPSocketConnection mysock; 
    MQTTString topicString = MQTTString_initializer;
    char* payload = "I'm alive!";
    int payloadlen = strlen(payload);
    int len = 0;
    
    mysock.connect("m2m.eclipse.org", 1883);
          
    data.clientID.cstring = "mbed test client - Ian Craggs";
    data.keepAliveInterval = 20;
    data.cleansession = 1;
    data.MQTTVersion = 3;

    len = MQTTSerialize_connect(buf, buflen, &data);

    topicString.cstring = "mbed NXP LPC1768";
    len += MQTTSerialize_publish(buf + len, buflen - len, 0, 0, 0, 0, topicString, payload, payloadlen);

    len += MQTTSerialize_disconnect(buf + len, buflen - len);

    rc = 0;
    while (rc < len)
    {
        int rc1 = mysock.send(buf, len);
        if (rc1 == -1)
        {
            lcd.printf("Send failed\n");
            break;
        }
        else
            rc += rc1;
    }
    if (rc == len)
        lcd.printf("Send succeeded\n");
    wait(0.2);

    return 0;
}

int main() {
    EthernetInterface eth;
    eth.init(); //Use DHCP
    eth.connect();
    lcd.printf("IP Address is %s\n", eth.getIPAddress());
    
    while(1) {
        myled = 1;
        publish();
        wait(0.2);
        myled = 0;
        publish();
        wait(0.2);
    }
    
    eth.disconnect();
}