#define BLYNK_TEMPLATE_ID "12345"
#define BLYNK_TEMPLATE_NAME "IoT"
#define BLYNK_FIRMWARE_VERSION "0.1.0"
#define BLYNK_PRINT Serial
#define BLYNK_DEBUG
#define APP_DEBUG
#define USE_ESP32_DEV_MODULE
#include <WiFi.h>
#include <WiFiClient.h>
#include "BlynkEdgent.h"
#include <MQ2.h>
#include <SPI.h>
#include <Wire.h>
#define BUZZER_PIN 32
#define LED 33
#define ANALOG_PIN_MQ2 34
#define DIGITAL_PIN_MQ2 35
#define READ_INTERVAL_IN_SEC 1
#define SEND_INTERVAL_IN_SEC 120
#define LED_HEARTBEAT_INTERVAL_IN_SEC 10
#define SMOKE_THRESHOLD 1
#define CO_THRESHOLD 1
#define LPG_THRESHOLD 1
MQ2 mq2(ANALOG_PIN_MQ2);
BlynkTimer timer;
float co, lpg, smoke;
bool isAlarmOn = false;
void setup()
{
Serial.begin(115200);
delay(100);
BlynkEdgent.begin();
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED, OUTPUT);
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(LED, LOW);
// calibrate the device
mq2.begin();
Serial.println("IoT Smoke Detector ");
Serial.print("Device MAC: ");
Serial.println(WiFi.macAddress());
delay(1000);
timer.setInterval(READ_INTERVAL_IN_SEC*1000L, readSensorData);
timer.setInterval(SEND_INTERVAL_IN_SEC*1000L, sendSensorData);
timer.setInterval(LED_HEARTBEAT_INTERVAL_IN_SEC*1000L, ledHeartBeat);
}
void alarmOn(){
digitalWrite(BUZZER_PIN, HIGH);
digitalWrite(LED, HIGH);
isAlarmOn = true;
}
void alarmOff(){
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(LED, LOW);
isAlarmOn = false;
}
void ledHeartBeat(){
if(!isAlarmOn){
digitalWrite(LED, HIGH);
delay(250);
digitalWrite(LED, LOW);
}
}
void loop()
{
timer.run();
BlynkEdgent.run();
}
void readSensorData()
{
//array with the measured values in the order: lpg, CO and smoke
float* values = mq2.read(true);
co = mq2.readCO();
smoke = mq2.readSmoke();
lpg = mq2.readLPG();
Serial.print("Analog Value: ");
Serial.print(analogRead(ANALOG_PIN_MQ2));
Serial.print(" Digital Pin MQ2: ");
Serial.println(digitalRead(DIGITAL_PIN_MQ2));
if ((smoke> SMOKE_THRESHOLD) || (lpg>LPG_THRESHOLD) || (co>CO_THRESHOLD))
{
if (!isAlarmOn){
alarmOn();
Serial.println("Sending alert ito cloud");
Blynk.logEvent("smoke","Alert !! Smoke detector alarm trigerred");
sendSensorData();
}
}
else {
alarmOff();
}
}
void sendSensorData(){
Serial.println("Sending sensor data..");
Blynk.virtualWrite(V1, smoke);
Blynk.virtualWrite(V2, lpg);
Blynk.virtualWrite(V3, co);
}