#if defined(ESP8266)
#include <ESP8266WiFi.h>
#elif defined(ESP32)
#include <WiFi.h>
#endif
#include <esp_wifi.h>
#include "ThingsBoard.h"
#include "DHTesp.h"
#include "RTClib.h"
//------PENGALAMATAN PIN------//
#define DHT_PIN 15 //PIN SENSOR DHT22
#define buzz 4 //PIN BUZZER
#define relay1 5 //PIN RELAY HEATER
#define relay2 18 //PIN RELAY POMPA
#define ledr 19 //PIN LED RGB (RED)
#define ledg 2 //PIN LED RGB (GREEN)
#define ledb 23 //PIN LED RGB (BLUE)
#define sw 13 //PIN SWITCH AUTO MANUAL
#define pb1 12 //PIN POMPA
#define pb2 14 //PIN HEATER
#define CURRENT_FIRMWARE_TITLE "TEST"
#define CURRENT_FIRMWARE_VERSION "1.0.0"
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define TOKEN "NIxjvjl3JL1SUhl4XgPc"
// #define TOKEN "ruangan 2"
#define THINGSBOARD_SERVER "thingsboard.cloud"
#define SERIAL_DEBUG_BAUD 9600
WiFiClient espClient;
ThingsBoard tb(espClient);
int status = WL_IDLE_STATUS;
uint8_t newMACAddress[] = {0x32, 0xAE, 0xA4, 0x07, 0x0D, 0x66};
// uint8_t newMACAddress[] = {0x32, 0xAE, 0xA4, 0x07, 0x0D, 0x66};
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() {
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");
}
}
DHTesp dhtSensor;
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {
"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"
};
void setup()
{
Serial.begin(9600);
Serial.begin(SERIAL_DEBUG_BAUD);
Serial.println();
InitWiFi();
Serial.print("[OLD] ESP32 Board MAC Address: ");
Serial.println(WiFi.macAddress());
esp_wifi_set_mac(WIFI_IF_STA, &newMACAddress[0]);
Serial.print("[NEW] ESP32 Board MAC Address: ");
Serial.println(WiFi.macAddress());
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
//------DEFINI PIN------//
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(ledr, OUTPUT);
pinMode(ledg, OUTPUT);
pinMode(ledb, OUTPUT);
pinMode(sw, INPUT);
pinMode(pb1, INPUT_PULLUP);
pinMode(pb2, INPUT_PULLUP);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
}
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;
}
}
TempAndHumidity data = dhtSensor.getTempAndHumidity();
DateTime now = rtc.now();
//------MENAMPILKAN WAKTU------//
Serial.print("waktu sekarang: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
//------LOGIKA OUTPUT------//
if (digitalRead(sw) == HIGH){
//------MENAMPILKAN TEMP & HUMY------//
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humy: " + String(data.humidity, 2) + "°C");
//------MENGIRIM DATA KE THINGSBOARD------//
Serial.println("Mengirim data...");
tb.sendTelemetryInt("temperature", data.temperature);
tb.sendTelemetryInt("humidity", data.humidity);
//---Relay Pompa hidup setiap 1 jam
if (now.minute() == 0){
digitalWrite(relay2, HIGH);
delay(120000);
}
else{
//---Relay Pompa hidup saat suhu diatas 35 derajat
if (data.temperature > 35){
digitalWrite(relay2, HIGH);
digitalWrite(relay1, LOW);
digitalWrite(ledr, LOW);
digitalWrite(ledg, HIGH);
digitalWrite(ledb, HIGH);
tone(buzz, 200, 500);
}
//---Relay Heater hidup saat suhu dibawah 28 derajat
else if (data.temperature < 28){
digitalWrite(relay1, HIGH);
digitalWrite(relay2, LOW);
digitalWrite(ledr, HIGH);
digitalWrite(ledg, HIGH);
digitalWrite(ledb, LOW);
}
else{
digitalWrite(relay2, LOW);
digitalWrite(relay1, LOW);
digitalWrite(ledr, HIGH);
digitalWrite(ledg, LOW);
digitalWrite(ledb, HIGH);
}
}
Serial.println("------MODE AUTO------");
}
else{
digitalWrite(ledr, HIGH);
digitalWrite(ledg, HIGH);
digitalWrite(ledb, HIGH);
if (digitalRead(pb2) == LOW){
digitalWrite(relay1, HIGH);
digitalWrite(relay2, LOW);
}
else if (digitalRead(pb1) == LOW){
digitalWrite(relay1, LOW);
digitalWrite(relay2, HIGH);
}
else{
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
}
Serial.println("------MODE MANUAL------");
}
tb.loop();
delay(1000);
}