#if defined(ESP8266) //deklarasi library WiFi karena programnya dibuat universal untuk board ESP8266 dan board ESP32 maka menggunakan if untuk dicek terlebih dahulu jenis board yang digunakan
#include <ESP8266WiFi.h> //apabila menggunakan board ESP8266 menggunakan library ESP8266WiFi.h
#elif defined(ESP32)
#include <WiFi.h> //apabila menggunakan board ESP32 maka menggunakan library WiFi.h
#endif
#incluce "ThingsBoard.h"
#include <ESP32Servo.h>
#define WIFI_SSID "Wokwi-GUEST" //deklarasi ssid wifi yang digunakan, disesuiakan dengan wifi yang digunakan
#define WIFI_PASSWORD "" //deklarasi password wifi yang digunakan
// See https://thingsboard.io/docs/getting-started-guides/helloworld/
// to understand how to obtain an access token
#define TOKEN "RHhzutVyzHttBvgdDKEu" //deklarasi token device yang digunakan untuk menguhubungkan esp32 dengan device pada thingsboard, tokennya disesuaikan dengan device yang digunakan bisa di cek langsung ketika membuka device pada thingsboard
#define THINGSBOARD_SERVER "thingsboard.cloud" //alamat server dari thingsboard, jika menggunakan server probadi alamatnya bisa disesuaikan, apabila menggunakan server yang disediakan thingsboard alamatnya adalah thingsboar.cloud
// Deklarasi Thingsboard client dan mengubah perintah WiFiClient menjadi espClient
WiFiClient espClient;
// Deklarasi untuk mengubah perintah Thingsboard menjadi tb dan memasukkan perintah WiFiClient yang sudah diubah menjadi espClient ke dalam library Thingsboard
ThingsBoard tb(espClient);
int status = WL_IDLE_STATUS; //deklarasi status wifi yang dimasukkan dalam variabel status
Servo myservo;
int LIGHT_SENSOR_PIN = 36; // ESP32 pin GPIO36 (VP)
int RAINDROP_SENSOR_PIN = 39; //ESP32 pin GPIO39 (VN)
int TOMBOL_MODE_PIN = 4; //ESP 32 GPIO D4
int TOMBOL_MANUAL_PIN =2; //GPIO D2 untuk
int SERVO_PIN = 15; //ESP pin GPIO15
int servo_pos = 0; //Posisi atap 0 = tutup, 1180 = buka
boolean tombol = true;
void connect() //void mengoneksikan esp dengan wifi pertama kali
{
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() { //peintah recconect wifi apabila esp terputus dengan jaringan wifinya
// 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() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
connect();//memanggil void connect untuk mengoneksikan esp32 dengan jaringan wifi
myservo.attach(SERVO_PIN);
myservo.write(servo_pos);
}
void loop() {
//perintah untuk reconnect apabila esp32 disconnect dengan wifi
if (WiFi.status() != WL_CONNECTED) {
reconnect();
}
if (!tb.connected()) { //perintah untuk koneksi ke server thingsboard/device thingsboard
// 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;
}
}
Serial.println("Sending data...");
// Uploads new telemetry to ThingsBoard using MQTT.
// See https://thingsboard.io/docs/reference/mqtt-api/#telemetry-upload-api
// for more details
//reads mode switch
int statusMode = digitalRead(TOMBOL_MODE_PIN);
if (statusMode == HIGH) {
}
// reads the input on analog pin (value between 0 and 4095)
int lightValue = analogRead(LIGHT_SENSOR_PIN);
int rainValue = analogRead(RAINDROP_SENSOR_PIN);
Serial.print("Light Value = ");
Serial.println(lightValue); // the raw analog reading
Serial.print("Rain Value = ");
Serial.println(rainValue);
myservo.write(servo_pos);
// We'll have a few threshholds, qualitatively determined
if (lightValue >= 1000) { //tidak ada cahaya matahari
Serial.println(" >> Masih gelap, atap ditutup");
tombol = false;
servo_pos = 0;
myservo.write(servo_pos);
}
else if (lightValue <= 999 && rainValue <=1000) { //matahari bersinar & hujan
Serial.println(" >> Hujan, atap ditutup");
tombol = false;
servo_pos = 0;
myservo.write(servo_pos);
delay(1000);
}
else if (lightValue <= 999 && rainValue >1000) { //matahari bersinar & tidak hujan
Serial.println(" >> Cerah, atap dibuka");
tombol = true;
servo_pos = 180;
myservo.write(servo_pos);
delay(1000);
}
int statusTombol = digitalRead(TOMBOL_MANUAL_PIN); //membaca sinyal digital yang dikirim oleh tombol ke pin dan dimasukkan ke dalam variabel statusTombol
if (statusTombol == HIGH && tombol == false) {
servo_pos = 180;
myservo.write(servo_pos);
}
Serial.println();
delay(1000);
tb.loop(); //perintah untuk menjalankan fungsi dari library thingsboard
}