Example MQTT for CO657. You should modify your client ID! Broker and Topic can be adjusted to situation.

Dependencies:   C12832 MQTT_MbedOS

main.cpp

Committer:
azazeal88
Date:
2016-11-01
Revision:
0:35df42ee93ed

File content as of revision 0:35df42ee93ed:

#include "mbed.h"
#include "C12832.h"
#include "MQTTEthernet.h"
#include "MQTTClient.h"

// LCD Pinout
C12832 lcd(D11, D13, D12, D7, D10);

// MQTT Variables
char* MqttHostname = "broker.hivemq.com";
int MqttPort = 1883;
char* MqttTopic = "mbed-sample";
char* MqttClientId = "changeme";

int main()
{
    // Clear LCD and print a welcome message from row 0, col 0.
    lcd.cls();
    lcd.locate(0,0);
    lcd.printf("Example MQTT client\n");

    // Brings up the network interface
    MQTTEthernet eth = MQTTEthernet();
    const char *ip = eth.get_ip_address();
    
    lcd.cls();
    lcd.locate(0,0);
    lcd.printf("IP address is: %s\n", ip ? ip : "No IP");
    
    // Create Mbed Client Interface
    MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(eth);

    // Create TCP connection
    eth.open(eth.getEth());
    int rc = eth.connect(MqttHostname, MqttPort);
    lcd.printf("TCP Status: %s\n", (rc == 0) ? "Success" : "Failure");
    
    // Wait for a short length of time to allow user to see output messages.
    Thread::wait(2000);
    
    if(rc == 0){
        
        lcd.cls();
        lcd.locate(0,0);
        lcd.printf("Starting MQTT Client");

        MQTTPacket_connectData data = MQTTPacket_connectData_initializer;       
        data.MQTTVersion = 3;
        data.clientID.cstring = MqttClientId;
        rc = client.connect(data);
        
        lcd.cls();
        lcd.locate(0,0);
        lcd.printf("MQTT Client: %s\n", (rc == 0) ? "Connected" : "Failed");
        
        while(rc == 0){
            MQTT::Message message;
 
            // QoS 0
            char buf[100];
            sprintf(buf, "Hello World!");
            message.qos = MQTT::QOS0;
            message.retained = false;
            message.dup = false;
            message.payload = (void*)buf;
            message.payloadlen = strlen(buf)+1;
            rc = client.publish(MqttTopic, message);  
            
            Thread::wait(5000);

        }
    }
    
    // It is good practice to close the socket
    eth.disconnect();
}