import time
import csv
from datetime import datetime
import board
import busio
import adafruit_mlx90614
import max30102
import RPi.GPIO as GPIO
import pandas as pd
# Setup I2C for MLX90614 (Temperature)
i2c = busio.I2C(board.SCL, board.SDA)
mlx = adafruit_mlx90614.MLX90614(i2c)
# Setup MAX30102 (Heart rate + SpO2)
m = max30102.MAX30102()
# Setup AD8232 (ECG)
ECG_PIN = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(ECG_PIN, GPIO.IN)
# Create CSV file
filename = f"sensor_data_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"
header = ["Timestamp", "Temperature (°C)", "Heart Rate (bpm)", "SpO2 (%)", "ECG Signal"]
rows = []
print("Collecting sensor data... Press Ctrl+C to stop.")
try:
while True:
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
# Read from MLX90614
temp = round(mlx.object_temperature, 2)
# Read from MAX30102
hr, spo2 = m.read_sequential() # Get multiple readings
heart_rate = round(hr[-1], 2) if hr else None
spo2_val = round(spo2[-1], 2) if spo2 else None
# Read from AD8232 (Digital on/off ECG signal)
ecg_signal = GPIO.input(ECG_PIN)
# Store row
row = [timestamp, temp, heart_rate, spo2_val, ecg_signal]
rows.append(row)
print(row)
time.sleep(1)
except KeyboardInterrupt:
print("\nStopped. Saving to Excel...")
# Save data to Excel-compatible .csv
df = pd.DataFrame(rows, columns=header)
df.to_csv(filename, index=False)
print(f"Data saved to {filename}")
finally:
GPIO.cleanup()