|
2 | 2 | This example uses FreeRTOS softwaretimers as there is no built-in Ticker library |
3 | 3 | */ |
4 | 4 |
|
| 5 | + |
5 | 6 | #include <WiFi.h> |
6 | 7 | extern "C" { |
7 | | -#include "freertos/FreeRTOS.h" |
8 | | -#include "freertos/timers.h" |
| 8 | +#include "freertos/FreeRTOS.h" |
| 9 | +#include "freertos/timers.h" |
9 | 10 | } |
10 | 11 | #include <AsyncMqttClient.h> |
11 | 12 |
|
12 | 13 | #define WIFI_SSID "yourSSID" |
13 | 14 | #define WIFI_PASSWORD "yourpass" |
14 | 15 |
|
15 | | -const char* mqttServiceName = "_mqtt"; |
16 | | -const char* protocol = "_tcp"; |
| 16 | +#define MQTT_HOST IPAddress(192, 168, 1, 10) |
| 17 | +#define MQTT_PORT 1883 |
17 | 18 |
|
18 | 19 | AsyncMqttClient mqttClient; |
19 | 20 | TimerHandle_t mqttReconnectTimer; |
20 | 21 | TimerHandle_t wifiReconnectTimer; |
21 | 22 |
|
22 | 23 | void connectToWifi() { |
23 | | - Serial.println("Connecting to Wi-Fi..."); |
24 | | - WiFi.begin(WIFI_SSID, WIFI_PASSWORD); |
| 24 | + Serial.println("Connecting to Wi-Fi..."); |
| 25 | + WiFi.begin(WIFI_SSID, WIFI_PASSWORD); |
25 | 26 | } |
26 | 27 |
|
27 | 28 | void connectToMqtt() { |
28 | | - Serial.println("Connecting to MQTT..."); |
29 | | - mqttClient.connect(); |
| 29 | + Serial.println("Connecting to MQTT..."); |
| 30 | + mqttClient.connect(); |
30 | 31 | } |
31 | 32 |
|
32 | 33 | void WiFiEvent(WiFiEvent_t event) { |
33 | 34 | Serial.printf("[WiFi-event] event: %d\n", event); |
34 | | - switch (event) { |
35 | | - case SYSTEM_EVENT_STA_GOT_IP: |
36 | | - Serial.println("WiFi connected"); |
37 | | - Serial.println("IP address: "); |
38 | | - Serial.println(WiFi.localIP()); |
39 | | - connectToMqtt(); |
40 | | - break; |
41 | | - case SYSTEM_EVENT_STA_DISCONNECTED: |
42 | | - Serial.println("WiFi lost connection"); |
43 | | - xTimerStop(mqttReconnectTimer, 0); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi |
44 | | - xTimerStart(wifiReconnectTimer, 0); |
45 | | - break; |
| 35 | + switch(event) { |
| 36 | + case SYSTEM_EVENT_STA_GOT_IP: |
| 37 | + Serial.println("WiFi connected"); |
| 38 | + Serial.println("IP address: "); |
| 39 | + Serial.println(WiFi.localIP()); |
| 40 | + connectToMqtt(); |
| 41 | + break; |
| 42 | + case SYSTEM_EVENT_STA_DISCONNECTED: |
| 43 | + Serial.println("WiFi lost connection"); |
| 44 | + xTimerStop(mqttReconnectTimer, 0); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi |
| 45 | + xTimerStart(wifiReconnectTimer, 0); |
| 46 | + break; |
46 | 47 | } |
47 | 48 | } |
48 | 49 |
|
49 | 50 | void onMqttConnect(bool sessionPresent) { |
50 | | - Serial.println("Connected to MQTT."); |
51 | | - Serial.print("Session present: "); |
52 | | - Serial.println(sessionPresent); |
53 | | - uint16_t packetIdSub = mqttClient.subscribe("test/lol", 2); |
54 | | - Serial.print("Subscribing at QoS 2, packetId: "); |
55 | | - Serial.println(packetIdSub); |
56 | | - mqttClient.publish("test/lol", 0, true, "test 1"); |
57 | | - Serial.println("Publishing at QoS 0"); |
58 | | - uint16_t packetIdPub1 = mqttClient.publish("test/lol", 1, true, "test 2"); |
59 | | - Serial.print("Publishing at QoS 1, packetId: "); |
60 | | - Serial.println(packetIdPub1); |
61 | | - uint16_t packetIdPub2 = mqttClient.publish("test/lol", 2, true, "test 3"); |
62 | | - Serial.print("Publishing at QoS 2, packetId: "); |
63 | | - Serial.println(packetIdPub2); |
| 51 | + Serial.println("Connected to MQTT."); |
| 52 | + Serial.print("Session present: "); |
| 53 | + Serial.println(sessionPresent); |
| 54 | + uint16_t packetIdSub = mqttClient.subscribe("test/lol", 2); |
| 55 | + Serial.print("Subscribing at QoS 2, packetId: "); |
| 56 | + Serial.println(packetIdSub); |
| 57 | + mqttClient.publish("test/lol", 0, true, "test 1"); |
| 58 | + Serial.println("Publishing at QoS 0"); |
| 59 | + uint16_t packetIdPub1 = mqttClient.publish("test/lol", 1, true, "test 2"); |
| 60 | + Serial.print("Publishing at QoS 1, packetId: "); |
| 61 | + Serial.println(packetIdPub1); |
| 62 | + uint16_t packetIdPub2 = mqttClient.publish("test/lol", 2, true, "test 3"); |
| 63 | + Serial.print("Publishing at QoS 2, packetId: "); |
| 64 | + Serial.println(packetIdPub2); |
64 | 65 | } |
65 | 66 |
|
66 | 67 | void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) { |
67 | | - Serial.println("Disconnected from MQTT."); |
| 68 | + Serial.println("Disconnected from MQTT."); |
68 | 69 |
|
69 | | - if (WiFi.isConnected()) { |
70 | | - xTimerStart(mqttReconnectTimer, 0); |
71 | | - } |
| 70 | + if (WiFi.isConnected()) { |
| 71 | + xTimerStart(mqttReconnectTimer, 0); |
| 72 | + } |
72 | 73 | } |
73 | 74 |
|
74 | 75 | void onMqttSubscribe(uint16_t packetId, uint8_t qos) { |
75 | | - Serial.println("Subscribe acknowledged."); |
76 | | - Serial.print(" packetId: "); |
77 | | - Serial.println(packetId); |
78 | | - Serial.print(" qos: "); |
79 | | - Serial.println(qos); |
| 76 | + Serial.println("Subscribe acknowledged."); |
| 77 | + Serial.print(" packetId: "); |
| 78 | + Serial.println(packetId); |
| 79 | + Serial.print(" qos: "); |
| 80 | + Serial.println(qos); |
80 | 81 | } |
81 | 82 |
|
82 | 83 | void onMqttUnsubscribe(uint16_t packetId) { |
83 | | - Serial.println("Unsubscribe acknowledged."); |
84 | | - Serial.print(" packetId: "); |
85 | | - Serial.println(packetId); |
| 84 | + Serial.println("Unsubscribe acknowledged."); |
| 85 | + Serial.print(" packetId: "); |
| 86 | + Serial.println(packetId); |
86 | 87 | } |
87 | 88 |
|
88 | 89 | void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) { |
89 | | - Serial.println("Publish received."); |
90 | | - Serial.print(" topic: "); |
91 | | - Serial.println(topic); |
92 | | - Serial.print(" qos: "); |
93 | | - Serial.println(properties.qos); |
94 | | - Serial.print(" dup: "); |
95 | | - Serial.println(properties.dup); |
96 | | - Serial.print(" retain: "); |
97 | | - Serial.println(properties.retain); |
98 | | - Serial.print(" len: "); |
99 | | - Serial.println(len); |
100 | | - Serial.print(" index: "); |
101 | | - Serial.println(index); |
102 | | - Serial.print(" total: "); |
103 | | - Serial.println(total); |
| 90 | + Serial.println("Publish received."); |
| 91 | + Serial.print(" topic: "); |
| 92 | + Serial.println(topic); |
| 93 | + Serial.print(" qos: "); |
| 94 | + Serial.println(properties.qos); |
| 95 | + Serial.print(" dup: "); |
| 96 | + Serial.println(properties.dup); |
| 97 | + Serial.print(" retain: "); |
| 98 | + Serial.println(properties.retain); |
| 99 | + Serial.print(" len: "); |
| 100 | + Serial.println(len); |
| 101 | + Serial.print(" index: "); |
| 102 | + Serial.println(index); |
| 103 | + Serial.print(" total: "); |
| 104 | + Serial.println(total); |
104 | 105 | } |
105 | 106 |
|
106 | 107 | void onMqttPublish(uint16_t packetId) { |
107 | | - Serial.println("Publish acknowledged."); |
108 | | - Serial.print(" packetId: "); |
109 | | - Serial.println(packetId); |
| 108 | + Serial.println("Publish acknowledged."); |
| 109 | + Serial.print(" packetId: "); |
| 110 | + Serial.println(packetId); |
110 | 111 | } |
111 | 112 |
|
112 | 113 | void setup() { |
113 | | - Serial.begin(115200); |
114 | | - Serial.println(); |
115 | | - Serial.println(); |
| 114 | + Serial.begin(115200); |
| 115 | + Serial.println(); |
| 116 | + Serial.println(); |
116 | 117 |
|
117 | | - mqttReconnectTimer = xTimerCreate("mqttTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(connectToMqtt)); |
118 | | - wifiReconnectTimer = xTimerCreate("wifiTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(connectToWifi)); |
| 118 | + mqttReconnectTimer = xTimerCreate("mqttTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(connectToMqtt)); |
| 119 | + wifiReconnectTimer = xTimerCreate("wifiTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(connectToWifi)); |
119 | 120 |
|
120 | | - WiFi.onEvent(WiFiEvent); |
| 121 | + WiFi.onEvent(WiFiEvent); |
121 | 122 |
|
122 | | - mqttClient.onConnect(onMqttConnect); |
123 | | - mqttClient.onDisconnect(onMqttDisconnect); |
124 | | - mqttClient.onSubscribe(onMqttSubscribe); |
125 | | - mqttClient.onUnsubscribe(onMqttUnsubscribe); |
126 | | - mqttClient.onMessage(onMqttMessage); |
127 | | - mqttClient.onPublish(onMqttPublish); |
128 | | - mqttClient.setServer(mqttServiceName, protocol); |
| 123 | + mqttClient.onConnect(onMqttConnect); |
| 124 | + mqttClient.onDisconnect(onMqttDisconnect); |
| 125 | + mqttClient.onSubscribe(onMqttSubscribe); |
| 126 | + mqttClient.onUnsubscribe(onMqttUnsubscribe); |
| 127 | + mqttClient.onMessage(onMqttMessage); |
| 128 | + mqttClient.onPublish(onMqttPublish); |
| 129 | + mqttClient.setServer(MQTT_HOST, MQTT_PORT); |
129 | 130 |
|
130 | | - connectToWifi(); |
| 131 | + connectToWifi(); |
131 | 132 | } |
132 | 133 |
|
133 | 134 | void loop() { |
|
0 commit comments