#include <Arduino_ESP32_OTA.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <ArduinoIoTCloud.h>
#include <Arduino_ConnectionHandler.h>
#define AOUT_PIN_MQ2 13
#define AOUT_PIN_FLAME 12
#define BUZZER_PIN 5
#define LED_RED_PIN 22
#define LED_GREEN_PIN 23
// Declare SSID and PASS as global variables
const char SSID[] = "FAM_2.4"; // Network SSID (name)
const char PASS[] = "Password"; // Network password (use for WPA, or use as key for WEP)
WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);
void setup() {
Serial.begin(115200);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_RED_PIN, OUTPUT);
pinMode(LED_GREEN_PIN, OUTPUT);
ledcSetup(0, 5000, 8);
ledcAttachPin(BUZZER_PIN, 0);
digitalWrite(LED_RED_PIN, HIGH);
Serial.println("Warming up sensors...");
connectToWiFi();
if (WiFi.status() == WL_CONNECTED) {
Serial.println("WiFi connected.");
Serial.print("WiFi connection result: ");
Serial.println(WiFi.status());
// Add a delay to stabilize the WiFi connection
delay(2000);
int cloudConnection = ArduinoCloud.begin(ArduinoIoTPreferredConnection);
Serial.print("Arduino IoT Cloud connection result: ");
Serial.println(cloudConnection);
if (cloudConnection != 0) {
// Unable to connect to Arduino IoT Cloud
Serial.println("Error connecting to Arduino IoT Cloud");
setDebugMessageLevel(4);
ArduinoCloud.printDebugInfo();
while (1);
}
// Turn on the green LED when connected
digitalWrite(LED_RED_PIN, LOW);
digitalWrite(LED_GREEN_PIN, HIGH);
Serial.println("Connected, Sensors are ready!");
} else {
Serial.println("WiFi connection failed. Sensors may not work correctly.");
}
// Initialize IoT Cloud properties
initProperties();
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
}
void loop() {
ArduinoCloud.update();
// Read smoke (MQ2) sensor
int smokeValue = analogRead(AOUT_PIN_MQ2);
Serial.print("Smoke Value: ");
Serial.println(smokeValue);
// Read flame sensor from A0
int flameValue = analogRead(AOUT_PIN_FLAME);
Serial.print("Flame Value: ");
Serial.println(flameValue);
// Check for smoke and activate buzzer with different tones
if (smokeValue > 500) {
tone(BUZZER_PIN, 1000); // Adjust frequency for smoke detection
Serial.println("Smoke detected! Buzzer sounding (Smoke tone).");
digitalWrite(LED_RED_PIN, HIGH);
digitalWrite(LED_GREEN_PIN, LOW); // Alternate red and green LEDs
delay(3000); // Adjust duration for tone to be audible
noTone(BUZZER_PIN); // Turn off the buzzer
}
// Check for flame and activate buzzer with different tones
if (flameValue < 1000) {
tone(BUZZER_PIN, 900); // Adjust frequency for flame detection
digitalWrite(LED_RED_PIN, HIGH);
digitalWrite(LED_GREEN_PIN, LOW); // Alternate red and green LEDs
Serial.println("Flame detected! Buzzer sounding (Flame tone).");
} else {
noTone(BUZZER_PIN);
digitalWrite(LED_RED_PIN, LOW);
digitalWrite(LED_GREEN_PIN, HIGH);
}
delay(1000); // You can adjust the delay based on your application requirements
}
void connectToWiFi() {
Serial.print("Connecting to WiFi");
WiFi.begin(SSID, PASS);
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 20) {
delay(500);
Serial.print(".");
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nConnected to WiFi");
} else {
Serial.println("\nFailed to connect to WiFi");
}
}
// Code generated by Arduino IoT Cloud, DO NOT EDIT.
const char DEVICE_ID[] = "YOUR_DEVICE_ID";
const char DEVICE_KEY[] = "YOUR_DEVICE_KEY"; // Secret device password
float mq2_sensor;
int flame_sensor;
void initProperties() {
ArduinoCloud.setBoardId(DEVICE_ID);
ArduinoCloud.setDeviceId(DEVICE_KEY);
ArduinoCloud.addProperty(mq2_sensor, READ, ON_CHANGE, NULL);
ArduinoCloud.addProperty(flame_sensor, READ, ON_CHANGE, NULL);
}
I'm using the Arduino IDE, not the online version. My board is the ESP32 WROOM, but in the IDE, I'm uploading to the 'DOIT ESP32 DEVKIT V1. im sure im putting the right credential in the "ID" and "secret key"



