Jack Hansdampf
/
MQTT_HelloENC28J60
MQTT client to test the ENC28J60-EMAC on NUCLEO-L152RE
main.cpp@4:f8abf1fc6615, 2021-03-27 (annotated)
- 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?
User | Revision | Line number | New 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 | } |