Mbed subscribe not working

09 Jul 2019
  1. include "mbed.h"
  2. include "MQTTEthernet.h"
  3. include "MQTTClient.h"
  4. include "MQTTNetwork.h"

MQTT Variables char* MqttHostname = "35.239.119.247"; int MqttPort = 1883; char* MqttTopic = "mbedqtt"; char* Username = "admin"; char* Password = "public"; char* MqttClientId = "changeme";

static const char * topic = "sub";

Serial pc(USBTX, USBRX, 115200);

void messageArrived(MQTT::MessageData& md) { pc.printf("Messages Arrived"); printf("Timestamp: %d\n", mscount); MQTT::Message &message = md.message; printf("Message received: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id); printf("Payload %.*s\n", message.payload, (char*)message.payloadlen);

}

int main() { while(true){ MQTTEthernet eth = MQTTEthernet(); const char *ip = eth.get_ip_address();

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); 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);

printf("Starting MQTT Client");

int a = rand()%16; char buff[50]; sprintf(buff, "%s - %d", MqttClientId, a);

MQTTPacket_connectData data = MQTTPacket_connectData_initializer; data.MQTTVersion = 3; data.clientID.cstring = buff; data.username.cstring = Username; data.password.cstring = Password; rc = client.connect(data);

printf("MQTT Client: %s\n", (rc == 0) ? "Connected" : "Failed");

printf("Subscribing to MQTT topic %s: ", topic);

if ((rc = client.subscribe(topic, MQTT::QOS2, messageArrived)) != 0) printf("failed: rc= %d\r\n", rc); else printf("success\r\n");

MQTT::Message message;

Brings up the network interfac

while(client.isConnected()){

QoS 0 char buf[100]; sprintf(buf, "Hello!"); message.qos = MQTT::QOS0; message.retained = false; message.dup = false; message.payload = (void*)buf; message.payloadlen = strlen(buf)+1; rc = client.publish(MqttTopic, message); printf("%s", message); printf("\n");

printf("MQTT Client Status: %d\n", client.isConnected()); Thread::wait(1000); }

eth.disconnect(); }

}