Upload files to "/"

This commit is contained in:
Izza_ismi_aisyiyah 2024-07-16 12:59:08 +07:00
commit ec9e68f1dc
1 changed files with 222 additions and 0 deletions

View File

@ -0,0 +1,222 @@
#define BLYNK_AUTH_TOKEN "VC1vughjM7vsF50JrZ52btxtE35SmEdU"
#define BLYNK_TEMPLATE_ID "TMPL6nUJWUBf2"
#define BLYNK_TEMPLATE_NAME "Pemantauan Kandang"
#include <ESP8266WiFi.h> // Library untuk koneksi WiFi
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHTesp.h"
#include <BlynkSimpleEsp8266.h>
#define DHTPIN 2 // Pin data DHT11 terhubung ke pin GPIO2 (D4) pada ESP8266
#define DHTTYPE DHTesp::DHT11 // Tipe sensor DHT11
DHTesp dht;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD: 0x27, Jumlah kolom: 16, Jumlah baris: 2
const int Sensor = A0;
const int BuzzerPin = 14; // Pin GPIO untuk mengendalikan buzzer
const int RelayPin = 12; // Pin GPIO untuk mengendalikan relay
const int RelayPinKipas = 13; // Pin GPIO untuk mengendalikan relay kipas
float voltage = 5.0; // Tegangan referensi ADC (Volt)
float ppmThreshold = 20; // Ambang batas ppm
float temperatureThreshold = 30; // Ambang batas suhu
// Pengaturan WiFi
char ssid[] = "Izza";
char password[] = "izzaismi123";
// Token Blynk
char auth[] = BLYNK_AUTH_TOKEN;
bool manualOffBuzzer = false; // Status manual off untuk buzzer
bool manualOffRelay = false; // Status manual off untuk relay
bool manualOffRelayKipas = false; // Status manual off untuk relay kipas
bool manualControlKipas = false; // Kontrol manual dari Blynk untuk kipas
bool manualControlRelay = false; // Kontrol manual dari Blynk untuk relay
void setup() {
Serial.begin(115200);
Serial.println("Sistem Monitor Udara Mulai...");
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight LCD
pinMode(A0, INPUT);
pinMode(BuzzerPin, OUTPUT); // Atur pin buzzer sebagai output
pinMode(RelayPin, OUTPUT); // Atur pin relay sebagai output
pinMode(RelayPinKipas, OUTPUT); // Atur pin relay kipas sebagai output
dht.setup(DHTPIN, DHTTYPE);
// Menghubungkan ke jaringan WiFi
Serial.println("Menghubungkan ke WiFi...");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Menghubungkan");
lcd.setCursor(0, 1);
lcd.print("ke WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Mencoba terhubung ke WiFi...");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Mencoba");
lcd.setCursor(0, 1);
lcd.print("terhubung...");
}
Serial.println("Terhubung ke WiFi!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Terhubung ke");
lcd.setCursor(0, 1);
lcd.print("WiFi!");
// Inisialisasi koneksi Blynk
Blynk.begin(auth, ssid, password, "blynk.cloud", 80);
// Tambahkan penundaan untuk memberikan waktu sensor DHT untuk inisialisasi
delay(5000); // 5 detik
}
void loop() {
Blynk.run();
delay(dht.getMinimumSamplingPeriod());
float temperature = dht.getTemperature();
// Coba membaca lagi jika pembacaan awal gagal
if (isnan(temperature)) {
Serial.println("Failed to read from DHT sensor, retrying...");
delay(2000); // Tambahkan penundaan sebelum mencoba membaca lagi
temperature = dht.getTemperature();
}
if (isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Failed to read");
lcd.setCursor(0,1);
lcd.print("from DHT sensor!");
return;
}
Blynk.virtualWrite(V0, temperature);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print("C");
if (temperature > temperatureThreshold && !manualControlKipas) {
//Blynk.email
Blynk.logEvent("notifikasi","Suhu di atas 30 Derajat Celcius");
lcd.setCursor(0, 1);
lcd.print("Status: Panas");
if (!manualOffRelayKipas) {
digitalWrite(RelayPinKipas, HIGH); // Nyalakan kipas
}
} else {
lcd.setCursor(0, 1);
lcd.print("Status: Normal");
if (!manualControlKipas) {
digitalWrite(RelayPinKipas, LOW); // Matikan kipas
}
}
delay(2000);
int dataSensor = analogRead(Sensor);
float voltageValue = (dataSensor * voltage) / 1023.0; // Mengonversi nilai sensor menjadi tegangan (Volt)
// Menghitung konsentrasi partikulat dalam ppm
float ppmValue = voltageValue * 10.0; // Mengonversi tegangan menjadi mV
// Disesuaikan dengan karakteristik sensor Anda (memerlukan kalibrasi)
Blynk.virtualWrite(V2, ppmValue);
lcd.clear(); // Membersihkan layar untuk tampilan selanjutnya
lcd.setCursor(0, 0); // Posisi kursor LCD di baris 1 kolom 1
lcd.print("PPM: ");
lcd.print(ppmValue); // Tampilkan nilai ppm
// Memeriksa jika konsentrasi melebihi ambang batas
lcd.setCursor(0, 1); // Posisi kursor LCD di baris 2 kolom 1
if (ppmValue > ppmThreshold && !manualControlRelay) {
//Blynk.email
Blynk.logEvent("notifikasi","Gas Amonia di atas 20 ppm");
lcd.print("Udara:Tidak Baik");
if (!manualOffRelay) {
digitalWrite(RelayPin, HIGH); // Nyalakan relay
}
if (!manualOffBuzzer) {
controlBuzzer(true); // Panggil fungsi untuk mengontrol buzzer (aktifkan)
}
} else {
lcd.print("Udara:Baik");
if (!manualControlRelay) {
digitalWrite(RelayPin, LOW); // Matikan relay
}
controlBuzzer(false); // Panggil fungsi untuk mengontrol buzzer (matikan)
}
delay(2000);
}
void controlBuzzer(bool state) {
if (state) {
tone(BuzzerPin, 2000); // Menghasilkan bunyi buzzer pada frekuensi 2000Hz
} else {
noTone(BuzzerPin); // Pastikan bunyi buzzer dimatikan sepenuhnya
}
}
// Fungsi untuk mematikan buzzer secara manual
void manualOffBuzzerFunction() {
manualOffBuzzer = true;
controlBuzzer(false);
}
// Fungsi untuk mematikan relay secara manual
void manualOffRelayFunction() {
manualOffRelay = true;
digitalWrite(RelayPin, LOW);
}
// Fungsi untuk mematikan relay kipas secara manual
void manualOffRelayKipasFunction() {
manualOffRelayKipas = true;
digitalWrite(RelayPinKipas, LOW);
}
// Fungsi untuk menghidupkan kembali relay dan buzzer secara manual
void manualOnFunctions() {
manualOffBuzzer = false;
manualOffRelay = false;
manualOffRelayKipas = false;
}
// Blynk virtual write functions
BLYNK_WRITE(V1) {
manualControlKipas = param.asInt();
if (manualControlKipas) {
digitalWrite(RelayPinKipas, LOW); // Matikan kipas jika kontrol manual aktif
}
}
BLYNK_WRITE(V3) {
manualControlRelay = param.asInt();
if (manualControlRelay) {
digitalWrite(RelayPin, LOW); // Matikan relay jika kontrol manual aktif
}
}