import smbus2 import time # MAX30102 I2C address MAX30102_ADDR = 0x57 # Registers REG_INTR_STATUS_1 = 0x00 REG_FIFO_DATA = 0x07 REG_MODE_CONFIG = 0x09 REG_SPO2_CONFIG = 0x0A REG_LED1_PA = 0x0C REG_LED2_PA = 0x0D bus = smbus2.SMBus(1) # RPi I2C bus 1 # Reset and Setup bus.write_byte_data(MAX30102_ADDR, REG_MODE_CONFIG, 0x40) # Reset time.sleep(0.1) bus.write_byte_data(MAX30102_ADDR, REG_MODE_CONFIG, 0x03) # Heart Rate + SpO2 mode bus.write_byte_data(MAX30102_ADDR, REG_SPO2_CONFIG, 0x27) # 411us pulse, 100 samples/sec bus.write_byte_data(MAX30102_ADDR, REG_LED1_PA, 0x24) # Red LED current bus.write_byte_data(MAX30102_ADDR, REG_LED2_PA, 0x24) # IR LED current print("Reading Raw Data (Red/IR)... Press Ctrl+C to stop") try: while True: # Read 6 bytes from FIFO (3 for Red, 3 for IR) data = bus.read_i2c_block_data(MAX30102_ADDR, REG_FIFO_DATA, 6) red = (data[0] << 16 | data[1] << 8 | data[2]) & 0x3FFFF ir = (data[3] << 16 | data[4] << 8 | data[5]) & 0x3FFFF print(f"RED: {red}, IR: {ir}") time.sleep(0.05) except Exception as e: print(f"Error: {e}") finally: bus.close()