This commit is contained in:
commit
09ec95bded
|
@ -0,0 +1,274 @@
|
|||
#define BLYNK_PRINT Serial
|
||||
#define BLYNK_TEMPLATE_ID "TMPL6pmSmTWSq"
|
||||
#define BLYNK_TEMPLATE_NAME "Sensor"
|
||||
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <BlynkSimpleEsp8266.h>
|
||||
#include <Wire.h>
|
||||
#include <LiquidCrystal_I2C.h>
|
||||
#include <DHT.h>
|
||||
#include <DHT_U.h>
|
||||
#include <Servo.h>
|
||||
#include <ESP8266HTTPClient.h>
|
||||
|
||||
// Blynk authentication token and WiFi credentials
|
||||
char auth[] = "RV_-8PWtIpIC09kAYSfGtZT6r6ezJNCk"; // Blynk auth token
|
||||
char ssid[] = "realme 5 Pro"; // Wi-Fi SSID
|
||||
char pass[] = "tugasakhir"; // Wi-Fi password
|
||||
|
||||
// Pin Definitions
|
||||
const int servoPin = D6; // Pin for the servo
|
||||
const int mq135Pin = A0; // Pin for the MQ-135 sensor
|
||||
#define DHTPin D3 // Pin for the DHT sensor
|
||||
const int relayPin = D4; // Pin for the relay controlling the fan
|
||||
|
||||
#define VPIN_TEMP V0
|
||||
#define VPIN_HUM V1
|
||||
#define VPIN_UDARA V2 // Blynk virtual pin
|
||||
#define VPIN_FAN V3
|
||||
#define VPIN_SERVO V4
|
||||
|
||||
const float tempThreshold = 30.0;
|
||||
const int thresholdPPM = 65; // New threshold for MQ-135 in PPM
|
||||
|
||||
// Servo Setup
|
||||
Servo myServo;
|
||||
int closedPosition = 0; // Position when window is closed
|
||||
int openPosition = 90; // Position when window is open
|
||||
|
||||
#define DHTTYPE DHT11
|
||||
DHT dht(DHTPin, DHTTYPE);
|
||||
|
||||
LiquidCrystal_I2C lcd(0x27, 16, 2); // Address 0x27, 16x2 LCD
|
||||
|
||||
unsigned long previousMillis = 0; // Stores the last time data was sent
|
||||
const long interval = 60000; // Interval to send data (1 minute)
|
||||
|
||||
bool tempNotified = false; // Flag to track if temp notification was sent
|
||||
bool gasNotified = false; // Flag to track if gas notification was sent
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
Serial.println("Connecting to Wi-Fi...");
|
||||
|
||||
Blynk.begin(auth, ssid, pass);
|
||||
|
||||
pinMode(relayPin, OUTPUT);
|
||||
digitalWrite(relayPin, HIGH); // Turn off relay initially
|
||||
|
||||
myServo.attach(servoPin); // Attach servo to the specified pin
|
||||
myServo.write(closedPosition); // Initial servo position
|
||||
|
||||
dht.begin(); // Initialize DHT sensor
|
||||
lcd.init(); // Initialize LCD
|
||||
lcd.backlight(); // Turn on LCD backlight
|
||||
|
||||
Serial.println("Setup completed");
|
||||
}
|
||||
|
||||
void loop() {
|
||||
Blynk.run();
|
||||
sensorReadings();
|
||||
|
||||
unsigned long currentMillis = millis();
|
||||
if (currentMillis - previousMillis >= interval) {
|
||||
previousMillis = currentMillis;
|
||||
sendDataToServer();
|
||||
}
|
||||
}
|
||||
|
||||
void sensorReadings() {
|
||||
int sensorValue = analogRead(mq135Pin);
|
||||
delay(200);
|
||||
sensorValue = analogRead(mq135Pin);
|
||||
int ppm = map(sensorValue, 0, 1023, 0, 500); // Adjusted range for MQ-135
|
||||
|
||||
float h = dht.readHumidity();
|
||||
float t = dht.readTemperature();
|
||||
int fanState = digitalRead(relayPin) == LOW ? 1 : 0;
|
||||
int servoState = myServo.read();
|
||||
|
||||
if (isnan(h) || isnan(t)) {
|
||||
Serial.println("Failed to read from sensor");
|
||||
return;
|
||||
}
|
||||
|
||||
Blynk.virtualWrite(VPIN_TEMP, t);
|
||||
Blynk.virtualWrite(VPIN_HUM, h);
|
||||
Blynk.virtualWrite(VPIN_UDARA, ppm);
|
||||
Blynk.virtualWrite(VPIN_FAN, fanState);
|
||||
Blynk.virtualWrite(VPIN_SERVO, servoState);
|
||||
|
||||
Serial.print("Humidity: ");
|
||||
Serial.print(h);
|
||||
Serial.print("%\t");
|
||||
Serial.print("Temperature: ");
|
||||
Serial.print(t);
|
||||
Serial.print("°C\t");
|
||||
Serial.print("PPM: ");
|
||||
Serial.println(ppm);
|
||||
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Temp: ");
|
||||
lcd.print(t);
|
||||
lcd.print("C");
|
||||
|
||||
lcd.setCursor(2, 0);
|
||||
lcd.print("ppm: ");
|
||||
lcd.print(ppm);
|
||||
|
||||
// Automatic fan control based on temperature
|
||||
if (t > tempThreshold) {
|
||||
digitalWrite(relayPin, LOW); // Turn on fan
|
||||
fanState = 1;
|
||||
Serial.println("Temp > 30°C. Fan ON");
|
||||
if (!tempNotified) {
|
||||
Blynk.logEvent("high_temp", "Warning: Temperature above safe limit");
|
||||
tempNotified = true;
|
||||
}
|
||||
turnFanOn();
|
||||
} else {
|
||||
digitalWrite(relayPin, HIGH); // Turn off fan
|
||||
fanState = 0;
|
||||
Serial.println("Temp <= 30°C. Fan OFF");
|
||||
tempNotified = false;
|
||||
turnFanOff();
|
||||
}
|
||||
|
||||
// Gas detection logic
|
||||
if (ppm > thresholdPPM) {
|
||||
Serial.println("Gas detected above safe limit");
|
||||
if (!gasNotified) {
|
||||
Blynk.logEvent("high_gas", "Warning: Gas concentration above safe limit");
|
||||
gasNotified = true;
|
||||
}
|
||||
openWindow(); // Open window
|
||||
} else {
|
||||
Serial.println("Gas not detected");
|
||||
gasNotified = false;
|
||||
closeWindow(); // Close window
|
||||
}
|
||||
}
|
||||
|
||||
void openWindow() {
|
||||
myServo.write(openPosition);
|
||||
Serial.println("Window opened.");
|
||||
sendServoCommand("ON"); // Open window command
|
||||
}
|
||||
|
||||
void closeWindow() {
|
||||
myServo.write(closedPosition);
|
||||
Serial.println("Window closed.");
|
||||
sendServoCommand("OFF"); // Close window command
|
||||
}
|
||||
|
||||
void turnFanOn() {
|
||||
digitalWrite(relayPin, LOW); // Turn on fan
|
||||
sendFanCommand("ON"); // Send fan ON status to server
|
||||
}
|
||||
|
||||
void turnFanOff() {
|
||||
digitalWrite(relayPin, HIGH); // Turn off fan
|
||||
sendFanCommand("OFF"); // Send fan OFF status to server
|
||||
}
|
||||
|
||||
void sendDataToServer() {
|
||||
float h = dht.readHumidity();
|
||||
float t = dht.readTemperature();
|
||||
int sensorValue = analogRead(mq135Pin);
|
||||
int ppm = map(sensorValue, 0, 1023, 0, 500); // Adjusted range for MQ-135
|
||||
int fanState = digitalRead(relayPin) == LOW ? 1 : 0;
|
||||
int servoState = myServo.read();
|
||||
|
||||
if (isnan(h) || isnan(t)) {
|
||||
Serial.println("Failed to read from sensor");
|
||||
return;
|
||||
}
|
||||
|
||||
sendSensorDataToServer(t, h, ppm, fanState, servoState);
|
||||
}
|
||||
|
||||
void sendSensorDataToServer(float temp, float hum, int ppm, int fanState, int servoState) {
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
WiFiClient client;
|
||||
HTTPClient http;
|
||||
|
||||
http.begin(client, "http://192.168.85.242/db/dbsensor.php");
|
||||
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
|
||||
String postData = "suhu=" + String(temp) + "&kelembapan=" + String(hum) + "&udara=" + String(ppm)
|
||||
+ "&Fan=" + String(fanState) + "&jendela=" + String(servoState);
|
||||
|
||||
Serial.print("Sending POST data: ");
|
||||
Serial.println(postData);
|
||||
|
||||
int httpResponseCode = http.POST(postData);
|
||||
if (httpResponseCode > 0) {
|
||||
String response = http.getString();
|
||||
Serial.println(httpResponseCode);
|
||||
Serial.println(response);
|
||||
} else {
|
||||
Serial.print("Error on sending POST: ");
|
||||
Serial.println(httpResponseCode);
|
||||
}
|
||||
http.end();
|
||||
} else {
|
||||
Serial.println("WiFi disconnected");
|
||||
}
|
||||
}
|
||||
|
||||
void sendServoCommand(String command) {
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
WiFiClient client;
|
||||
HTTPClient http;
|
||||
|
||||
http.begin(client, "http://192.168.85.242/db/dbsensor.php");
|
||||
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
|
||||
String postData = "servoCommand=" + command;
|
||||
|
||||
Serial.print("Sending POST data: ");
|
||||
Serial.println(postData);
|
||||
|
||||
int httpResponseCode = http.POST(postData);
|
||||
if (httpResponseCode > 0) {
|
||||
String response = http.getString();
|
||||
Serial.println(httpResponseCode);
|
||||
Serial.println(response);
|
||||
} else {
|
||||
Serial.print("Error on sending POST: ");
|
||||
Serial.println(httpResponseCode);
|
||||
}
|
||||
http.end();
|
||||
} else {
|
||||
Serial.println("WiFi disconnected");
|
||||
}
|
||||
}
|
||||
|
||||
void sendFanCommand(String command) {
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
WiFiClient client;
|
||||
HTTPClient http;
|
||||
|
||||
http.begin(client, "http://192.168.85.242/db/dbsensor.php");
|
||||
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
|
||||
String postData = "fanCommand=" + command;
|
||||
|
||||
Serial.print("Sending POST data: ");
|
||||
Serial.println(postData);
|
||||
|
||||
int httpResponseCode = http.POST(postData);
|
||||
if (httpResponseCode > 0) {
|
||||
String response = http.getString();
|
||||
Serial.println(httpResponseCode);
|
||||
Serial.println(response);
|
||||
} else {
|
||||
Serial.print("Error on sending POST: ");
|
||||
Serial.println(httpResponseCode);
|
||||
}
|
||||
http.end();
|
||||
} else {
|
||||
Serial.println("WiFi disconnected");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,192 @@
|
|||
#define BLYNK_PRINT Serial
|
||||
#define BLYNK_TEMPLATE_ID "TMPL6pmSmTWSq"
|
||||
#define BLYNK_TEMPLATE_NAME "Sensor"
|
||||
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <BlynkSimpleEsp8266.h>
|
||||
#include <Wire.h>
|
||||
#include <LiquidCrystal_I2C.h>
|
||||
#include <DHT.h>
|
||||
#include <DHT_U.h>
|
||||
#include <Servo.h>
|
||||
|
||||
// Blynk authentication token and WiFi credentials
|
||||
char auth[] = "RV_-8PWtIpIC09kAYSfGtZT6r6ezJNCk"; // Blynk auth token
|
||||
char ssid[] = "realme 5 Pro"; // Wi-Fi SSID
|
||||
char pass[] = "tugasakhir"; // Wi-Fi password
|
||||
|
||||
// Pin Definitions
|
||||
const int servoPin = D6; // Pin for the servo
|
||||
const int mq135Pin = A0; // Pin for the MQ-135 sensor
|
||||
#define DHTPin D3 // Pin for the DHT sensor
|
||||
const int relayPin = D4; // Pin for the relay controlling the fan
|
||||
|
||||
#define VPIN_TEMP V0
|
||||
#define VPIN_HUM V1
|
||||
#define VPIN_UDARA V2 // Blynk virtual pin
|
||||
#define VPIN_FAN V3
|
||||
#define VPIN_SERVO V4
|
||||
|
||||
const int thresholdPPM = 65; // New threshold for MQ-135 in PPM
|
||||
|
||||
// Servo Setup
|
||||
Servo myServo;
|
||||
int closedPosition = 0; // Position when window is closed
|
||||
int openPosition = 90; // Position when window is open
|
||||
|
||||
#define DHTTYPE DHT11
|
||||
DHT dht(DHTPin, DHTTYPE);
|
||||
|
||||
LiquidCrystal_I2C lcd(0x27, 16, 2); // Address 0x27, 16x2 LCD
|
||||
|
||||
unsigned long previousMillis = 0; // Stores the last time data was sent
|
||||
const long interval = 60000; // Interval to send data (1 minute)
|
||||
|
||||
bool fanState = false; // State of the fan
|
||||
bool windowState = false; // State of the window
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
Serial.println("Connecting to Wi-Fi...");
|
||||
|
||||
Blynk.begin(auth, ssid, pass);
|
||||
|
||||
pinMode(relayPin, OUTPUT);
|
||||
digitalWrite(relayPin, HIGH); // Turn off relay initially
|
||||
|
||||
myServo.attach(servoPin); // Attach servo to the specified pin
|
||||
myServo.write(closedPosition); // Initial servo position
|
||||
|
||||
dht.begin(); // Initialize DHT sensor
|
||||
lcd.init(); // Initialize LCD
|
||||
lcd.backlight(); // Turn on LCD backlight
|
||||
|
||||
Serial.println("Setup completed");
|
||||
}
|
||||
|
||||
void loop() {
|
||||
Blynk.run();
|
||||
sensorReadings();
|
||||
|
||||
unsigned long currentMillis = millis();
|
||||
if (currentMillis - previousMillis >= interval) {
|
||||
previousMillis = currentMillis;
|
||||
sendDataToBlynk();
|
||||
}
|
||||
}
|
||||
|
||||
void sensorReadings() {
|
||||
int sensorValue = analogRead(mq135Pin);
|
||||
// Adding a delay to stabilize the readings
|
||||
delay(200);
|
||||
sensorValue = analogRead(mq135Pin);
|
||||
int ppm = map(sensorValue, 0, 1023, 0, 500); // Adjusted range for MQ-135
|
||||
|
||||
float h = dht.readHumidity();
|
||||
float t = dht.readTemperature();
|
||||
|
||||
if (isnan(h) || isnan(t)) {
|
||||
Serial.println("Failed to read from sensor");
|
||||
return;
|
||||
}
|
||||
|
||||
Blynk.virtualWrite(VPIN_TEMP, t);
|
||||
Blynk.virtualWrite(VPIN_HUM, h);
|
||||
Blynk.virtualWrite(VPIN_UDARA, ppm);
|
||||
|
||||
Serial.print("Humidity: ");
|
||||
Serial.print(h);
|
||||
Serial.print("%\t");
|
||||
Serial.print("Temperature: ");
|
||||
Serial.print(t);
|
||||
Serial.print("°C\t");
|
||||
Serial.print("PPM: ");
|
||||
Serial.println(ppm);
|
||||
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Temp: ");
|
||||
lcd.print(t);
|
||||
lcd.print("C");
|
||||
|
||||
lcd.setCursor(2, 0);
|
||||
lcd.print("ppm: ");
|
||||
lcd.print(String(ppm));
|
||||
}
|
||||
|
||||
void openWindow() {
|
||||
myServo.write(openPosition);
|
||||
windowState = true;
|
||||
Serial.println("Window opened.");
|
||||
}
|
||||
|
||||
void closeWindow() {
|
||||
myServo.write(closedPosition);
|
||||
windowState = false;
|
||||
Serial.println("Window closed.");
|
||||
}
|
||||
|
||||
void turnFanOn() {
|
||||
digitalWrite(relayPin, LOW); // Turn on fan
|
||||
fanState = true;
|
||||
}
|
||||
|
||||
void turnFanOff() {
|
||||
digitalWrite(relayPin, HIGH); // Turn off fan
|
||||
fanState = false;
|
||||
}
|
||||
|
||||
void sendDataToBlynk() {
|
||||
float h = dht.readHumidity();
|
||||
float t = dht.readTemperature();
|
||||
int sensorValue = analogRead(mq135Pin);
|
||||
int ppm = map(sensorValue, 0, 1023, 0, 500); // Adjusted range for MQ-135
|
||||
|
||||
if (isnan(h) || isnan(t)) {
|
||||
Serial.println("Failed to read from sensor");
|
||||
return;
|
||||
}
|
||||
|
||||
Blynk.virtualWrite(VPIN_TEMP, t);
|
||||
Blynk.virtualWrite(VPIN_HUM, h);
|
||||
Blynk.virtualWrite(VPIN_UDARA, ppm);
|
||||
Blynk.virtualWrite(VPIN_FAN, fanState ? 1 : 0);
|
||||
Blynk.virtualWrite(VPIN_SERVO, windowState ? 1 : 0);
|
||||
|
||||
Serial.print("Humidity: ");
|
||||
Serial.print(h);
|
||||
Serial.print("%\t");
|
||||
Serial.print("Temperature: ");
|
||||
Serial.print(t);
|
||||
Serial.print("°C\t");
|
||||
Serial.print("PPM: ");
|
||||
Serial.println(ppm);
|
||||
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("Temp: ");
|
||||
lcd.print(t);
|
||||
lcd.print("C");
|
||||
|
||||
lcd.setCursor(2, 0);
|
||||
lcd.print("ppm: ");
|
||||
lcd.print(String(ppm));
|
||||
}
|
||||
|
||||
// Blynk function to control the fan via button
|
||||
BLYNK_WRITE(VPIN_FAN) {
|
||||
int fanControl = param.asInt();
|
||||
if (fanControl == 1) {
|
||||
turnFanOn();
|
||||
} else {
|
||||
turnFanOff();
|
||||
}
|
||||
}
|
||||
|
||||
// Blynk function to control the servo via button
|
||||
BLYNK_WRITE(VPIN_SERVO) {
|
||||
int servoControl = param.asInt();
|
||||
if (servoControl == 1) {
|
||||
openWindow();
|
||||
} else {
|
||||
closeWindow();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue