MQTT client to test the ENC28J60-EMAC on NUCLEO-F446RE.

Dependencies:   ENC28J60-EMAC

Committer:
hudakz
Date:
Sat Mar 27 22:56:46 2021 +0000
Revision:
4:f8abf1fc6615
Parent:
2:2a16a9f4509c
Child:
5:d9570dbf2f82
MQTT client to test the ENC28J60-EMAC on NUCLEO-F446RE.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:238f0d0c0ba3 1 #include "mbed.h"
hudakz 0:238f0d0c0ba3 2
hudakz 0:238f0d0c0ba3 3 #include "EthernetInterface.h"
hudakz 0:238f0d0c0ba3 4 #include "MQTTNetwork.h"
hudakz 0:238f0d0c0ba3 5 #include "MQTTmbed.h"
hudakz 0:238f0d0c0ba3 6 #include "MQTTClient.h"
hudakz 0:238f0d0c0ba3 7
hudakz 0:238f0d0c0ba3 8 #define IP "192.168.1.35"
hudakz 0:238f0d0c0ba3 9 #define GATEWAY "192.168.1.1"
hudakz 0:238f0d0c0ba3 10 #define NETMASK "255.255.255.0"
hudakz 0:238f0d0c0ba3 11 #define BROKER_IP "192.168.1.31" // IP address of your MQTT broker. Change to match your case.
hudakz 0:238f0d0c0ba3 12 #define MQTT_PORT 1883 // MQTT port
hudakz 2:2a16a9f4509c 13
hudakz 0:238f0d0c0ba3 14 const uint8_t MAC[6] = { 0, 1, 2, 3, 4, 5 };
hudakz 0:238f0d0c0ba3 15
hudakz 0:238f0d0c0ba3 16 // Global variables
hudakz 0:238f0d0c0ba3 17 char topic[256];
hudakz 0:238f0d0c0ba3 18 EthernetInterface net;
hudakz 0:238f0d0c0ba3 19 MQTTNetwork mqttNetwork(&net);
hudakz 0:238f0d0c0ba3 20 MQTT::Client<MQTTNetwork, Countdown> mqttClient(mqttNetwork);
hudakz 0:238f0d0c0ba3 21
hudakz 0:238f0d0c0ba3 22 // Function prototypes
hudakz 0:238f0d0c0ba3 23 void onMqttMsgReceived(MQTT::MessageData& md);
hudakz 0:238f0d0c0ba3 24
hudakz 0:238f0d0c0ba3 25 /**
hudakz 0:238f0d0c0ba3 26 * @brief
hudakz 0:238f0d0c0ba3 27 * @note
hudakz 0:238f0d0c0ba3 28 * @param
hudakz 0:238f0d0c0ba3 29 * @retval
hudakz 0:238f0d0c0ba3 30 */
hudakz 0:238f0d0c0ba3 31 FileHandle* mbed::mbed_override_console(int)
hudakz 0:238f0d0c0ba3 32 {
hudakz 0:238f0d0c0ba3 33 static BufferedSerial myConsole(USBTX, USBRX, 460800);
hudakz 0:238f0d0c0ba3 34 return &myConsole;
hudakz 0:238f0d0c0ba3 35 }
hudakz 0:238f0d0c0ba3 36
hudakz 0:238f0d0c0ba3 37 /**
hudakz 0:238f0d0c0ba3 38 * @brief
hudakz 0:238f0d0c0ba3 39 * @note
hudakz 0:238f0d0c0ba3 40 * @param
hudakz 0:238f0d0c0ba3 41 * @retval
hudakz 0:238f0d0c0ba3 42 */
hudakz 0:238f0d0c0ba3 43 int main(void)
hudakz 0:238f0d0c0ba3 44 {
hudakz 0:238f0d0c0ba3 45 // Bring up the ethernet interface
hudakz 0:238f0d0c0ba3 46 net.set_network(IP, NETMASK, GATEWAY); // include this to use static IP address
hudakz 0:238f0d0c0ba3 47 net.get_emac().set_hwaddr(MAC); // set MAC address
hudakz 0:238f0d0c0ba3 48 printf("MQTT client example\n");
hudakz 0:238f0d0c0ba3 49 if (net.connect() != 0) {
hudakz 0:238f0d0c0ba3 50 printf("Error connecting\n");
hudakz 0:238f0d0c0ba3 51 return -1;
hudakz 0:238f0d0c0ba3 52 }
hudakz 0:238f0d0c0ba3 53
hudakz 0:238f0d0c0ba3 54 // Show network address
hudakz 0:238f0d0c0ba3 55 SocketAddress addr;
hudakz 0:238f0d0c0ba3 56 net.get_ip_address(&addr);
hudakz 0:238f0d0c0ba3 57 printf("IP address: %s\n", addr.get_ip_address() ? addr.get_ip_address() : "None");
hudakz 0:238f0d0c0ba3 58 net.get_netmask(&addr);
hudakz 0:238f0d0c0ba3 59 printf("Netmask: %s\n", addr.get_ip_address() ? addr.get_ip_address() : "None");
hudakz 0:238f0d0c0ba3 60 net.get_gateway(&addr);
hudakz 0:238f0d0c0ba3 61 printf("Gateway: %s\n", addr.get_ip_address() ? addr.get_ip_address() : "None");
hudakz 0:238f0d0c0ba3 62
hudakz 0:238f0d0c0ba3 63 printf("Connecting to %s:%d\r\n", BROKER_IP, MQTT_PORT);
hudakz 0:238f0d0c0ba3 64 nsapi_error_t error = mqttNetwork.connect(BROKER_IP, MQTT_PORT);
hudakz 0:238f0d0c0ba3 65 if (error == NSAPI_ERROR_OK) {
hudakz 0:238f0d0c0ba3 66 printf("Server connected.\r\n");
hudakz 0:238f0d0c0ba3 67 }
hudakz 0:238f0d0c0ba3 68 else {
hudakz 0:238f0d0c0ba3 69 printf("Cannot connect server.\r\n");
hudakz 0:238f0d0c0ba3 70 return -1;
hudakz 0:238f0d0c0ba3 71 }
hudakz 0:238f0d0c0ba3 72
hudakz 0:238f0d0c0ba3 73 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
hudakz 0:238f0d0c0ba3 74 data.MQTTVersion = 3;
hudakz 0:238f0d0c0ba3 75 data.clientID.cstring = "MyMqttClient";
hudakz 0:238f0d0c0ba3 76 data.username.cstring = NULL;
hudakz 0:238f0d0c0ba3 77 data.password.cstring = NULL;
hudakz 0:238f0d0c0ba3 78
hudakz 0:238f0d0c0ba3 79 // Connect MQTT client to MQTT broker
hudakz 0:238f0d0c0ba3 80 printf("Connecting MQTT Broker\r\n");
hudakz 0:238f0d0c0ba3 81 if (mqttClient.connect(data) != 0) {
hudakz 0:238f0d0c0ba3 82 printf("Cannot connect MQTT broker.\r\n");
hudakz 0:238f0d0c0ba3 83 return -1;
hudakz 0:238f0d0c0ba3 84 };
hudakz 0:238f0d0c0ba3 85 printf("MQTT Broker connected.\r\n");
hudakz 0:238f0d0c0ba3 86
hudakz 0:238f0d0c0ba3 87 // Subscribe to topics
hudakz 0:238f0d0c0ba3 88 mqttClient.subscribe("workroomThermostat/#", MQTT::QOS0, onMqttMsgReceived);
hudakz 0:238f0d0c0ba3 89
hudakz 0:238f0d0c0ba3 90 // Main thread loop
hudakz 0:238f0d0c0ba3 91 while (1) {
hudakz 0:238f0d0c0ba3 92 mqttClient.yield(10);
hudakz 0:238f0d0c0ba3 93 }
hudakz 0:238f0d0c0ba3 94 }
hudakz 0:238f0d0c0ba3 95
hudakz 0:238f0d0c0ba3 96 /**
hudakz 0:238f0d0c0ba3 97 * @brief
hudakz 0:238f0d0c0ba3 98 * @note
hudakz 0:238f0d0c0ba3 99 * @param
hudakz 0:238f0d0c0ba3 100 * @retval
hudakz 0:238f0d0c0ba3 101 */
hudakz 0:238f0d0c0ba3 102 void onMqttMsgReceived(MQTT::MessageData& md)
hudakz 0:238f0d0c0ba3 103 {
hudakz 0:238f0d0c0ba3 104 memset(topic, 0, sizeof(topic));
hudakz 0:238f0d0c0ba3 105 memcpy(topic, md.topicName.lenstring.data, md.topicName.lenstring.len);
hudakz 0:238f0d0c0ba3 106 printf("topic: %s\r\n", topic);
hudakz 0:238f0d0c0ba3 107 }