#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#include <DHT.h>
#include <BlynkSimpleEsp32.h> // Include Blynk library for ESP32
#define BLYNK_AUTH_TOKEN "n_dSZ89mVEMGnQiCpIw-OHj0P8UkZ9DE"
#define BLYNK_TEMPLATE_ID "TMPL3PuBmJdoX"
#define BLYNK_TEMPLATE_NAME "IOT based smart cattle monitoring"
#define DHTPIN 12
#define HR_PIN 32 // Heart Rate Potentiometer
#define SPO2_PIN 33 // SpO2 Potentiometer
#define PIR_PIN 25
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const char auth[] = BLYNK_AUTH_TOKEN;
const char *ssid = "wokwi-GUEST";
const char *password = "";
BlynkTimer timer;
const int RS = 4, E = 15, DB4 = 5, DB5 = 18, DB6 = 19, DB7 = 21;
LiquidCrystal lcd(RS, E, DB4, DB5, DB6, DB7);
void sendSensorData() {
// Read sensor data
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int pirStatus = digitalRead(PIR_PIN);
int heartRate = map(analogRead(HR_PIN), 0, 4095, 50, 150); // Assuming the heart rate range is from 50 to 150 bpm
int spo2 = map(analogRead(SPO2_PIN), 0, 4095, 70, 100); // Assuming the SpO2 range is from 70% to 100%
// Send sensor data to Blynk app
Blynk.virtualWrite(V5, temperature);
Blynk.virtualWrite(V6, humidity);
Blynk.virtualWrite(V7, pirStatus);
Blynk.virtualWrite(V8, heartRate);
Blynk.virtualWrite(V9, spo2);
}
void setup() {
Serial.begin(115200);
dht.begin();
lcd.begin(16, 2);
Blynk.begin(auth, ssid, pass);
pinMode(HR_PIN, INPUT);
pinMode(SPO2_PIN, INPUT);
pinMode(PIR_PIN, INPUT);
connectWiFi();
}
void loop() {
float temperature = dht.readTemperature(); // Read temperature in Celsius
float humidity = dht.readHumidity(); // Read humidity
int heartRate = map(analogRead(HR_PIN), 0, 4095, 50, 150);
int spo2 = map(analogRead(SPO2_PIN), 0, 4095, 70, 100);
int pirStatus = digitalRead(PIR_PIN);
display(temperature, humidity, heartRate, spo2, pirStatus);
Blynk.run();
timer.run();
delay(2000);
}
void connectWiFi() {
Serial.println("Connecting to WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting...");
}
Serial.println("Connected to WiFi");
Blynk.config(BLYNK_AUTH_TOKEN);
timer.setInterval(1000L, sendSensorData);
}
void display(float temp, float hum, int hr, int spo2, int pir) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temp);
lcd.print("C H:");
lcd.print(hum);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("HR:");
lcd.print(hr);
lcd.print(" SpO2:");
lcd.print(spo2);
lcd.print("% ");
lcd.print("PIR:");
lcd.print(pir);
}