#include <WiFi.h>
#include <MQTTPubSubClient.h>
WiFiClient client;
MQTTPubSubClient mqtt;
void connect() {
connect_to_wifi:
Serial.print("connecting to wifi...");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.println(" connected!");
connect_to_host:
Serial.print("connecting to host...");
client.stop();
while (!client.connect("mqtt.eclipseprojects.io", 1883)) {//while (!client.connect("public.cloud.shiftr.io", 1883)) {
Serial.print(".");
delay(1000);
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi disconnected");
goto connect_to_wifi;
}
}
Serial.println(" connected!");
Serial.print("connecting to mqtt broker...");
mqtt.disconnect();
while (!mqtt.connect("arduino", "public", "public")) {
Serial.print(".");
delay(1000);
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi disconnected");
goto connect_to_wifi;
}
if (client.connected() != 1) {
Serial.println("WiFiClient disconnected");
goto connect_to_host;
}
}
Serial.println(" connected!");
}
void setup() {
Serial.begin(115200);
WiFi.begin("Wokwi-GUEST", "", 6);
mqtt.begin(client);
connect();
mqtt.subscribe([](const String& topic, const String& payload, const size_t size) {
Serial.println("mqtt received: " + topic + " - " + payload);
});
mqtt.subscribe("app/mqtt/status/#", [](const String& payload, const size_t size) {
Serial.print("app/mqtt/status/# ");
Serial.println(payload);
});
}
int count;
void loop() {
mqtt.update();
if (!mqtt.isConnected()) {
connect();
}
// publish message
static uint32_t prev_ms = millis();
if (millis() > prev_ms + 500) {
prev_ms = millis();
count ++;
char cstr[sizeof(count)];
itoa(count, cstr, 10);
mqtt.publish("app/mqtt/status/millis", cstr);
}
}