#include <WiFi.h>
#include <PubSubClient.h>
// WiFi Credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// MQTT Broker Details
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
// MQTT Topics
const char* topic_temperature = "vit/iot/temp";
const char* topic_status = "vit/iot/status";
// Pin Definitions
const int potPin = 34;
const int ledPin = 23;
// Variables
WiFiClient espClient;
PubSubClient client(espClient);
float temperature = 0;
unsigned long lastMsg = 0;
const long interval = 5000;
int msgCount = 0;
// Function to Connect WiFi
void setup_wifi() {
delay(10);
Serial.println("Connecting to WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Connected ✓");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
// Function to Reconnect MQTT
void reconnect() {
while (!client.connected()) {
Serial.print("Connecting to MQTT...");
String clientId = "ESP32_Publisher_";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println(" connected ✓");
Serial.print("Client ID: ");
Serial.println(clientId);
// Publish Online Status
client.publish(topic_status, "{\"status\":\"online\",\"device\":\"publisher\"}");
// Blink LED
for (int i = 0; i < 3; i++) {
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}
} else {
Serial.print(" failed, rc=");
Serial.print(client.state());
Serial.println(" retrying in 5 seconds...");
delay(5000);
}
}
}
// Function to Publish Data
void publishData() {
Serial.println("\n--- PUBLISHING ---");
String payload = "{";
payload += "\"temp\":" + String(temperature, 1) + ",";
payload += "\"count\":" + String(msgCount) + ",";
payload += "\"time\":" + String(millis());
payload += "}";
Serial.print("Topic: ");
Serial.println(topic_temperature);
Serial.print("Payload: ");
Serial.println(payload);
if (client.publish(topic_temperature, payload.c_str())) {
Serial.println("Publish successful ✓");
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
} else {
Serial.println("Publish failed ✗");
}
Serial.println("------------------");
}
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
int potValue = analogRead(potPin);
// Map 0–4095 to 0–50°C
temperature = map(potValue, 0, 4095, 0, 500) / 10.0;
Serial.print("Temp: ");
Serial.print(temperature);
Serial.println(" °C");
unsigned long now = millis();
if (now - lastMsg > interval) {
lastMsg = now;
msgCount++;
publishData();
}
delay(1000);
}