#if defined(ESP8266)
#include <ESP8266WiFi.h>
#elif defined(ESP32)
#include <WiFi.h>
#endif
#include <LiquidCrystal_I2C.h>
#include "ThingsBoard.h"
#include "DHTesp.h"
#define DHT_PIN 15
#define AIR_KURANG 2
#define AIR_CUKUP 5
#define LCD_COLUMN 16
#define LCD_ROW 2
#define LED_LOW 32
#define LED_NORMAL 33
#define LED_HIGH 25
#define trig 2
#define echo 4
#define buzz 13
#define LDR_PIN 36
#define TERANG 27
#define GELAP 26
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define TOKEN "t9UJWMFTohVVFSeQOvC3"
#define THINGSBOARD_SERVER "thingsboard.cloud"
// LDR Characteristics
const float GAMMA = 0.7;
const float RL10 = 50;
LiquidCrystal_I2C lcd(0x27, 20, 4);
float suhu;
int status = WL_IDLE_STATUS;
DHTesp sensorSuhu;
WiFiClient espClient;
ThingsBoard tb(espClient);
float lux()
{
int analogValue = analogRead(LDR_PIN);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
return pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
}
void InitLCD()
{
lcd.init();
lcd.backlight();
lcd.print("Hello");
delay(1000);
for (int i; i < 10; i++) {
lcd.scrollDisplayLeft();
delay(200);
}
lcd.clear();
}
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()
{
Serial.begin(115200);
pinMode(AIR_KURANG, OUTPUT);
pinMode(AIR_CUKUP, OUTPUT);
pinMode(LED_LOW, OUTPUT);
pinMode(LED_NORMAL, OUTPUT);
pinMode(LED_HIGH, OUTPUT);
pinMode(buzz, OUTPUT);
pinMode(TERANG, OUTPUT);
pinMode(GELAP, OUTPUT);
InitWiFi();
lcd.init();
lcd.backlight();
sensorSuhu.setup(DHT_PIN, DHTesp::DHT22);
}
/////////////////Rumus nilai JARAK/////////////////
float ultrasonik(){
digitalWrite(trig, LOW); ////Trigger off pancaran ultrasonik////////
delayMicroseconds(2);
digitalWrite(trig, HIGH);/////Trigger on pancaran ultrasonik///////
delayMicroseconds(10);
digitalWrite(trig, LOW);////Trigger off pancaran ultrasonik////////
////////Hasil pembacaan ultrasonik//////////////
int durasiPantulan = pulseIn(echo, HIGH);
return durasiPantulan * 0.034 / 2;
////////////////////////////////////////////////
}
///////////////////////////////////////////////////
void loop()
{
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;
}
}
float jarakPer = ultrasonik();
tb.sendTelemetryFloat("Tinggi Air", jarakPer);
if (jarakPer>=30){
digitalWrite(AIR_KURANG, HIGH);
digitalWrite(AIR_CUKUP, LOW);
tb.sendTelemetryInt("Larutan Nutrisi Kurang", 1);
tb.sendTelemetryInt("Larutan Nutrisi Cukup", 0);
tone(buzz, 500);
delay(500);
}
else {
digitalWrite(AIR_CUKUP, HIGH);
digitalWrite(AIR_KURANG, LOW);
tb.sendTelemetryInt("Larutan Nutrisi Kurang", 0);
tb.sendTelemetryInt("Larutan Nutrisi Cukup", 1);
delay(25000);
}
float cahaya = lux();
TempAndHumidity data = sensorSuhu.getTempAndHumidity();
suhu = data.temperature;
Serial.println("Suhu: " + String(data.temperature,2) + "°C"); /////String(Pembacaan Suhu, nilai dibelakang koma)
Serial.println("Kelembapan: " + String(data.humidity,1) + "%");/////String(Pembacaan Kelembaban, nilai dibelakang koma)
Serial.print("Jarak Air Nutrisi= ");
Serial.println(ultrasonik());
Serial.print("Intensitas Cahaya: ");
Serial.println(cahaya);
Serial.println("---");
lcd.setCursor(0, 0);
lcd.print("Jarak Air:");
lcd.print(jarakPer);
lcd.print("cm");
lcd.setCursor(0, 1);
lcd.print("Ruang: ");
tb.sendTelemetryInt("Intensitas Cahaya", cahaya);
if (cahaya > 50) {
lcd.print("Terang");
digitalWrite(TERANG, HIGH);
digitalWrite(GELAP, LOW);
tb.sendTelemetryInt("Terang", 1);
tb.sendTelemetryInt("Gelap", 0);
}
else if (cahaya <= 50) {
lcd.print("Gelap");
digitalWrite(TERANG, LOW);
digitalWrite(GELAP, HIGH);
tb.sendTelemetryInt("Terang", 0);
tb.sendTelemetryInt("Gelap", 1);
}
////////////////// Menampilkan di LCD ///////////////////////////
lcd.setCursor(2, 2);
lcd.print("Lux: ");
lcd.print(lux());
// lcd.print(" ");
tb.sendTelemetryInt("Temperature", suhu);
if (suhu < 26)
{
digitalWrite(LED_LOW, HIGH);
digitalWrite(LED_NORMAL, LOW);
digitalWrite(LED_HIGH, LOW);
tb.sendTelemetryInt("Suhu Rendah", 1);
tb.sendTelemetryInt("Suhu Normal", 0);
tb.sendTelemetryInt("Suhu Tinggi", 0);
}
else if (suhu >= 26 && suhu <= 35)
{
digitalWrite(LED_LOW, LOW);
digitalWrite(LED_NORMAL, HIGH);
digitalWrite(LED_HIGH, LOW);
tb.sendTelemetryInt("Suhu Rendah", 0);
tb.sendTelemetryInt("Suhu Normal", 1);
tb.sendTelemetryInt("Suhu Tinggi", 0);
}
else if (suhu > 35)
{
digitalWrite(LED_LOW, LOW);
digitalWrite(LED_NORMAL, LOW);
digitalWrite(LED_HIGH, HIGH);
tb.sendTelemetryInt("Suhu Rendah", 0);
tb.sendTelemetryInt("Suhu Normal", 0);
tb.sendTelemetryInt("Suhu Tinggi", 1);
}
delay(0);
noTone(buzz);
tb.loop();
}