#include #include #define WIFI_SSID "yourSSID" #define WIFI_PASSWORD "yourpass" #define MQTT_HOST IPAddress(192, 168, 1, 10) #define MQTT_PORT 1883 WiFiEventHandler wifiConnectHandler; WiFiEventHandler wifiDisconnectHandler; espMqttClient mqttClient; bool reconnectMqtt = false; uint32_t lastReconnect = 0; size_t fetchPayload(uint8_t* dest, size_t len, size_t index) { Serial.printf("filling buffer at index %zu\n", index); // fill the buffer with random bytes // but maybe don't fill the entire buffer size_t i = 0; for (; i < len; ++i) { dest[i] = random(0xFF); if (dest[i] > 0xFC) { ++i; // extra increment to compensate 'break' break; } } return i; } void connectToWiFi() { Serial.println("Connecting to Wi-Fi..."); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); } void connectToMqtt() { Serial.println("Connecting to MQTT..."); if (!mqttClient.connect()) { reconnectMqtt = true; lastReconnect = millis(); Serial.println("Connecting failed."); } else { reconnectMqtt = false; } } void onWiFiConnect(const WiFiEventStationModeGotIP& event) { (void) event; Serial.println("Connected to Wi-Fi."); connectToMqtt(); } void onWiFiDisconnect(const WiFiEventStationModeDisconnected& event) { (void) event; Serial.println("Disconnected from Wi-Fi."); } void onMqttConnect(bool sessionPresent) { Serial.println("Connected to MQTT."); Serial.print("Session present: "); Serial.println(sessionPresent); mqttClient.publish("topic/largepayload", 1, false, fetchPayload, 6000); } void onMqttDisconnect(espMqttClientTypes::DisconnectReason reason) { Serial.printf("Disconnected from MQTT: %u.\n", static_cast(reason)); if (WiFi.isConnected()) { reconnectMqtt = true; lastReconnect = millis(); } } void onMqttPublish(uint16_t packetId) { Serial.println("Publish acknowledged."); Serial.print(" packetId: "); Serial.println(packetId); } void setup() { Serial.begin(115200); Serial.println(); Serial.println(); WiFi.setAutoConnect(false); WiFi.setAutoReconnect(true); wifiConnectHandler = WiFi.onStationModeGotIP(onWiFiConnect); wifiDisconnectHandler = WiFi.onStationModeDisconnected(onWiFiDisconnect); mqttClient.onConnect(onMqttConnect); mqttClient.onDisconnect(onMqttDisconnect); mqttClient.onPublish(onMqttPublish); mqttClient.setServer(MQTT_HOST, MQTT_PORT); connectToWiFi(); } void loop() { static uint32_t currentMillis = millis(); mqttClient.loop(); if (reconnectMqtt && currentMillis - lastReconnect > 5000) { connectToMqtt(); } }