155 lines
4.7 KiB
C++
155 lines
4.7 KiB
C++
#include <LiquidCrystal_I2C.h>
|
|
#include <Wire.h>
|
|
#include <ESP8266WiFi.h>
|
|
#include <ESP8266HTTPClient.h>
|
|
#include <DHT.h>
|
|
|
|
#define DHTPIN D3 // Pin data DHT22 ESP1 (D4) ESP2 (D3)
|
|
#define DHTTYPE DHT22 // Tipe sensor DHT22
|
|
#define RELAY_LAMP D7 // Pin relay untuk lampu
|
|
#define RELAY_FAN D6 // Pin relay untuk kipas
|
|
#define RELAY_ON 0
|
|
#define RELAY_OFF 1
|
|
|
|
DHT dht(DHTPIN, DHTTYPE);
|
|
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi LCD I2C dengan alamat 0x28 dan ukuran 16x2
|
|
|
|
// Konfigurasi WiFi
|
|
const char* ssid = "GalaxyA52";
|
|
const char* password = "12341234";
|
|
const char* server = "192.168.253.79";
|
|
|
|
unsigned long previousMillisRelay = 0;
|
|
unsigned long previousSendMillis = 0;
|
|
const long relayInterval = 2000; // Interval 2 detik untuk relay
|
|
const long sendInterval = 1000; // Interval 1 detik untuk pengiriman data
|
|
|
|
void setup() {
|
|
Serial.begin(9600);
|
|
Serial.println("DHT22 test!");
|
|
|
|
dht.begin();
|
|
lcd.init();
|
|
lcd.backlight();
|
|
|
|
pinMode(RELAY_LAMP, OUTPUT); // Atur pin relay lampu sebagai output
|
|
pinMode(RELAY_FAN, OUTPUT); // Atur pin relay kipas sebagai output
|
|
digitalWrite(RELAY_LAMP, RELAY_OFF); // Matikan relay lampu
|
|
digitalWrite(RELAY_FAN, RELAY_OFF); // Matikan relay kipas
|
|
|
|
WiFi.hostname("NodeMCU");
|
|
WiFi.begin(ssid, password);
|
|
|
|
// Cek koneksi WiFi
|
|
while (WiFi.status() != WL_CONNECTED) {
|
|
delay(1000);
|
|
Serial.println("Connecting to WiFi...");
|
|
}
|
|
lcd.println("haloo");
|
|
delay(2000);
|
|
lcd.clear();
|
|
|
|
// Tampilkan pesan "sayang" di LCD selama 1 detik
|
|
lcd.setCursor(0, 0);
|
|
lcd.print("haloo");
|
|
delay(3000); // Tambahkan delay 1 detik untuk menampilkan "sayang"
|
|
|
|
// Tampilkan pesan "" di LCD selama 1 detik
|
|
lcd.print(" haloo");
|
|
delay(3000); //
|
|
lcd.clear();
|
|
}
|
|
|
|
void loop() {
|
|
unsigned long currentMillis = millis();
|
|
|
|
float temp = dht.readTemperature();
|
|
int hum = dht.readHumidity();
|
|
|
|
if (isnan(temp) || isnan(hum)) {
|
|
Serial.println("Gagal membaca sensor!");
|
|
lcd.setCursor(0, 0);
|
|
lcd.print("Error");
|
|
return;
|
|
}
|
|
|
|
// Tampilkan di LCD
|
|
lcd.clear();
|
|
lcd.setCursor(0, 0);
|
|
lcd.print("KELEMBABAN: ");
|
|
lcd.print(hum);
|
|
lcd.println(" %");
|
|
lcd.setCursor(0, 1);
|
|
lcd.print("SUHU: ");
|
|
lcd.print(temp);
|
|
lcd.print((char)223); // Simbol derajat Celsius
|
|
lcd.print("C");
|
|
|
|
// Tampilkan di Serial Monitor
|
|
Serial.print("Suhu: ");
|
|
Serial.print(temp);
|
|
Serial.print(" C, Kelembaban: ");
|
|
Serial.print(hum);
|
|
Serial.println(" %");
|
|
|
|
// Kontrol relay berdasarkan suhu dan kelembaban
|
|
if (currentMillis - previousMillisRelay >= relayInterval) {
|
|
previousMillisRelay = currentMillis;
|
|
|
|
if (temp > 32) {
|
|
if (hum > 75) {
|
|
digitalWrite(RELAY_FAN, RELAY_ON); // Hidupkan kipas
|
|
digitalWrite(RELAY_LAMP, RELAY_ON); // Hidupkan lampu
|
|
Serial.println("Kipas ON, Lampu ON (Suhu > 32, Kelembaban > 70)");
|
|
} else {
|
|
digitalWrite(RELAY_FAN, RELAY_ON); // Hidupkan kipas
|
|
digitalWrite(RELAY_LAMP, RELAY_OFF); // Matikan lampu
|
|
Serial.println("Kipas ON, Lampu OFF (Suhu > 32, Kelembaban <= 70)");
|
|
}
|
|
} else if (temp < 28) {
|
|
if (hum < 70) {
|
|
digitalWrite(RELAY_FAN, RELAY_ON); // Hidupkan kipas
|
|
digitalWrite(RELAY_LAMP, RELAY_ON); // Hidupkan lampu
|
|
Serial.println("Kipas ON, Lampu ON (Suhu < 28, Kelembaban < 70)");
|
|
} else {
|
|
digitalWrite(RELAY_FAN, RELAY_OFF); // Matikan kipas
|
|
digitalWrite(RELAY_LAMP, RELAY_ON); // Hidupkan lampu
|
|
Serial.println("Kipas OFF, Lampu ON (Suhu < 28, Kelembaban >= 70)");
|
|
}
|
|
} else {
|
|
if (hum > 75) {
|
|
digitalWrite(RELAY_FAN, RELAY_OFF); // Matikan kipas
|
|
digitalWrite(RELAY_LAMP, RELAY_ON); // Hidupkan lampu
|
|
Serial.println("Kipas OFF, Lampu ON (28 <= Suhu <= 32, Kelembaban > 70)");
|
|
} else if (hum < 70) {
|
|
digitalWrite(RELAY_FAN, RELAY_ON); // Hidupkan kipas
|
|
digitalWrite(RELAY_LAMP, RELAY_OFF); // Matikan lampu
|
|
Serial.println("Kipas ON, Lampu OFF (28 <= Suhu <= 32, Kelembaban < 70)");
|
|
} else {
|
|
digitalWrite(RELAY_FAN, RELAY_OFF); // Matikan kipas
|
|
digitalWrite(RELAY_LAMP, RELAY_OFF); // Matikan lampu
|
|
Serial.println("Kipas OFF, Lampu OFF (28 <= Suhu <= 32, 70 <= Kelembaban <= 70)");
|
|
}
|
|
}
|
|
}
|
|
|
|
// Kirim data setiap detik
|
|
if (currentMillis - previousSendMillis >= sendInterval) {
|
|
previousSendMillis = currentMillis;
|
|
|
|
WiFiClient wClient;
|
|
String url;
|
|
HTTPClient http;
|
|
url = "http://" + String(server) + "/web-ta/public/simpansatu/" + String(temp) + "/" + String(hum);
|
|
http.begin(wClient, url);
|
|
int httpCode = http.GET();
|
|
if (httpCode > 0) {
|
|
Serial.println("Data terkirim ke server.");
|
|
} else {
|
|
Serial.println("Gagal mengirim data!");
|
|
}
|
|
http.end();
|
|
}
|
|
|
|
delay(1000); // Tambahkan delay 1 detik pada loop
|
|
} |