#define BLYNK_PRINT Serial
// Blynk Template Info
#define BLYNK_TEMPLATE_ID "TMPL6fiswaZrb"
#define BLYNK_TEMPLATE_NAME "Healthcare IoT"
#define BLYNK_AUTH_TOKEN "tOdUkWlCorOI8_TgdOGSy5LUwmzyYzzb"
#include <WiFi.h>
#include <Wire.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
// Credentials
char auth[] = "tOdUkWlCorOI8_TgdOGSy5LUwmzyYzzb";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Pin Definitions
#define DHTPIN 4
#define DHTTYPE DHT22
#define LED_PIN 5
#define BUTTON_PIN 13
#define LDR_PIN 32
#define OXYGEN_PIN 33
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variables
double temp;
double hum; // New Humidity variable
int heartRate;
int oxygen;
BlynkTimer timer;
void setup() {
Serial.begin(115200);
dht.begin();
lcd.init();
lcd.backlight();
Blynk.begin(auth, ssid, pass);
timer.setInterval(2000L, sendData);
}
void sendData() {
// Read Sensors
temp = dht.readTemperature();
hum = dht.readHumidity(); // New: Read Humidity
int lightLevel = analogRead(LDR_PIN);
int oxyLevel = analogRead(OXYGEN_PIN);
// Map values
heartRate = map(lightLevel, 0, 4095, 60, 100);
oxygen = map(oxyLevel, 0, 4095, 90, 100);
if (isnan(temp) || isnan(hum)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// LCD Layout (showing 4 values using abbreviations)
// Line 1: Temp and Humidity
lcd.setCursor(0, 0);
lcd.print("T:"); lcd.print((int)temp); lcd.print("C ");
lcd.print("H:"); lcd.print((int)hum); lcd.print("% ");
// Line 2: Heart Rate and Oxygen
lcd.setCursor(0, 1);
lcd.print("HR:"); lcd.print(heartRate);
lcd.print(" Ox:"); lcd.print(oxygen); lcd.print("% ");
// Send to Blynk
Blynk.virtualWrite(V0, temp);
Blynk.virtualWrite(V1, heartRate);
Blynk.virtualWrite(V2, oxygen);
Blynk.virtualWrite(V3, hum); // New: Send Humidity to V3
Serial.println("All Health Data Sent");
}
void loop() {
Blynk.run();
timer.run();
if (temp > 37.0) {
digitalWrite(LED_PIN, HIGH);
} else {
digitalWrite(LED_PIN, LOW);
}
}