#define BLYNK_TEMPLATE_ID "TMPL6h67RKLAL"
#define BLYNK_TEMPLATE_NAME "Mini Project"
#define BLYNK_AUTH_TOKEN "ZmEckTTYa1KwZxLgcICTmURH-qkoSqjF"
#include <ESP32Servo.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include "DHT.h"
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
// WiFi credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// DHT22 Setup
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// HC-SR04 Setup
#define TRIGGER_PIN 17
#define ECHO_PIN 16
#define ECHO_TIMEOUT 30000
class HCSR04 {
public:
HCSR04(int trigger_pin, int echo_pin, int echo_timeout_us = 30000)
: trigger(trigger_pin), echo(echo_pin), echo_timeout_us(echo_timeout_us) {
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
}
float distance_cm() {
digitalWrite(trigger, LOW);
delayMicroseconds(5);
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
unsigned long duration = pulseIn(echo, HIGH, echo_timeout_us);
float distance = (duration / 2.0) / 29.1;
return distance;
}
private:
int trigger, echo;
int echo_timeout_us;
};
HCSR04 ultrasonic_sensor(TRIGGER_PIN, ECHO_PIN);
// MPU6050 Setup
Adafruit_MPU6050 mpu;
bool initializeMPU() {
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
return false;
}
mpu.setAccelerometerRange(MPU6050_RANGE_2_G);
mpu.setGyroRange(MPU6050_RANGE_250_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
return true;
}
// Blynk Virtual Pin Definitions
#define VPIN_TEMP V0
#define VPIN_HUMIDITY V1
#define VPIN_DISTANCE V2
#define VPIN_ACCEL_GYRO V3
#define VPIN_SERVO V4
Servo servo1;
int servoAngle = 0;
BLYNK_WRITE(VPIN_SERVO) {
servoAngle = param.asInt();
servo1.write(servoAngle);
}
void setup() {
Serial.begin(115200);
servo1.attach(14);
// Initialize DHT sensor
dht.begin();
// Initialize MPU6050
if (!initializeMPU()) {
while (1) {
delay(10);
}
}
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Initialize Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, password);
}
void loop() {
Blynk.run();
servo1.write(servoAngle);
// Read DHT22 sensor
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Read ultrasonic sensor
float distance = ultrasonic_sensor.distance_cm();
// Read MPU6050 sensor
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
float accel[3] = {a.acceleration.x, a.acceleration.y, a.acceleration.z};
float gyro[3] = {g.gyro.x, g.gyro.y, g.gyro.z};
// Send data to Blynk
Blynk.virtualWrite(VPIN_TEMP, temperature);
Blynk.virtualWrite(VPIN_HUMIDITY, humidity);
Blynk.virtualWrite(VPIN_DISTANCE, distance);
Blynk.virtualWrite(VPIN_ACCEL_GYRO, String(accel[0]) + "," + String(accel[1]) + "," + String(accel[2]) + "," + String(gyro[0]) + "," + String(gyro[1]) + "," + String(gyro[2]));
delay(1000); // Delay before next loop iteration
}