import machine
import utime
import network
import BlynkLib
# Blynk authentication token
BLYNK_AUTH_TOKEN = "gRtjtpng08nTB0rkrVjSFD5LomUn18Km"
# WiFi credentials
WIFI_SSID = "Wokwi-GUEST" # Using Wokwi's guest WiFi
WIFI_PASSWORD = "" # No password for Wokwi-GUEST
# Blynk virtual pins
VIRTUAL_PIN_PULSE = 1
VIRTUAL_PIN_SOUND = 2
VIRTUAL_PIN_STRESS = 3
# Connect to WiFi
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
print("Connecting to WiFi...")
while not wlan.isconnected():
utime.sleep(1)
print("Connected to WiFi:", wlan.ifconfig())
# Initialize WiFi
connect_wifi()
# Initialize Blynk
blynk = BlynkLib.Blynk(BLYNK_AUTH_TOKEN)
# Pulse sensor setup
pulse_pin = machine.ADC(machine.Pin(16)) # Pulse sensor output connected to GP16
# Ultrasonic sensor setup
trigger = machine.Pin(15, machine.Pin.OUT)
echo = machine.Pin(14, machine.Pin.IN)
# Function to read heart rate from the pulse sensor
def read_pulse():
value = pulse_pin.read_u16() # 16-bit ADC value
heart_rate = int((value / 65535) * 180) # Map to realistic BPM range
return heart_rate
# Function to read sound levels using ultrasonic sensor
def read_sound_level():
trigger.low()
utime.sleep_us(2)
trigger.high()
utime.sleep_us(10)
trigger.low()
while echo.value() == 0:
start_time = utime.ticks_us()
while echo.value() == 1:
end_time = utime.ticks_us()
duration = utime.ticks_diff(end_time, start_time)
distance = (duration / 2) / 29.1 # Convert to cm
sound_level = max(0, 1023 - int((distance / 100) * 1023)) # Simulate sound level
return sound_level
# Calculate stress level
def calculate_stress(heart_rate, sound_level):
if heart_rate > 120 or sound_level > 800:
return "High Stress"
elif heart_rate > 90 or sound_level > 600:
return "Moderate Stress"
else:
return "Low Stress"
# Main loop
while True:
blynk.run()
# Read sensor values
heart_rate = read_pulse()
sound_level = read_sound_level()
stress = calculate_stress(heart_rate, sound_level)
# Send data to Blynk
blynk.virtual_write(VIRTUAL_PIN_PULSE, heart_rate)
blynk.virtual_write(VIRTUAL_PIN_SOUND, sound_level)
blynk.virtual_write(VIRTUAL_PIN_STRESS, stress)
# Print sensor readings
print(f"Heart Rate: {heart_rate} BPM, Sound Level: {sound_level}, Stress: {stress}")
utime.sleep(2)