#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include "ThingsBoard.h"
#include "DHTesp.h"
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define TOKEN "6rJ5EkdFFEeLZaIz1evC"
#define THINGSBOARD_SERVER "thingsboard.cloud"
WiFiClient espClient;
ThingsBoard tb(espClient);
int status = WL_IDLE_STATUS;
#define pumpIn 12 // PUMP IN
#define pumpOut 13 // PUMP OUT
int ledM = 26; // LED merah
int ledH = 27; // LED hijau
#define PIN_TRIG 2 // Ultrasonic
#define PIN_ECHO 4 // Ultrasonic
#define buzzer 15 // Buzzer
LiquidCrystal_I2C lcd(0x27,20,4); // LCD 20x4
const int DHT_PIN = 21;
DHTesp dhtSensor;
void InitWiFi()
{
Serial.println("Connecting to AP ...");
// attempt to connect to WiFi network
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
void reconnect() {
// Loop until we're reconnected
status = WiFi.status();
if ( status != WL_CONNECTED) {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
}
void setup() {
// initialize serial for debugging
Serial.begin(115200);
Serial.println();
pinMode(ledM, OUTPUT);
pinMode(ledH, OUTPUT);
pinMode(pumpIn, OUTPUT);
pinMode(pumpOut, OUTPUT);
pinMode(buzzer, OUTPUT); // BUZZER
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
InitWiFi();
lcd.init();
lcd.backlight();
lcd.setCursor(0,0); lcd.print("===VANAME GROUND===");
lcd.setCursor(6,1); lcd.print("STATION");
lcd.setCursor(7,3); lcd.print("<ON>");
tone(buzzer, 2000, 500);
delay(2000);
lcd.clear();
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
reconnect();
}
if (!tb.connected()) {
Serial.print("Connecting to: ");
Serial.print(THINGSBOARD_SERVER);
Serial.print(" with token ");
Serial.println(TOKEN);
if (!tb.connect(THINGSBOARD_SERVER, TOKEN)) {
Serial.println("Failed to connect");
return;
}
}
tb.sendTelemetryFloat("lat", -6.898156878673054);
tb.sendTelemetryFloat("long", 110.2082724534785);
air();
panas();
delay(500);
lcd.clear();
Serial.println("Sending data to Thingsboard");
tb.loop();
}
void air()
{
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
int duration = pulseIn(PIN_ECHO, HIGH);
float water = duration * 0.0340051008 / 2;
Serial.print("Tinggi Air: ");
Serial.print(water);
Serial.print(" cm");
Serial.println();
lcd.setCursor(1,0);
lcd.print("T. Air : ");
lcd.print(water);
lcd.print(" cm");
tb.sendTelemetryInt("Tinggi Air", water);
digitalWrite(pumpIn, 0);
digitalWrite(pumpOut, 0);
if (water <= 250) {
digitalWrite( pumpIn, 1);
Serial.println("PUMP IN : AKTIF");
lcd.setCursor(4,2);
lcd.print("PUMP IN = ");
lcd.print("ON");
tb.sendTelemetryString("PUMP IN", "AKTIF");
tb.sendTelemetryInt("PUMP IN", 1); // WIDGET LAMPU
}
else if (water >= 350) {
digitalWrite(pumpOut, 1);
Serial.println("PUMP OUT : AKTIF");
lcd.setCursor(3,2);
lcd.print("PUMP OUT = ");
lcd.print(" ON");
tb.sendTelemetryString("PUMP OUT", "AKTIF");
tb.sendTelemetryInt("PUMP OUT", 1); // WIDGET LAMPU
}
else{
Serial.println("PUMP OUT NON AKTIF");
Serial.println("PUMP IN NON AKTIF");
lcd.setCursor(3,2);
lcd.print("ALL PUMP = OFF");
tb.sendTelemetryString("ALL PUMP", "NONAKTIF");
tb.sendTelemetryInt("ALLPUMP", 0); // WIDGET LAMPU
}
}
void panas(){
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.print("Suhu : ");
Serial.print(data.temperature);
Serial.print("C");
Serial.println();
lcd.setCursor(4,1);
lcd.print("Suhu : ");
lcd.print(data.temperature);
lcd.print(" C");
tb.sendTelemetryFloat("Suhu Air", data.temperature);
}