#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#define TRIG_PIN 23 // Pin connected to the TRIG of HC-SR04
#define ECHO_PIN 22 // Pin connected to the ECHO of HC-SR04
const char* ssid = "Wokwi-GUEST"; // Your WiFi SSID
const char* password = ""; // Your WiFi password
const char* server = "mqtt.beebotte.com"; // Beebotte MQTT server
const char* username = "token:token_9SeplKFa5pAsQnhY"; // Beebotte API token
const int port = 1883; // MQTT Port
const char* channel = "Distance";
const char* resTemp = "dist";
String topic_dist = "Distance/dist";
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to WiFi");
// Setup MQTT
client.setServer(server, port);
// Setup HC-SR04
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop() {
// Ensure MQTT connection
if (!client.connected()) {
reconnect();
}
client.loop();
// Measure distance using HC-SR04
long duration, distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = (duration / 2) / 29.1; // Convert to cm
// Print the distance to the serial monitor
Serial.print("Distance: ");
Serial.println(distance);
String myjsonTemperature = "";
StaticJsonDocument<200> JT;
JT["channel"] = channel;
JT["resource"] = resTemp;
JT["write"] = true;
JT["data"] = distance;
serializeJson(JT, myjsonTemperature);
client.publish(topic_dist.c_str(), myjsonTemperature.c_str());
Serial.println("Distance sent");
delay(5000); // Wait for 5 seconds before taking the next measurement
}
void reconnect() {
// Try to reconnect to MQTT if not connected
while (!client.connected()) {
String clientId = "ESP32Client" + String(random(1000));
if (client.connect(clientId.c_str(), username, NULL)) {
Serial.println("Connected to MQTT");
} else {
Serial.print("MQTT connection failed, retrying in 5 seconds...");
delay(5000);
}
}
}