//Deklarasi Servo
#include <ESP32Servo.h> // library servo esp32
Servo myservo1;
Servo myservo2;
int pos = 0;
//Deklarasi DHTesp
#include <DHTesp.h> // DHT for ESP32 library
DHTesp dhtSensor;
#define DHT_PIN 15
//Deklarasi OLED
#include <Wire.h>
#include <Adafruit_SSD1306.h> // library OLED monochrome
#include <Adafruit_GFX.h> // library OLED
Adafruit_SSD1306 display (128, 64, &Wire, -1);
//Deklarasi LED dan Buzzer
#define merah 27
#define buzzer 14
//Deklarasi Thingsboard
#include <WiFi.h> // WiFi control for ESP32
#include "ThingsBoard.h"
#define WIFI_AP_NAME "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define THINGSBOARD_SERVER "thingsboard.cloud"
#define THINGSBOARD_ACCESSTOKEN "jTpgFkclVYimvuK0zZEk" // Token ID Thisngspeak
#define SERIAL_DEBUG_BAUD 115200
WiFiClient espClient;
ThingsBoard tb(espClient);
int status = WL_IDLE_STATUS;
// Main application loop delay
int quant = 10;
// Period of sending a temperature/humidity data.
int send_delay = 200;
// Time passed after temperature/humidity data was sent, milliseconds.
int send_passed = 0;
void setup() {
// put your setup code here, to run once:
Serial.println("Use case Penyiraman Anggrek Otomatis");
Serial.begin(SERIAL_DEBUG_BAUD);
WiFi.begin(WIFI_AP_NAME, WIFI_PASSWORD);
InitWiFi();
// Initialize temperature sensor
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(merah, OUTPUT);
pinMode(buzzer, OUTPUT);
// Initialize Servo
myservo1.attach(5);
myservo2.attach(12);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(1);
display.setTextSize(1);
display.display();
}
void loop() {
display.clearDisplay();
// put your main code here, to run repeatedly:
delay(quant); // this speeds up the simulation
send_passed += quant;
// Reconnect to WiFi, if needed
if (WiFi.status() != WL_CONNECTED) {
reconnect();
return;
}
// Reconnect to ThingsBoard, if needed
if (!tb.connected()) {
// Connect to the ThingsBoard
Serial.print("Connecting to: ");
Serial.print(THINGSBOARD_SERVER);
Serial.print(" with token ");
Serial.println(THINGSBOARD_ACCESSTOKEN);
if (!tb.connect(THINGSBOARD_SERVER, THINGSBOARD_ACCESSTOKEN)) {
Serial.println("Failed to connect");
return;
}
}
TempAndHumidity data = dhtSensor.getTempAndHumidity();
//if (isnan(data.temperature) || isnan(data.humidity)){
//return;
//}
// Check if it is a time to send DHT22 temperature and humidity
if (send_passed > send_delay) {
Serial.println();
Serial.print("Sending data... ");
if (isnan(data.humidity) || isnan(data.temperature)) {
Serial.println("Failed to read from DHT sensor!");
} else {
Serial.print("temperature: ");
Serial.print(data.temperature);
Serial.print(" humidity: ");
Serial.print(data.humidity);
tb.sendTelemetryFloat("temperature", data.temperature);
tb.sendTelemetryFloat("humidity", data.humidity);
}
send_passed = 0;
}
display.setCursor(0,0);
display.print("Temperature:");
display.print(data.temperature);
display.print("°C");
display.setCursor(0,20);
display.print("Kelembapan :");
display.print(data.humidity);
display.println(" %");
if (data.temperature > 30){
digitalWrite(merah, HIGH);
display.setCursor(0, 40);
display.println("Suhu Terlalu Panas");
tone(buzzer, 2000);
myservo1.write(90);
delay(500);
}else if (data.temperature > 20 && data.temperature <= 30){
digitalWrite(merah, LOW);
noTone(buzzer);
display.setCursor(0, 40);
display.println("Suhu Normal");
myservo1.write(0);
}
else if (data.temperature <= 20) {
digitalWrite(merah, LOW);
noTone(buzzer);
display.setCursor(0, 40);
display.println("Suhu Terlalu Dingin");
myservo1.write(0);
}
if (data.humidity < 60){
digitalWrite(merah, HIGH);
display.setCursor(0, 50);
display.println("TANAH KERING");
tone(buzzer, 2000);
myservo2.write(pos);
pos = pos + 100;
if (pos > 360) {
pos = 0;
delay(0);
}
}else if (data.humidity >= 60 && data.humidity <= 80){
digitalWrite(merah, LOW);
noTone(buzzer);
display.setCursor(0, 50);
display.println("TANAH CUKUP BASAH");
myservo2.write(0);
}else if (data.humidity > 80){
digitalWrite(merah, LOW);
noTone(buzzer);
display.setCursor(0, 50);
display.println("TANAH BASAH");
myservo2.write(0);
}
display.display();
tb.loop();
}
void InitWiFi()
{
Serial.println("Connecting to AP ...");
// attempt to connect to WiFi network
WiFi.begin(WIFI_AP_NAME, 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_AP_NAME, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
}