#include <Ultrasonic.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#define TRIGGER_PIN 2
#define ECHO_PIN 15
#define BUZZ 4
#define DHTPIN 5
#define DHTTYPE DHT22
Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
const char* server = "thingsboard.cloud";
const int port = 1883;
const char* token = "6duUM8nQgrd0jtTICYdO";
WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
WiFi.begin(ssid, pass, 6);
Serial.begin(115200);
pinMode(BUZZ, OUTPUT);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Menghubungkan ke WiFi..");
}
Serial.println("Terhubung!!");
client.setServer (server, port);
dht.begin();
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
float temp = dht.readTemperature();
float hum = dht.readHumidity();
float jarak= ultrasonic.distanceRead(CM);
double kap = ((400 - jarak)/ 400)*100;
Serial.print("Suhu= ");
Serial.println(temp);
delay(500);
Serial.print("Kelembapan");
Serial.println(hum);
Serial.print("Kapasitas =");
Serial.print(kap);
Serial.println("%");
delay(3000);
if(kap >= 80){
tone(BUZZ, 1000);
delay(500);
}
else{
noTone(BUZZ);
delay(500);
}
String payload = "{\"Kapasitas\":" + String(kap) + ", \"temperature\":" + String(temp) + ", \"humidity\":" + String(hum) + "}";
publishTelemetry(payload);
}
void reconnect() {
while (!client.connected()) {
Serial.println("Menghubungkan Ke Thingsboard...!!");
Serial.print(".");
if (client.connect("ESP32Client", token, NULL)) {
Serial.println("Terhubung Ke ThingsBoard....!!");
} else {
Serial.print("Gagal Menghubungkan...!!!");
Serial.print(client.state());
Serial.println("Coba Lagi Dalam 5 Detik....");
delay(5000);
}
}
}
void publishTelemetry(String payload) {
String topic = "v1/devices/me/telemetry";
if (client.publish(topic.c_str(), payload.c_str())) {
Serial.println("Mengirim Data Ke ThingsBoard");
} else {
Serial.println("Gagal Mengirim Data Ke ThingsBoard...");
}
}