#include <WiFi.h>
#include <PubSubClient.h>
#define TRIG_PIN 19
#define ECHO_PIN 18
// WiFi credentials (Wokwi uses "Wokwi-GUEST" without a password)
const char* WIFI_SSID = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
// ThingsBoard MQTT settings
const char* THINGSBOARD_HOST = "thingsboard.cloud"; // Change if self-hosted
const char* ACCESS_TOKEN = "e4ipEEOfugRCXfGgS4nC"; // Change this to your device token
const int MQTT_PORT = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
// Function to connect to WiFi
void setupWiFi() {
Serial.print("Connecting to WiFi...");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to WiFi!");
}
// Function to connect to ThingsBoard MQTT
void reconnectMQTT() {
while (!client.connected()) {
Serial.print("Connecting to ThingsBoard...");
if (client.connect("ESP32-Client", ACCESS_TOKEN, "")) {
Serial.println("Connected!");
} else {
Serial.print("Failed, rc=");
Serial.print(client.state());
Serial.println(" Trying again in 5 seconds...");
delay(5000);
}
}
}
// Function to measure distance
float getDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2; // Convert to cm
return distance;
}
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
setupWiFi();
client.setServer(THINGSBOARD_HOST, MQTT_PORT);
}
void loop() {
if (!client.connected()) {
reconnectMQTT();
}
client.loop();
float distance = getDistance();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Create JSON payload
String payload = "{\"distance\": " + String(distance) + "}";
client.publish("v1/devices/me/telemetry", payload.c_str());
delay(2000); // Send data every 2 seconds
}