/Sensirion_SPS30

Python script to read multiple fine particles (PM1 to PM10) from Sensirion SPS30. The script can work with multiple devices connected to USB hub

Primary LanguagePythonMIT LicenseMIT

Sensirion_SPS30

Python script to read multiple fine particles (PM1 to PM10) from Sensirion SPS30. The script can work with multiple devices connected to USB hub

Set up

  • Communication via UART with a SLAB CP2102 adapter
  • For the pin, refer the SPS30 datasheet stored here or on SparkFun
  • Connect pin TX (on USB adapter) to RX pin (on SPS30)

Run

  • if you have all SPS30 connected to USB hub, then you can run all devices by
    usbs = get_usb()
    print(usbs)
    process = list()
    for port in usbs:
        p = SPS30(port=port, push_mqtt=True)
        process.append(p)
    print('Starting')
    while True:
        for p in process:
            p.run_query()
  • if you want to specify then manually goes through each port and make an instance for each device like this:
  s1 = SPS30(port='/dev/ttyUSB0')
  s2 = SPS30(port='/dev/ttyUSB3')
  while True:
      for p in [s1,s2]:
          p.run_query()

  • data is logged into CSV file by default, to only read the CSV on terminal then set save_data=False like this:
  s1 = SPS30(port='/dev/ttyUSB0', save_data=False)
  • in addition, if you want to push data to MQTT server, than config the details:
# MQTT host, users
mqtt = '192.168.1.100'  # change this
topic = 'sensor/sps30' # and this
auth = {'username': 'mqtt_user', 'password': 'mqtt_password'} # and these two
  • and specify the this option:
p = SPS30(port=port, push_mqtt=False)

Data analysis

  • analyze data by each sensor using different moving average (to smooth out the data)

- or plot PM1 to PM10

- or to compare several sensors at one (in which this script is very useful)

- or to simpify by only the mean and standard deviation from multiple sensors

Credit

The core of Python Inteface with SPS30 was forked from feyzikesim