#include <WiFi.h>
#include "PubSubClient.h"
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
char *mqttServer = "broker.emqx.io";
int mqttPort = 1883;
#define ECHO_PIN 26
#define TRIG_PIN 27
float distance_cm, duration_us;
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Callback - ");
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected to Wi-Fi");
mqttClient.setServer(mqttServer, mqttPort);
mqttClient.setCallback(callback);
}
void loop() {
if (!mqttClient.connected())
{ Serial.println("Connecting to MQTT Broker...");
while (!mqttClient.connected()) {
Serial.println("Reconnecting to MQTT Broker..");
String clientId = "ESP32Client-";
clientId += String(random(0xffff), HEX);
if (mqttClient.connect(clientId.c_str())) {
Serial.println("Connected.");
}
}
} else {
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration_us = pulseIn(ECHO_PIN, HIGH);
distance_cm = 0.017 * duration_us;
Serial.print("distance: ");
Serial.print(distance_cm);
Serial.println(" cm");
mqttClient.publish("servoafnan", String(distance_cm).c_str());
delay(2000);
}
}