Plantower sensors
!!! warning This sensors are 3.3V devices. They require 5V power to operate the laser and fan. However, the I/O pins are not 5V tolerant and the sensor will be damaged by 5V logic.
=== "sensor"
| Sensor | `--sensor-model` | PM1 | PM2.5 | PM10 | size bins | Other |
| --------- | ---------------- | :--------------: | :--------------: | :--------------: | :-------: | ---------------------- |
| PMS1003 | [PMSx003] | :material-check: | :material-check: | :material-check: | 6 | |
| PMS3003 | [PMS3003] | :material-check: | :material-check: | :material-check: | | No passive mode read |
| PMS5003 | [PMSx003] | :material-check: | :material-check: | :material-check: | 6 | |
| PMS5003T | [PMS5003T] | :material-check: | :material-check: | :material-check: | 4 | temp. & rel.hum. |
| PMS5003S | [PMS5003S] | :material-check: | :material-check: | :material-check: | 6 | HCHO concentration |
| PMS5003ST | [PMS5003ST] | :material-check: | :material-check: | :material-check: | 6 | HCHO, temp. & rel.hum. |
| PMS7003 | [PMSx003] | :material-check: | :material-check: | :material-check: | 6 | |
| PMSA003 | [PMSx003] | :material-check: | :material-check: | :material-check: | 6 | |
=== "datasheet"
| Sensor | Datasheet | Dimensions | Connector |
| --------- | ----------------------------- | ------------ | -------------------- |
| PMS1003 | [en][g1_aqmd], [cn][g1_lcsc] | 42x65x23 mm³ | [8 pin](#connector) |
| PMS3003 | [en][g3_aqmon], [cn][g3_lcsc] | 43x50x21 mm³ | [8 pin](#connector) |
| PMS5003 | [en][g5_aqmd], [cn][g5_lcsc] | 38x50x21 mm³ | [8 pin](#connector) |
| PMS5003T | | 38x50x21 mm³ | [8 pin](#connector) |
| PMS5003S | | 38x50x21 mm³ | [8 pin](#connector) |
| PMS5003ST | | 38x50x21 mm³ | [8 pin](#connector) |
| PMS7003 | [cn][g7_lcsc] | 37x48x12 mm³ | [10 pin](#connector) |
| PMSA003 | [cn][gA_lcsc] | | [10 pin](#connector) |
=== "8 pin"
8 pin Molex 1.25mm "PicoBlade" 51021 compatible, found online as 1.25mm JST.
| Pin | Name | Voltage | Function |
| --- | ----- | -------- | ----------------------------- |
| 1 | VCC | 5V |
| 2 | GND | 0V |
| 3 | SET | 3.3V TTL | wake (hight)/sleep (low) mode |
| 4 | RX | 3.3V TTL | serial port |
| 5 | TX | 3.3V TTL | serial port |
| 6 | RESET | 3,3V TTL | reset (low) |
| 7/8 | NC | | not connected |
=== "10 pin"
5x2 1.27mm female header
| Pin | Name | Voltage | Function |
| --- | ----- | -------- | ----------------------------- |
| 1/2 | VCC | 5V |
| 3/4 | GND | 0V |
| 5 | RESET | 3,3V TTL | reset (low) |
| 6 | NC | | not connected |
| 7 | RX | 3.3V TTL | serial port |
| 8 | NC | | not connected |
| 9 | TX | 3.3V TTL | serial port |
| 10 | SET | 3.3V TTL | wake (hight)/sleep (low) mode |
Serial protocol is UART 9600 8N1 :material-alert: 3.3V TTL.
=== "commands"
With the exception of the [PMS3003], all the Plantower PM sensors
can be fully controlled with serial commands:
| Command | Description | `message` |
| -------------- | ------------------------------- | ---------------------- |
| `active_mode` | continuous operation | `42 4D E1 00 01 01 71` |
| `passive_mode` | single-shot operation | `42 4D E1 00 00 01 70` |
| `passive_read` | trigger single-shot measurement | `42 4D E2 00 00 01 71` |
| `sleep` | sleep mode | `42 4D E4 00 00 01 73` |
| `wake` | wake up from sleep mode | `42 4D E4 00 01 01 74` |
=== "message"
Messages containing measurements consist of unsigned short integers.
The last 2 bits of the message should contain `sum(message[:2])`.
| `message` | [PMS3003] | [PMSx003] | [PMS5003T] | [PMS5003S] | [PMS5003ST] |
| --------- | -------------------- | --------------------- | ------------- | ------------- | --------------------- |
| | 24 bits | 32 bits | 32 bits | 32 bits | 40 bits |
| header | 4 bits | 4 bits | 4 bits | 4 bits | 4 bits |
| | `42 4d 00 14` | `42 4d 00 1c` | `42 4d 00 1c` | `42 4d 00 1c` | `42 4d 00 24` |
| body | 18 bits | 26 bits | 26 bits | 26 bits | 34 bits |
| | 6 values, 3 reserved | 12 values, 1 reserved | 13 values | 13 values | 15 values, 2 reserved |
| checksum | 2 bits | 2 bits | 2 bits | 2 bits | 2 bits |
=== "PMS3003"
The message body (`message[4:16]`) contains 6 values:
- raw01, raw25, raw10: cf=1 PM estimates [μg/m³]
- pm01, pm25, pm10: PM1.0, PM2.5, PM10 [μg/m³]
=== "PMSx003"
The message body (`message[4:28]`) contains 12 values:
- raw01, raw25, raw10: cf=1 PM estimates [μg/m³]
- pm01, pm25, pm10: PM1.0, PM2.5, PM10 [μg/m³]
- n0_3, n0_5, n1_0, n2_5, n5_0, n10_0: number of particles under X_Y μm [#/cm³] (raw values [#/100 cm³])
=== "PMS5003T"
The message body (`message[4:28]`) contains 12 values:
- raw01, raw25, raw10: cf=1 PM estimates [μg/m³]
- pm01, pm25, pm10: PM1.0, PM2.5, PM10 [μg/m³]
- n0_3, n0_5, n1_0, n2_5: number of particles under X_Y um [#/cm³] (raw values [#/100 cm³])
- temp: temperature [°C]
- rhum: relative humidity [%]
=== "PMS5003S"
The message body (`message[4:30]`) contains 13 values:
- raw01, raw25, raw10: cf=1 PM estimates [μg/m³]
- pm01, pm25, pm10: PM1.0, PM2.5, PM10 [μg/m³]
- n0_3, n0_5, n1_0, n2_5, n5_0, n10_0: number of particles under X_Y um [#/cm³] (raw values [#/100 cm³])
- HCHO: concentration of formaldehyde [μg/m³]
=== "PMS5003ST"
The message body (`message[4:34]`) contains 15 values:
- raw01, raw25, raw10: cf=1 PM estimates [μg/m³]
- pm01, pm25, pm10: PM1.0, PM2.5, PM10 [μg/m³]
- n0_3, n0_5, n1_0, n2_5, n5_0, n10_0: number of particles under X_Y um [#/cm³] (raw values [#/100 cm³])
- HCHO: concentration of formaldehyde [μg/m³]
- temp: temperature [°C]
- rhum: relative humidity [%]
!!! note This sensors does not support passive mode sampling
=== "info"
About the PMS3003 sensor (`-m PMS3003`)
``` bash
pms -m PMS3003 info
```
``` man
Plantower PMS3003 sensor observations
time measurement time [seconds since epoch]
raw01, raw25, raw10 cf=1 PM estimates [μg/m3]
pm01, pm25, pm10 PM1.0, PM2.5, PM10 [μg/m3]
String formats: pm (default), raw, cf, csv and header
```
=== "serial"
Read 10 samples (`-n 10`), one sample every 10 seconds (`-i 10`)
``` bash
pms -m PMS3003 -n 10 -i 10 serial
```
``` csv
--8<-- "PMS3003.txt"
```
=== "csv"
Print on CSV format (`-f csv`)
``` bash
pms -m PMS3003 -n 10 -i 10 serial -f csv
```
``` csv
--8<-- "PMS3003.csv"
```
=== "hexdump"
Print on hexdump format (`-f hexdump`)
``` bash
pms -m PMS3003 -n 10 -i 10 serial -f hexdump
```
``` hexdump
--8<-- "PMS3003.hexdump"
```
=== "info"
About the sensors supported by the PMSx003 protocol (`-m PMSx003`)
``` bash
pms -m PMSx003 info
```
``` man
Plantower PMS1003, PMS5003, PMS7003 and PMSA003 sensor observations
time measurement time [seconds since epoch]
raw01, raw25, raw10 cf=1 PM estimates [μg/m3]
pm01, pm25, pm10 PM1.0, PM2.5, PM10 [μg/m3]
n0_3, n0_5, n1_0, n2_5, n5_0, n10_0 number concentrations over X.Y um [#/cm3]
String formats: pm (default), raw, cf, num, csv and header
```
=== "serial"
Read 10 samples (`-n 10`), one sample every 10 seconds (`-i 10`)
``` bash
pms -m PMSx003 -n 10 -i 10 serial
```
``` csv
--8<-- "PMSx003.txt"
```
=== "csv"
Print on CSV format (`-f csv`)
``` bash
pms -m PMSx003 -n 10 -i 10 serial -f csv
```
``` csv
--8<-- "PMSx003.csv"
```
=== "hexdump"
Print on hexdump format (`-f hexdump`)
``` bash
pms -m PMSx003 -n 10 -i 10 serial -f hexdump
```
``` hexdump
--8<-- "PMSx003.hexdump"
```
=== "info"
About the PMS5003T sensor (`-m PMS5003T`)
``` bash
pms -m PMS5003T info
```
``` man
Plantower PMS5003T sensor observations
time measurement time [seconds since epoch]
raw01, raw25, raw10 cf=1 PM estimates [μg/m3]
pm01, pm25, pm10 PM1.0, PM2.5, PM10 [μg/m3]
n0_3, n0_5, n1_0, n2_5 number concentrations over X.Y um [#/cm3]
temp temperature [°C]
rhum relative humidity [%]
String formats: pm (default), raw, cf, num, atm, csv and header
```
=== "serial"
Read 10 samples (`-n 10`), one sample every 10 seconds (`-i 10`)
``` bash
pms -m PMS5003T -n 10 -i 10 serial
```
``` csv
--8<-- "PMS5003T.txt"
```
=== "csv"
Print on CSV format (`-f csv`)
``` bash
pms -m PMS5003T -n 10 -i 10 serial -f csv
```
``` csv
--8<-- "PMS5003T.csv"
```
=== "hexdump"
Print on hexdump format (`-f hexdump`)
``` bash
pms -m PMS5003T -n 10 -i 10 serial -f hexdump
```
``` hexdump
--8<-- "PMS5003T.hexdump"
```
=== "info"
About the PMS5003S sensor (`-m PMS5003S`)
``` bash
pms -m PMS5003S info
```
``` man
Plantower PMS5003S sensor observations
time measurement time [seconds since epoch]
raw01, raw25, raw10 cf=1 PM estimates [μg/m3]
pm01, pm25, pm10 PM1.0, PM2.5, PM10 [μg/m3]
n0_3, n0_5, n1_0, n2_5, n5_0, n10_0 number concentrations over X.Y um [#/cm3]
HCHO formaldehyde concentration [mg/m3]
String formats: pm (default), raw, cf, num, hcho, csv and header
```
=== "serial"
Read 10 samples (`-n 10`), one sample every 10 seconds (`-i 10`)
``` bash
pms -m PMS5003S -n 10 -i 10 serial
```
``` csv
--8<-- "PMS5003S.txt"
```
=== "csv"
Print on CSV format (`-f csv`)
``` bash
pms -m PMS5003S -n 10 -i 10 serial -f csv
```
``` csv
--8<-- "PMS5003S.csv"
```
=== "hexdump"
Print on hexdump format (`-f hexdump`)
``` bash
pms -m PMS5003S -n 10 -i 10 serial -f hexdump
```
``` hexdump
--8<-- "PMS5003S.hexdump"
```
=== "info"
About the PMS5003ST sensor (`-m PMS5003ST`)
``` bash
pms -m PMS5003ST info
```
``` man
Plantower PMS5003ST sensor observations
time measurement time [seconds since epoch]
raw01, raw25, raw10 cf=1 PM estimates [μg/m3]
pm01, pm25, pm10 PM1.0, PM2.5, PM10 [μg/m3]
n0_3, n0_5, n1_0, n2_5, n5_0, n10_0 number concentrations over X.Y um [#/cm3]
HCHO formaldehyde concentration [mg/m3]
temp temperature [°C]
rhum relative humidity [%]
String formats: pm (default), raw, cf, num, hcho, atm, csv and header
```
=== "serial"
Read 10 samples (`-n 10`), one sample every 10 seconds (`-i 10`)
``` bash
pms -m PMS5003ST -n 10 -i 10 serial
```
``` csv
--8<-- "PMS5003ST.txt"
```
=== "csv"
Print on CSV format (`-f csv`)
``` bash
pms -m PMS5003ST -n 10 -i 10 serial -f csv
```
``` csv
--8<-- "PMS5003ST.csv"
```
=== "hexdump"
Print on hexdump format (`-f hexdump`)
``` bash
pms -m PMS5003ST -n 10 -i 10 serial -f hexdump
```
``` hexdump
--8<-- "PMS5003ST.hexdump"
```