Can't read PMS5003 Sensor data

Hey there,
for measuring particulate matter in ambient air, I recently purchased an Plantower PMS5003 Air Quality Sensor and connected it with my Arduino MEGA2560. I wired the hardware according to Interfacing PMS5003 PM2.5 Air Quality Sensor with Arduino and uploaded the following code:

`/* Test sketch for Adafruit PM2.5 sensor with UART or I2C */

#include "Adafruit_PM25AQI.h"

// If your PM2.5 is UART only, for UNO and others (without hardware serial) 
// we must use software serial...
// pin #2 is IN from sensor (TX pin on sensor), leave pin #3 disconnected
// comment these two lines if using hardware serial
#include <SoftwareSerial.h>
SoftwareSerial pmSerial(2, 3);

Adafruit_PM25AQI aqi = Adafruit_PM25AQI();

void setup() {
  // Wait for serial monitor to open
  Serial.begin(115200);
  while (!Serial) delay(10);

  Serial.println("Adafruit PMSA003I Air Quality Sensor");

  // Wait one second for sensor to boot up!
  delay(1000);

  // If using serial, initialize it and set baudrate before starting!
  // Uncomment one of the following
  //Serial1.begin(9600);
  pmSerial.begin(9600);

  // There are 3 options for connectivity!
  //if (! aqi.begin_I2C()) {      // connect to the sensor over I2C
  //if (! aqi.begin_UART(&Serial1)) { // connect to the sensor over hardware serial
  if (! aqi.begin_UART(&pmSerial)) { // connect to the sensor over software serial 
    Serial.println("Could not find PM 2.5 sensor!");
    while (1) delay(10);
  }

  Serial.println("PM25 found!");
}

void loop() {
  PM25_AQI_Data data;
  
  if (! aqi.read(&data)) {
    Serial.println("Could not read from AQI");
    delay(500);  // try again in a bit!
    return;
  }
  Serial.println("AQI reading success");

  Serial.println();
  Serial.println(F("---------------------------------------"));
  Serial.println(F("Concentration Units (standard)"));
  Serial.println(F("---------------------------------------"));
  Serial.print(F("PM 1.0: ")); Serial.print(data.pm10_standard);
  Serial.print(F("\t\tPM 2.5: ")); Serial.print(data.pm25_standard);
  Serial.print(F("\t\tPM 10: ")); Serial.println(data.pm100_standard);
  Serial.println(F("Concentration Units (environmental)"));
  Serial.println(F("---------------------------------------"));
  Serial.print(F("PM 1.0: ")); Serial.print(data.pm10_env);
  Serial.print(F("\t\tPM 2.5: ")); Serial.print(data.pm25_env);
  Serial.print(F("\t\tPM 10: ")); Serial.println(data.pm100_env);
  Serial.println(F("---------------------------------------"));
  Serial.print(F("Particles > 0.3um / 0.1L air:")); Serial.println(data.particles_03um);
  Serial.print(F("Particles > 0.5um / 0.1L air:")); Serial.println(data.particles_05um);
  Serial.print(F("Particles > 1.0um / 0.1L air:")); Serial.println(data.particles_10um);
  Serial.print(F("Particles > 2.5um / 0.1L air:")); Serial.println(data.particles_25um);
  Serial.print(F("Particles > 5.0um / 0.1L air:")); Serial.println(data.particles_50um);
  Serial.print(F("Particles > 10 um / 0.1L air:")); Serial.println(data.particles_100um);
  Serial.println(F("---------------------------------------"));
  

  delay(1000);
}`

I used the commands necessary for an UART connection. The serial monitor showed that the board finds the sensor but it cannot read the data from it. The monitor displays "Could not read from AQI". Therefore i just want to ask if i should use another connection method (I2C?) or if there is something wrong with my sensor/code?
Hope there is someone who can help me. Thanks in advance

Don't use SoftwareSerial on a Mega. Use one of the other hardware serial ports instead (there are three others), and wire the sensor to the appropriate pins.

Best to follow the Adafruit getting started guide, rather than some random blog found on the web.

thanks @jremington, i connected the sensor to the 0 and 1 PIN and commented the Softwareserial lines. Still didn't work. Couldn't upload my code to the MEGA while the sensor was connected. Read about it in the forum and just connected the sensor after uploading the code to the MEGA. Now it works, but i have no idea why i have to connect the sensor to the PINS after I uploaded the code to the board. Any explanations?

No surprise there, you are blocking the upload serial port. Use one of the three other hardware serial ports. See post #2.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.