#if defined(ESP8266)
#include <ESP8266WiFi.h>
#elif defined(ESP32)
#include <WiFi.h>
#endif
//#include "DHTesp.h"
#include "ThingsBoard.h"
#include <Servo.h>
#include <HCSR04.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
HCSR04 hc(5,18);
int ledHijau = 25;
int ledBiru = 32;
int ledMerah = 33;
int potensio = 34;
int potVal = 0;
float TinggiSensor = 100; //Tinggi pemasangan sensor
float TinggiAir = 0; //Tinggi air
float MappingTinggiAir;
Servo myservo;
#define CURRENT_FIRMWARE_TITLE "TEST"
#define CURRENT_FIRMWARE_VERSION "1.0.0"
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// See https://thingsboard.io/docs/getting-started-guides/helloworld/
// to understand how to obtain an access token
#define TOKEN "MCUsumDfzUIyNQsnnDH0"
#define THINGSBOARD_SERVER "thingsboard.cloud"
// Baud rate for debug serial
#define SERIAL_DEBUG_BAUD 115200
// Initialize ThingsBoard client
WiFiClient espClient;
// Initialize ThingsBoard instance
ThingsBoard tb(espClient);
// the Wifi radio's status
int status = WL_IDLE_STATUS;
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() {
// put your setup code here, to run once:
Serial.begin(SERIAL_DEBUG_BAUD);
//Serial.println();
InitWiFi();
pinMode(ledHijau, OUTPUT);
pinMode(ledBiru, OUTPUT);
pinMode(ledMerah, OUTPUT);
myservo.attach(4);
myservo.write(0);
}
void loop() {
delay(1000);
if (WiFi.status() != WL_CONNECTED) {
reconnect();
}
if (!tb.connected()) {
// Connect to the ThingsBoard
//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;
}
}
//Serial.println("Sending data...");
lcd.init();
lcd.backlight();
potVal = analogRead(potensio);
potVal = map(potVal, 0, 4095, 0, 100);//pembacaan potensio max 100
Serial.print("Flow meter: ");
Serial.print(potVal);
Serial.print(" ");
Serial.println("L/Min");
tb.sendTelemetryInt("Flowmeter", potVal);
lcd.setCursor(0,0);
lcd.print(potVal);
lcd.print(" ");
lcd.println("L/Min");
MappingTinggiAir = map(hc.dist(), 0, 400, 0, 100);
//TinggiAir = TinggiSensor - MappingTinggiAir;
tb.sendTelemetryInt("KetinggianAir", MappingTinggiAir);
Serial.print("Ketinggian Air: ");
Serial.print(MappingTinggiAir);
Serial.print(" ");
Serial.println("cm");
lcd.setCursor(0,1);
lcd.print(MappingTinggiAir);
lcd.print(" ");
lcd.println("cm");
if (MappingTinggiAir > 80){
digitalWrite(ledHijau, HIGH);
digitalWrite(ledBiru, LOW);
digitalWrite(ledMerah, LOW);
myservo.write(0);
tb.sendTelemetryString("Kondisi Tangki:", "Penuh");
Serial.println("Kondisi Tangki: Penuh");
Serial.println("----------------------");
lcd.setCursor(0,2);
lcd.println("Kondisi Tangki:");
lcd.setCursor(0,3);
lcd.print("Penuh");
}
if (MappingTinggiAir >= 50 && MappingTinggiAir <= 80){
digitalWrite(ledHijau, LOW);
digitalWrite(ledBiru, HIGH);
digitalWrite(ledMerah, LOW);
tb.sendTelemetryString("Kondisi Tangki:", "Setengah");
Serial.println("Kondisi Tangki: Setengah");
Serial.println("----------------------");
lcd.setCursor(0,2);
lcd.print("Kondisi Tangki:");
lcd.setCursor(0,3);
lcd.print("Setengah");
}
if (MappingTinggiAir < 20){
digitalWrite(ledHijau, LOW);
digitalWrite(ledBiru, LOW);
digitalWrite(ledMerah, HIGH);
myservo.write(180);
tb.sendTelemetryString("Kondisi Tangki:", "Kosong");
Serial.println("Kondisi Tangki: Kosong");
Serial.println("----------------------");
lcd.setCursor(0,2);
lcd.println("Kondisi Tangki:");
lcd.setCursor(0,3);
lcd.print("Kosong");
}
//delay(100);
tb.loop();
tb.loop();
}