raspberry pi
raspberry pi
import time
# Register addresses
REG_INT_STATUS = 0x00
REG_MODE_CONFIG = 0x09
REG_SPO2_CONFIG = 0x0A
REG_LED_CONFIG = 0x0C
REG_FIFO_WR_PTR = 0x04
REG_FIFO_RD_PTR = 0x06
REG_FIFO_DATA = 0x07
# Initialize I2C
bus = smbus2.SMBus(1) # 1 indicates /dev/i2c-1
def read_register(reg):
return bus.read_byte_data(MAX30105_I2C_ADDR, reg)
def reset_sensor():
write_register(REG_MODE_CONFIG, 0x40) # Reset command
time.sleep(0.1)
def setup_sensor():
reset_sensor()
write_register(REG_MODE_CONFIG, 0x03) # Heart rate + SpO2 mode
write_register(REG_SPO2_CONFIG, 0x27) # ADC range, sample rate
write_register(REG_LED_CONFIG, 0x24) # LED1 & LED2 pulse amplitude
def read_fifo():
red_data = bus.read_i2c_block_data(MAX30105_I2C_ADDR, REG_FIFO_DATA, 6)
red = (red_data[0] << 16) | (red_data[1] << 8) | red_data[2]
ir = (red_data[3] << 16) | (red_data[4] << 8) | red_data[5]
return red & 0x3FFFF, ir & 0x3FFFF # 18-bit values
# Main loop
setup_sensor()
print("Reading MAX30105 data...")
try:
while True:
red, ir = read_fifo()
print(f"Red: {red}, IR: {ir}")
time.sleep(0.5)
except KeyboardInterrupt:
print("Exiting...")
bus.close()
____________________________________________________________________________________________
import time
from sensirion_i2c_driver import I2cConnection
from sensirion_i2c_scd4x import Scd4xI2cDevice
import smbus2
while True:
time.sleep(5)
____________________________________________________________________________________________
import time
import board
import busio
import adafruit_mpl3115a2
except KeyboardInterrupt:
print("Exiting...")
break
____________________________________________________________________________________________
Hardware Setup:
● MQ-135 Sensor has 4 pins: VCC (5V), GND, AOUT (analog output), and DOUT (digital output).
● Raspberry Pi GPIO pins will be used to read the sensor's output.
Connection Details:
Additional Requirement:
● MCP3008 ADC to read the analog values from the MQ-135 sensor since the Raspberry Pi
does not have analog input.
Code:
import spidev
import time
import RPi.GPIO as GPIO
if sensor_value == -1:
print("Failed to read data from sensor.")
return
# The sensor's value may need calibration to convert to real air quality levels.
# This formula depends on your MQ-135 calibration and datasheet.