#include "mbed.h"
#include "mbedtls/config.h"
#include "mbedtls/platform.h"
#include "mbedtls/entropy.h"
#include "mbedtls/ctr_drbg.h"
#include "EthernetInterface.h"
#include "MQTTClient.h"
#include "MQTTEthernet.h"
#include "MQTTNetwork.h"
Serial pc(SERIAL_TX, SERIAL_RX);
EthernetInterface net;
int main()
{
int rc = 0;
pc.baud(115200);
net.connect();
const char *ip = net.get_ip_address();
mbedtls_printf("IP address is: %s\n", ip ? ip : "No IP");
MQTTNetwork mqttNetwork(&net);
MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);
mbedtls_printf("Connecting to %s:%d\r\n", "192.168.1.101", 1883);
rc = mqttNetwork.connect("192.168.1.101", 1883);
if (rc != 0) {
mbedtls_printf("rc from TCP connect is %d\r\n", rc);
return -1;
}
MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
data.MQTTVersion = 3;
data.clientID.cstring = "mbed-sample";
data.username.cstring = "testuser";
data.password.cstring = "testpassword";
if ((rc = client.connect(data)) != 0) {
mbedtls_printf("rc from MQTT connect is %d\r\n", rc);
return -1;
}
// Start -- Make a ctr drbg context
mbedtls_entropy_context entropy;
mbedtls_entropy_init( &entropy );
mbedtls_ctr_drbg_context ctr_drbg_ctx;
mbedtls_ctr_drbg_init(&ctr_drbg_ctx);
const char pers[] = "ecdh";
rc = mbedtls_ctr_drbg_seed( &ctr_drbg_ctx, mbedtls_entropy_func, &entropy, (const unsigned char *) pers, sizeof pers);
if (rc != 0) {
mbedtls_printf( " failed\n ! mbedtls_ctr_drbg_seed returned %d\n", rc );
mbedtls_entropy_free(&entropy);
mbedtls_ctr_drbg_free(&ctr_drbg_ctx);
return rc;
}
// End -- Make a ctr drbg context
unsigned int iteration = 0;
while(1) {
MQTT::Message message;
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("test_topic", message);
mbedtls_printf("published done. rc=%d\r\n", rc);
wait_ms(10000);
iteration = iteration + 1;
}
mbedtls_entropy_free(&entropy);
mbedtls_ctr_drbg_free(&ctr_drbg_ctx);
return 0;
}