/*************************************************
MULTI SENSOR SYSTEM – ESP32 (OFFLINE VERSION)
WiFi & Blynk REMOVED
Each sensor coded in separate logical blocks
**************************************************/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <ESP32Servo.h>
/* ---------- LCD I2C SETUP ---------- */
#define SDA_PIN 25
#define SCL_PIN 26
LiquidCrystal_I2C lcd(0x27, 16, 2);
/* ---------- DHT22 SENSOR ---------- */
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
/* ---------- SERVO MOTOR ---------- */
Servo tempServo;
#define SERVO_PIN 5
/* ---------- ULTRASONIC SENSOR ---------- */
#define TRIG 18
#define ECHO 19
#define ULTRASONIC_LED 23
/* ---------- LDR SENSOR ---------- */
#define LDRPIN 34
#define LDR_LED 22
/* ---------- GAS SENSOR ---------- */
#define GASPIN 35
#define GAS_BUZZER 21
#define GAS_THRESHOLD 400
/* ---------- PIR SENSOR ---------- */
#define PIRPIN 32
#define PIR_RELAY 33
void setup() {
Serial.begin(115200);
/* ---------- LCD INITIALIZATION ---------- */
Wire.begin(SDA_PIN, SCL_PIN);
lcd.init();
lcd.backlight();
/* ---------- DHT SENSOR ---------- */
dht.begin();
/* ---------- SERVO SETUP ---------- */
ESP32PWM::allocateTimer(0);
tempServo.setPeriodHertz(50); // Standard servo frequency
tempServo.attach(SERVO_PIN, 500, 2400);
/* ---------- PIN MODES ---------- */
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(ULTRASONIC_LED, OUTPUT);
pinMode(LDR_LED, OUTPUT);
pinMode(GAS_BUZZER, OUTPUT);
pinMode(PIRPIN, INPUT);
pinMode(PIR_RELAY, OUTPUT);
Serial.println("Multi Sensor System Started...");
}
void loop() {
/* =================================================
1. DHT22 SENSOR + SERVO CONTROL
Temperature controls servo angle
================================================= */
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (!isnan(temperature)) {
int angle = map(temperature, 20, 40, 0, 180);
angle = constrain(angle, 0, 180);
tempServo.write(angle); // Rotate servo
}
/* =================================================
2. ULTRASONIC SENSOR
Object detection with LED indication
================================================= */
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long duration = pulseIn(ECHO, HIGH);
float distance = duration * 0.034 / 2;
if (distance < 20)
digitalWrite(ULTRASONIC_LED, HIGH);
else
digitalWrite(ULTRASONIC_LED, LOW);
/* =================================================
3. LDR SENSOR
Light-based LED control
================================================= */
int lightValue = analogRead(LDRPIN);
if (lightValue < 2000)
digitalWrite(LDR_LED, HIGH);
else
digitalWrite(LDR_LED, LOW);
/* =================================================
4. GAS SENSOR
Gas leakage alert using buzzer
================================================= */
int gasValue = analogRead(GASPIN);
if (gasValue > GAS_THRESHOLD)
digitalWrite(GAS_BUZZER, HIGH);
else
digitalWrite(GAS_BUZZER, LOW);
/* =================================================
5. PIR SENSOR
Motion detection using relay
================================================= */
int motion = digitalRead(PIRPIN);
if (motion == HIGH)
digitalWrite(PIR_RELAY, HIGH);
else
digitalWrite(PIR_RELAY, LOW);
/* =================================================
6. LCD DISPLAY
Display sensor values
================================================= */
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temperature, 1);
lcd.print(" H:");
lcd.print(humidity, 0);
lcd.setCursor(0, 1);
lcd.print("L:");
lcd.print(lightValue);
lcd.print(" D:");
lcd.print(distance, 0);
lcd.print("cm");
/* =================================================
7. SERIAL MONITOR OUTPUT
================================================= */
Serial.print("Temp: "); Serial.print(temperature);
Serial.print("C | Hum: "); Serial.print(humidity);
Serial.print("% | Light: "); Serial.print(lightValue);
Serial.print(" | Distance: "); Serial.print(distance);
Serial.print("cm | Gas: "); Serial.print(gasValue);
Serial.print(" | Motion: "); Serial.println(motion);
delay(2000); // Delay for stable readings
}