#include <WiFi.h>
#include <PubSubClient.h>
// Wi-Fi credentials
const char* SSID = "Wokwi-GUEST"; // "REPLACE_WITH_WIFI_SSID"
const char* PASSWORD = ""; // "REPLACE_WITH_WIFI_PASSWORD"
// Mosquito MQTT Broker Credentials (ThingClient, IP, Port, Topic)
#define THINGNAME "ESP32 NODE"
#define mqtt_server "io.adafruit.com"
#define mqtt_port 1883
#define mqtt_username "ray_aray57"
#define mqtt_password "aio_imnp25KWG1LUWbaJlLMsg3I3Pngx"
#define MQTT_TOPIC "ray_aray57/feeds/temperature-feed"
// Create object
WiFiClient ESP32_client;
PubSubClient client(ESP32_client);
unsigned long lastReconnectAttempt = 0;
unsigned long lastMsg = 0;
// Custom function to reconnect on MQTT broker
boolean reconnect() {
if (client.connect(THINGNAME, mqtt_username, mqtt_password)) {
Serial.println("ESP32 connected!");
}
return client.connected();
}
// Custom function for callback when subscribe message
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
void setup() {
Serial.begin(115200);
// Set ESP32 WiFi to station mode
WiFi.mode(WIFI_STA);
// Initiate the Wi-Fi connection
WiFi.begin(SSID, PASSWORD, 6);
Serial.print("Connecting...");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}
Serial.print("\nConnected to the WiFi network: ");
Serial.println(SSID);
// Connect ESP32 to the shiftr.io MQTT broker cloud server
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
client.connect(THINGNAME, mqtt_username, mqtt_password);
// Check MQTT broker connection status
if (!client.loop()) {
Serial.println("MQTT broker Timeout!");
}
else {
Serial.println("ESP32 connected!");
}
}
void loop() {
// Try to reconnect ESP32 device to MQTT broker
if (!client.connected()) {
unsigned long now = millis();
if (now - lastReconnectAttempt > 5000) {
Serial.println("Attempting MQTT connection...");
lastReconnectAttempt = now;
if (reconnect()) {
lastReconnectAttempt = 0;
}
}
} else {
client.loop();
// Publish and subscribe MQTT message
unsigned long now = millis();
if (now - lastMsg > 10000) {
lastMsg = now;
float temperature = random(1000, 2000) / 100.00;
const int BUFF_SIZE = 50;
char msg[BUFF_SIZE];
snprintf(msg, BUFF_SIZE, "{\"value\": \"%f\"}", temperature);
Serial.print("Publish message: ");
Serial.println(msg);
client.publish(MQTT_TOPIC, msg);
client.subscribe(MQTT_TOPIC);
}
}
}