// Include
#include "DHTesp.h"
#include <WiFi.h>
#include "ThingsBoard.h"
// Definisi
#define area1_DHT 14
#define area2_DHT 12
#define area3_DHT 13
#define relay_heater1 19
#define relay_heater2 18
#define relay_heater3 5
#define relay_blower_chiller 21
bool area1_high = false, area2_high = false, area3_high = false, subscribed = false;;
#define THINGSBOARD_SERVER "thingsboard.cloud"
#define THINGSBOARD_ACCESSTOKEN "foIY1vGNLpoIBDbZIOtw"
int send_passed = 0, quant = 20, status = WL_IDLE_STATUS, send_delay = 2000;;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
unsigned long lastMsg = 0;
// Inisialisasi
DHTesp dhtSensor1;
DHTesp dhtSensor2;
DHTesp dhtSensor3;
const char* WIFI_AP_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
WiFiClient espClient;
ThingsBoard tb(espClient);
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");
}
}
void setup() {
Serial.begin(115200);
dhtSensor1.setup(area1_DHT, DHTesp::DHT22);
dhtSensor2.setup(area2_DHT, DHTesp::DHT22);
dhtSensor3.setup(area3_DHT, DHTesp::DHT22);
pinMode(relay_heater1, OUTPUT);
pinMode(relay_heater2, OUTPUT);
pinMode(relay_heater3, OUTPUT);
pinMode(relay_blower_chiller, OUTPUT);
WiFi.begin(WIFI_AP_NAME, WIFI_PASSWORD);
InitWiFi();
}
void loop() {
delay(quant);
send_passed += quant;
// put your main code here, to run repeatedly:
TempAndHumidity _suhu_area1 = dhtSensor1.getTempAndHumidity();
TempAndHumidity _suhu_area2 = dhtSensor2.getTempAndHumidity();
TempAndHumidity _suhu_area3 = dhtSensor3.getTempAndHumidity();
// Deteksi Low (<26)
if(_suhu_area1.temperature < 26){
digitalWrite(relay_heater1, HIGH);
} else {
digitalWrite(relay_heater1, LOW);
}
if(_suhu_area2.temperature < 26){
digitalWrite(relay_heater2, HIGH);
} else {
digitalWrite(relay_heater2, LOW);
}
if(_suhu_area3.temperature < 26){
digitalWrite(relay_heater3, HIGH);
} else {
digitalWrite(relay_heater3, LOW);
}
// Deteksi High (>32)
if(_suhu_area1.temperature > 32){
area1_high = true;
} else {
area1_high = false;
}
if(_suhu_area2.temperature > 32){
area2_high = true;
} else {
area2_high = false;
}
if(_suhu_area3.temperature > 32){
area3_high = true;
} else {
area3_high = false;
}
// if HIGH
if(area1_high == true || area2_high == true || area3_high == true){
digitalWrite(relay_blower_chiller, HIGH);
} else {
digitalWrite(relay_blower_chiller, LOW);
}
// reconnect wifi
if (WiFi.status() != WL_CONNECTED) {
reconnect();
return;
}
// Reconnect to ThingsBoard, if needed
if (!tb.connected()) {
subscribed = false;
// 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;
}
}
// Pengiriman value ke thingsboard
if (send_passed > send_delay) {
Serial.println();
Serial.print("Sending data... ");
if (_suhu_area1.temperature || _suhu_area2.temperature || _suhu_area3.temperature) {
tb.sendTelemetryFloat("_suhu_area1", _suhu_area1.temperature);
tb.sendTelemetryFloat("_suhu_area2", _suhu_area2.temperature);
tb.sendTelemetryFloat("_suhu_area3", _suhu_area3.temperature);
if(area1_high == true || area2_high == true || area3_high == true){
tb.sendTelemetryData("_status_chiller_blower", "On");
} else {
tb.sendTelemetryData("_status_chiller_blower", "Off");
}
}
send_passed = 0;
}
tb.loop();
}