//relay1 = pir1
//relay2 =
//relay3 =
//pir1 = (cek pergerakan orang, kalau ada orang pintu membuka, ubah lampu indikator)
//Import
#include <NTPClient.h>
#include <Servo.h>
#include <WiFi.h>
#include <DHTesp.h>
#include "ThingsBoard.h"
// #include "FirebaseESP32.h"
// #include "addons/TokenHelper.h"
// #include "addons/RTDBHelper.h"
//Deklarasi variabel
#define WIFI_AP_NAME "Wokwi-GUEST" // ssid wifi yang digunakan
#define WIFI_PASSWORD "" // passwrod wifi yang digunakan
#define THINGSBOARD_SERVER "thingsboard.cloud" // alamat server thingsboard ayng digunakan
#define THINGSBOARD_ACCESSTOKEN "dVC2EYqXEJ9h0prSQnRj" // access token dari device thingsboard yang digunakan
#define MAX_JSON_DOCUMENT_SIZE 1024
//Deklarasi pin input
#define DHT1_PIN 13
#define PIR1_PIN 12
#define LDR1_PIN_D 14
#define LDR1_PIN_A 36
//Deklarasi pin output
#define RELAY1_PIN 25
#define RELAY2_PIN 33
#define RELAY3_PIN 32
#define SERVO1_PIN 26
WiFiClient espClient;
DHTesp dht;
Servo servo1;
ThingsBoard tb(espClient);
// ThingsBoardSized<MAX_JSON_DOCUMENT_SIZE> tb(espClient);
int status = WL_IDLE_STATUS;
// Main application loop delay
int loop_delay = 20;
// delay pengiriman data suhu/kelembaban
int send_delay = 2000;
// deklarasi variabel waktu yang dibutuhkan untuk mengirimkan data dht
int send_passed = 0;
//Inisialisasi variabel DHT1
float temperature = 0;
float humidity = 0;
int ldr_d = 0;
int ldr_a = 0;
int pir;
int angle1 = 0;
void InitWiFi() //perintah koneksi ke wifi
{
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() { //perintah recconect atau koneksi ulang
// 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() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello!!");
InitWiFi();
//set pinMode Input
pinMode(DHT1_PIN, INPUT);
pinMode(PIR1_PIN, INPUT);
pinMode(LDR1_PIN_D, INPUT);
pinMode(LDR1_PIN_A, INPUT);
//set pinMode Output
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(RELAY3_PIN, OUTPUT);
pinMode(SERVO1_PIN, OUTPUT);
//set servo
servo1.attach(SERVO1_PIN);
//set awal relay
digitalWrite(RELAY1_PIN, HIGH);
digitalWrite(RELAY2_PIN, HIGH);
digitalWrite(RELAY3_PIN, HIGH);
delay(10);
digitalWrite(RELAY1_PIN, LOW);
digitalWrite(RELAY2_PIN, LOW);
digitalWrite(RELAY3_PIN, LOW);
//set awal servo
servo1.write(angle1);
// inisiailisasi dari sensor dht
dht.setup(DHT1_PIN, DHTesp::DHT22);
}
void loop() {
static StaticJsonDocument<MAX_JSON_DOCUMENT_SIZE> telemetry_doc;
delay(loop_delay);
send_passed += loop_delay;
// perintah koneksi ulang apabila terputus
if (WiFi.status() != WL_CONNECTED) {
reconnect();
return;
}
// perintah rekoneksi dengan thingsboard
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;
}
}
// Check if it is a time to send DHT22 temperature and humidity
if (send_passed > send_delay) {
Serial.println();
Serial.println("\nSending data... ");
TempAndHumidity lastValues = dht.getTempAndHumidity();
if (isnan(lastValues.humidity) || isnan(lastValues.temperature)) {
Serial.println("Failed to read from DHT sensor!");
} else {
temperature = lastValues.temperature;
Serial.print("Temperature: ");
Serial.println(temperature);
humidity = lastValues.humidity;
Serial.print("Humidity: ");
Serial.println(humidity);
tb.sendTelemetryFloat("Suhu", temperature);
tb.sendTelemetryFloat("Kelembaban", humidity);
}
ldr_d = digitalRead(LDR1_PIN_D);
ldr_a = analogRead(LDR1_PIN_A);
if (isnan(ldr_d && ldr_a)) {
Serial.println("Failed to read from LDR sensor!");
} else {
Serial.print("Illumination (Analog): ");
Serial.println(ldr_a);
Serial.print("Illumination (Digital): ");
if (ldr_d == 0) {
Serial.println("LOW / LIGHT");
digitalWrite(RELAY2_PIN, LOW);
// tb.sendTelemetryString("Illumination (Digital)", "LOW / LIGHT");
} else if (ldr_d == 1) {
Serial.println("HIGH / DARK");
digitalWrite(RELAY2_PIN, HIGH);
// tb.sendTelemetryString("Illumination (Digital)", "HIGH / DARK");
}
tb.sendTelemetryFloat("Illumination (Analog)", ldr_a);
// tb.sendTelemetryString("Illumination (String)", "HIGH / DARK");
tb.sendTelemetryFloat("Illumination (Digital)", ldr_d);
}
pir = digitalRead(PIR1_PIN);
if (isnan(pir)) {
Serial.println("Failed to read from PIR sensor!");
} else {
Serial.print("Pir: ");
Serial.println(pir);
if (pir == 1 && angle1 <= 90) {
digitalWrite(RELAY1_PIN, HIGH);
angle1 = 90;
servo1.write(angle1);
Serial.println("Door 1: OPEN");
} else if (pir == 0 && angle1 >= 0) {
digitalWrite(RELAY1_PIN, LOW);
angle1 = 0;
servo1.write(angle1);
Serial.println("Door 1: CLOSE");
}
// stateDoor_object["Door State"] = stateDoor;
tb.sendTelemetryFloat("Door", pir);
}
send_passed = 0;
}
tb.loop(); //perintah ekseskuasi thingsboard
}