#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include "DHT.h"
#include "ThingSpeak.h"
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
char* ssid = "Wokwi-GUEST"; // Masukan SSID
char* passphrase = ""; // Masukan Password
WiFiServer server(80);
WiFiClient client;
unsigned long myChannelNumber = 1986911; // Masukan Channel ID
const char * myWriteAPIKey = "1VYD55ZD3UUPCTJK"; // Masukan Tulisan API Key (16 digit)
// Variabel waktu
unsigned long lastTime = 0;
unsigned long timerDelay = 1000;
int ledPin = 15; // Deklarasi variabel input pin LED
int inputPin = 14; // Deklarasi variabel input pin Sensor PIR
int pirState = LOW; // Pada saat memulai, Sensor PIR dimulai dari LOW
int val = 0; // Deklarasi variabel untuk membaca status pin
int DHTPIN = 2; // Deklarasi variabel input pin DHT
int DHTTYPE = DHT22; // Deklarasi type DHT
DHT dht(DHTPIN, DHTTYPE); // Inisialisasi the DHT22 sensor.
void setup() {
pinMode(ledPin, OUTPUT); // Deklarasi LED sebagai Output
pinMode(inputPin, INPUT); // Deklarasi Sensor PIR sebagai Input
Serial.begin(9600); // Inisialisasi serial
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, passphrase);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
dht.begin(); // Inisialisasi dht22
ThingSpeak.begin(client); // Inisialisasi ThingSpeak
// Program Awal LCD
LCD.init();
LCD.backlight();
LCD.setCursor(0,0);
LCD.print("Bartolomeus Dias");
LCD.setCursor(1,1);
LCD.print(" Cloud IoT ");
delay (500);
LCD.clear();
LCD.setCursor(1,0);
LCD.print("SISTEM PEMANTAU KEAMANAN");
LCD.setCursor(1,1);
LCD.print("KEAMANAN RUMAH");
delay (500);
LCD.clear();
LCD.setCursor(1,0);
LCD.print(" MULAI ");
delay(700);
LCD.clear();
}
void loop() {
if ((millis() - lastTime) > timerDelay){
delay(2500);
// Membaca suhu atau kelembapan dalam waktu sekitar 250 milidetik
float h = dht.readHumidity();
// Baca suhu dalam Celcius dan Fahrenheit
float t = dht.readTemperature();
float f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Serial.print("Humidity: ");
Serial.print(h);
Serial.print("%\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print("°C");
Serial.print(" || ");
Serial.print(f);
Serial.print("°F\n");
ThingSpeak.setField(1, t);
ThingSpeak.setField(2, f);
ThingSpeak.setField(3, h);
// Menuliskan informasi untuk field yang tersedia di ThingSpeak
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
lastTime = millis();
}
val = digitalRead(inputPin); // Membaca nilai input
if (val == LOW) { // Jika Input LOW, maka :
digitalWrite(ledPin, LOW); // LED tidak menyala
if (pirState == LOW) {
// Jika, input LOW maka akan LCD akan mengeluarkan output "TIDAK TERDETEKSI GERAKAN"
LCD.init();
LCD.backlight();
LCD.setCursor(0,0);
LCD.print("TIDAK TERDETEKSI");
LCD.setCursor(0,1);
LCD.print(" GERAKAN ");
// Output program akan terganti, jika input bernilai HIGH
pirState = HIGH;
}
} else {
digitalWrite(ledPin, HIGH); // Menuliskan nilai LED/output bernilai HIGH
if (pirState == HIGH) { // Jika Input HIGH, maka :
// Jika, input HIGH maka akan LCD akan mengeluarkan output "TERDETEKSI GERAKAN"
LCD.init();
LCD.init();
LCD.backlight();
LCD.setCursor(0,0);
LCD.print(" TERDETEKSI ");
LCD.setCursor(0,1);
LCD.print(" GERAKAN ");
// Output program akan terganti, jika input bernilai LOW
pirState = LOW;
}
}
}