Remove inappropriate sleep between reads
authorSam Birch <mail@worldofsam.com>
Mon, 9 Dec 2019 08:55:42 +0000 (21:55 +1300)
committerGitHub <noreply@github.com>
Mon, 9 Dec 2019 08:55:42 +0000 (21:55 +1300)
The PMS5003 seems to buffer unread samples. If you are reading at a lower rate than it takes readings, then a progressively larger delay will occur between changes in actual PM levels and indicated PM levels.

To see the issue:
1) run this example with the `time.sleep(1)` *included*
2) wait a few minutes
3) burn a piece of paper near the sensor and wait for the reported PM levels to spike

With the sleep included, there is a delay between introducing smoke and seeing reported levels rise (often a few minutes or longer). With the sleep removed you will see reported levels update almost immediately.

The correct way to use the sensor is to read as fast as the sensor allows, and not make any assumptions about what rate samples will be published at

examples/particulates.py

index 9aa9c37814a0bc3f6d34bf03f1df52d58fa3408f..c1b3c6774a25eb22fa2579820a22d5f6db53da21 100755 (executable)
@@ -23,7 +23,6 @@ try:
         try:
             readings = pms5003.read()
             logging.info(readings)
         try:
             readings = pms5003.read()
             logging.info(readings)
-            time.sleep(1.0)
         except ReadTimeoutError:
             pms5003 = PMS5003()
 except KeyboardInterrupt:
         except ReadTimeoutError:
             pms5003 = PMS5003()
 except KeyboardInterrupt: