Enviro Plus and PMS5003

Trying to rebuild my air quality sensors because this summer sucks :(

I can’t get my PMS5003 sensor to talk to my RPi using the Enviro+ board.

The error I get is as follows:

pi@raspberrypi:~ $ /bin/python /home/pi/enviroplus-python/examples/particulates.py
2023-07-10 17:39:49.493 INFO     particulates.py - Print readings from the PMS5003 particulate sensor.

Press Ctrl+C to exit!

Traceback (most recent call last):
  File "/home/pi/enviroplus-python/examples/particulates.py", line 24, in <module>
    readings = pms5003.read()
  File "/usr/local/lib/python3.9/dist-packages/pms5003/__init__.py", line 127, in read
    raise SerialTimeoutError("PMS5003 Read Timeout: Failed to read start of frame byte")
pms5003.SerialTimeoutError: PMS5003 Read Timeout: Failed to read start of frame byte

I think I set all the serial settings up as needed and when I run check-install.py everything checks out.

pi@raspberrypi:~/enviroplus-python $ python3 check-install.py 
Checking Enviro+ install, please wait...

System dependencies...
  Retrieving cache...
  Checking for python3             ✅
  Checking for python3-spidev      ✅
  Checking for python3-cffi        ✅
  Checking for libportaudio2       ✅
  Checking for python3-pil         ✅
  Checking for python3-smbus       ✅
  Checking for python3-pip         ✅
  Checking for python3-rpi.gpio    ✅
  Checking for python3-numpy       ✅

Python dependencies...
  Checking for bme280              ✅
  Checking for pms5003             ✅
  Checking for ltr559              ✅
  Checking for ST7735              ✅
  Checking for ads1015             ✅
  Checking for fonts               ✅
  Checking for font_roboto         ✅
  Checking for astral              ✅
  Checking for pytz                ✅
  Checking for sounddevice         ✅
  Checking for paho.mqtt           ✅

System config...
  Checking for dtoverlay=pi3-miniuart-bt in /boot/config.txt: ✅
  Checking for dtoverlay=adau7002-simple in /boot/config.txt: ✅
  Checking for enable_uart=1 in /boot/config.txt: ✅
  Checking for dtparam=spi=on in /boot/config.txt: ✅
  Checking for dtparam=i2c_arm=on in /boot/config.txt: ✅

✅  Looks good from here!

Have you?
  • Rebooted after installing
  • Made sure to run examples with "python3"
  • Checked for any errors when running "sudo ./install.sh"

The error seems to indicate a lack of connection, I’ve tried a few things like swapping the sensor out, waiting for it to run for a bit before running the code etc…the fan in the PMS5003 is running but not sending data.

The fact is that I had this running last year and wiped my pi (my bad), I seem to remember there was either a missing dependency or something to do with the pin_enable and pin_reset values but for the life of me I can’t figure out what.

1 Like

Seems like I am in a similar situation. I was running this code successfully in ~2021 and have since then wiped my rpi and have recently tried to run this code again. I even used a new board I had and purchased a new sensor… no luck. SerialTimeoutError in example particulates code · Issue #18 · pimoroni/pms5003-python · GitHub

1 Like

Same here (fresh install on a kit from 2020) - glad I didn’t replace the PM sensor, seems like it’s not that that is the issue. I don’t have the skills to fix unfortunately, will watch this thread hopefully.

How did you connect the PMS5003? The breakout from Pimoroni uses very strange labeling: in contrast to what the rest of the world does, you have to connect RX to RX and TX to TX to make it work.