

The PLANTOWER PMS7003 is a high-precision laser-based air quality sensor designed to measure particulate matter (PM) concentrations in the air. It can detect PM1.0, PM2.5, and PM10 particles, providing real-time data on air pollution levels. The sensor uses laser scattering technology to achieve accurate and reliable measurements, making it ideal for applications such as indoor air quality monitoring, outdoor environmental monitoring, air purifiers, HVAC systems, and IoT-based air quality solutions.








The following table outlines the key technical specifications of the PMS7003 sensor:
| Parameter | Value |
|---|---|
| Manufacturer | Plantower |
| Part Number | PMS7003 |
| Measurement Range | 0.3 µm to 10 µm (particle size) |
| PM Concentration Range | 0 to 1,000 µg/m³ |
| Accuracy | ±10% (standard particles) |
| Response Time | ≤ 1 second |
| Operating Voltage | 4.5V to 5.5V |
| Operating Current | ≤ 100mA |
| Interface | UART (3.3V TTL) |
| Operating Temperature | -10°C to 60°C |
| Operating Humidity | 0% to 99% RH (non-condensing) |
| Dimensions | 50mm x 38mm x 21mm |
| Weight | ~50g |
The PMS7003 sensor has an 8-pin connector. The pin configuration and descriptions are as follows:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | VCC | Power supply input (4.5V to 5.5V) |
| 2 | GND | Ground |
| 3 | SET | Sleep mode control (Low: Sleep, High: Active) |
| 4 | RX | UART Receive (3.3V TTL) |
| 5 | TX | UART Transmit (3.3V TTL) |
| 6 | RESET | Reset signal (Low: Reset, High: Normal operation) |
| 7 | NC | Not connected |
| 8 | NC | Not connected |
Below is an example of how to interface the PMS7003 with an Arduino UNO:
#include <SoftwareSerial.h>
// Define RX and TX pins for SoftwareSerial
SoftwareSerial pms7003Serial(10, 11); // RX = Pin 10, TX = Pin 11
// Buffer to store incoming data
uint8_t dataBuffer[32];
void setup() {
Serial.begin(9600); // Initialize Serial Monitor
pms7003Serial.begin(9600); // Initialize PMS7003 UART communication
Serial.println("PMS7003 Sensor Initialization...");
}
void loop() {
if (pms7003Serial.available() >= 32) {
// Read 32 bytes of data from the sensor
for (int i = 0; i < 32; i++) {
dataBuffer[i] = pms7003Serial.read();
}
// Validate the data frame (check start and checksum)
if (dataBuffer[0] == 0x42 && dataBuffer[1] == 0x4D) {
uint16_t pm1_0 = (dataBuffer[10] << 8) | dataBuffer[11];
uint16_t pm2_5 = (dataBuffer[12] << 8) | dataBuffer[13];
uint16_t pm10 = (dataBuffer[14] << 8) | dataBuffer[15];
// Print PM values to Serial Monitor
Serial.print("PM1.0: ");
Serial.print(pm1_0);
Serial.print(" µg/m³, PM2.5: ");
Serial.print(pm2_5);
Serial.print(" µg/m³, PM10: ");
Serial.print(pm10);
Serial.println(" µg/m³");
}
}
}
No Data Output:
Incorrect or Fluctuating Readings:
Sensor Not Responding:
Q1: Can the PMS7003 detect gases like CO2 or VOCs?
A1: No, the PMS7003 is designed to measure particulate matter (PM1.0, PM2.5, PM10) and does not detect gases like CO2 or VOCs.
Q2: How often should the sensor be calibrated?
A2: The PMS7003 is factory-calibrated and does not require user calibration. However, periodic cleaning of the air inlet and outlet may help maintain accuracy.
Q3: Can the sensor operate outdoors?
A3: Yes, but it should be protected from direct exposure to rain, high humidity, and extreme temperatures.
Q4: What is the lifespan of the PMS7003 sensor?
A4: The sensor has an estimated lifespan of 3 years under normal operating conditions.