Not a member of GistPad yet?
Sign Up,
it unlocks many cool features!
- 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()
RAW Paste Data
Copied
