#define BLYNK_TEMPLATE_ID "TMPL3XjajWIg-"
#define BLYNK_TEMPLATE_NAME "Elderly care"
#define BLYNK_AUTH_TOKEN "YnoTi4gGL3-PUsdooLVS1WzZZ8eFKBSH"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char ssid[] = "Wokwi-GUEST"; // Wokwi default
char pass[] = ""; // no password
#define BUTTON_PIN 13
#define HEART_PIN 34
#define BP_PIN 35
#define BUZZER_PIN 26
#define PIR_PIN 15
#define FAN_LED 14
#define LIGHT_LED 17
#define FAN_BUTTON 18
#define LIGHT_BUTTON 19
int heartValue, bpValue;
bool alertSent = false;
bool fanState = false;
bool lightState = false;
unsigned long lastSensorRead = 0;
unsigned long lastButtonCheck = 0;
void sendSensorData() {
heartValue = analogRead(HEART_PIN);
bpValue = analogRead(BP_PIN);
int heartRate = map(heartValue, 0, 4095, 60, 120);
int bp = map(bpValue, 0, 4095, 90, 150);
Serial.printf("Heart: %d bpm | BP: %d mmHg\n", heartRate, bp);
// Send data to Blynk App
Blynk.virtualWrite(V0, heartRate);
Blynk.virtualWrite(V1, bp);
// Abnormal condition detection
if (heartRate < 60 || heartRate > 110 || bp > 140) {
if (!alertSent) {
Serial.println("ALERT: Abnormal vitals detected!");
digitalWrite(BUZZER_PIN, HIGH);
delay(300);
digitalWrite(BUZZER_PIN, LOW);
Blynk.logEvent("vitals_alert", "Abnormal vitals detected!");
alertSent = true;
}
} else {
alertSent = false;
}
}
void checkButton() {
if (digitalRead(BUTTON_PIN) == LOW) {
Serial.println("Emergency button pressed!");
digitalWrite(BUZZER_PIN, HIGH);
delay(300);
digitalWrite(BUZZER_PIN, LOW);
Blynk.virtualWrite(V2, 1);
Blynk.logEvent("sos_alert", "Emergency button pressed!");
} else {
Blynk.virtualWrite(V2, 0);
}
}
void checkMotion() {
if (digitalRead(PIR_PIN) == HIGH) {
Serial.println("Fall detection");
digitalWrite(BUZZER_PIN, HIGH);
delay(300);
digitalWrite(BUZZER_PIN, LOW);
Blynk.virtualWrite(V3, 1);
Blynk.logEvent("fall_alert", "Fall detected!");
} else {
Blynk.virtualWrite(V3, 0);
}
}
void checkHomeAutomation() {
// Fan toggle
if (digitalRead(FAN_BUTTON) == LOW) {
fanState = !fanState;
digitalWrite(FAN_LED, fanState);
Serial.println(fanState ? "Fan ON" : "Fan OFF");
delay(300);
}
// Light toggle
if (digitalRead(LIGHT_BUTTON) == LOW) {
lightState = !lightState;
digitalWrite(LIGHT_LED, lightState);
Serial.println(lightState ? "Light ON" : "Light OFF");
delay(300);
}
}
void setup() {
Serial.begin(115200);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(PIR_PIN, INPUT);
pinMode(FAN_LED, OUTPUT);
pinMode(LIGHT_LED, OUTPUT);
pinMode(FAN_BUTTON, INPUT_PULLUP);
pinMode(LIGHT_BUTTON, INPUT_PULLUP);
// Connect to Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
void loop() {
Blynk.run();
unsigned long currentMillis = millis();
if (currentMillis - lastSensorRead >= 2000) {
sendSensorData();
lastSensorRead = currentMillis;
}
if (currentMillis - lastButtonCheck >= 500) {
checkButton();
lastButtonCheck = currentMillis;
}
checkMotion();
checkHomeAutomation();
}Heart Rate Sensor
Blood Pressure Sensor
Fan
Light