#define BLYNK_TEMPLATE_ID "TMPL3RknGP_U7"
#define BLYNK_TEMPLATE_NAME "ESP32"
#define BLYNK_AUTH_TOKEN "o7N48Q-9vJ2e1uvai6qjzaNEUfsORyFt"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <Wire.h>
#include <RTClib.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define DHTPIN 4
#define DHTTYPE DHT22
#define BUTTON_PIN 15
#define LED_PIN 2
#define BUZZER_PIN 18
DHT dht(DHTPIN, DHTTYPE);
RTC_DS1307 rtc;
BlynkTimer timer;
int inhalerCount = 0;
bool lastButtonState = HIGH;
void sendData()
{
float temp = dht.readTemperature();
float hum = dht.readHumidity();
if (!isnan(temp))
Blynk.virtualWrite(V1, temp);
if (!isnan(hum))
Blynk.virtualWrite(V2, hum);
Blynk.virtualWrite(V0, inhalerCount);
}
void checkButton()
{
bool state = digitalRead(BUTTON_PIN);
if (lastButtonState == HIGH && state == LOW)
{
inhalerCount++;
digitalWrite(LED_PIN, HIGH);
tone(BUZZER_PIN, 1000, 300);
Blynk.virtualWrite(V0, inhalerCount);
if (inhalerCount >= 6)
{
Blynk.logEvent("dose_limit",
"Daily inhaler limit reached!");
}
delay(300);
digitalWrite(LED_PIN, LOW);
}
lastButtonState = state;
}
void setup()
{
Serial.begin(115200);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
dht.begin();
Wire.begin();
rtc.begin();
Blynk.begin(auth, ssid, pass);
timer.setInterval(2000L, sendData);
timer.setInterval(100L, checkButton);
}
void loop()
{
Blynk.run();
timer.run();
}