#include <WiFi.h>
#include <DHTesp.h>
#include <PubSubClient.h>
#include <LiquidCrystal_I2C.h>
#define TOKEN "0sBvrlMkLR5R1ObQljMV"
#define THINGSBOARD_SERVER "thingsboard.cloud"
#define RELAY1 12
#define RELAY2 13
const int DHT_PIN = 15;
#define ECHO_PIN 5
#define TRIG_PIN 2
DHTesp dhtSensor;
int SW_State=0;
int pompa ;
int pompa2 ;
// char status_pompa = "";
float jarak = 0;
float ketinggian_air = 0;
LiquidCrystal_I2C lcd(0x27,20,4);
const char *ssid = "Wokwi-GUEST";
const char *password = "";
WiFiClient wifiClient;
PubSubClient client(wifiClient);
int status = WL_IDLE_STATUS;
const char* TopicTelemetry = "devices/telemetry";
const char* TopicAttribute = "devices/attributes";
const char* Latitude = "-7.133758100163111";
const char* Longitude = "107.00977941952921";
void baca_jarak()
{
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
jarak = duration * 0.034 / 2;
ketinggian_air = 400 - jarak;
}
void setup()
{
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("Connecting to: ");
Serial.println(ssid);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to: ");
Serial.println(ssid);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
client.setServer(THINGSBOARD_SERVER, 1883);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
}
void loop()
{
if (!client.connected())
{
reconnect();
}
baca_jarak();
delay(2000);
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Sending data Telemetry...");
String payload1 = "{";
payload1 += "\"Suhu\":";
payload1 += data.temperature;
payload1 += "\,\"Kelembaban\":";
payload1 += data.humidity;
payload1 += "\,\"Ketinggian Air\":";
payload1 += ketinggian_air;
payload1 += "\,\"Status Pompa\":";
//payload1 += status_pompa;
payload1 += "}";
char Telemetry[1000];
payload1.toCharArray(Telemetry, 1000);
client.publish(TopicTelemetry,Telemetry);
Serial.println(Telemetry);
Serial.println("Sending data Attribute...");
String payload2 = "{";
payload2 += "\"Latitude\":";
payload2 += Latitude;
payload2 += "\,\"Longitude\":";
payload2 += Longitude;
payload2 += "}";
char Attribute[1000];
payload2.toCharArray(Attribute, 1000);
client.publish(TopicAttribute,Attribute);
Serial.println(Attribute);
if(data.humidity < 60){
digitalWrite( RELAY1, HIGH);
pompa=1;
}
else{
digitalWrite( RELAY1, LOW);
pompa=0;
}
if(ketinggian_air < 50){
digitalWrite( RELAY2, HIGH);
pompa2=1;
}
else if(ketinggian_air > 300){
digitalWrite( RELAY2, LOW);
pompa2=0;
}
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Suhu :");
lcd.println(data.temperature);
lcd.setCursor(0,1);
lcd.print("Kelembaban :");
lcd.println(data.humidity);
lcd.setCursor(0,2);
lcd.print("Level Air :");
lcd.print(ketinggian_air);
Serial.println(ketinggian_air);
lcd.setCursor(0,3);
lcd.print("Status Pompa : ");
}
void reconnect()
{
while (!client.connected())
{
status = WiFi.status();
if ( status != WL_CONNECTED)
{
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
Serial.print("Connecting to ThingsBoard node ...");
if ( client.connect("3a90f960-1ad1-11ed-b480-cbe4cea4aa70", TOKEN, ""))
{
Serial.println( "[DONE]" );
}
else {
Serial.print( "[FAILED] [ rc = " );
Serial.println( " : retrying in 5 seconds]" );
delay( 500 );
}
}
}