I want to try match air quality sensors if is it possible help me

HI I try to use pms5003 and bme680 and SD card together but it has error .I am a environmental engineering and unfortunately i have never use Arduino :smiling_face_with_tear:
is there anyone who helps me?

Blockquote


//spi
//#include <SPI.h>

//sd card
#include <SD.h>

#include <Adafruit_BusIO_Register.h>
#include <Adafruit_I2CDevice.h>
#include <Adafruit_I2CRegister.h>
#include <Adafruit_SPIDevice.h>

//pms5003
#include <SoftwareSerial.h>
SoftwareSerial pmsSerial(2, 3);
//bme680
#include <Adafruit_BME680.h>
#include <bme68x.h>
#include <bme68x_defs.h>

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"
File dataFile;
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME680 bme; // I2C
//Adafruit_BME680 bme(BME_CS); // hardware SPI
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);

 


void setup()
{
 Serial.begin(9600);
  while (!Serial)
    ; // wait for serial port to connect. Needed for native USB port only
  Serial.print("Initializing SD card...");
   if (!SD.begin()) 
  {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
  delay(2000);
  pmsSerial.begin(9600);  
  bme.begin(9600);
   
  // Set up oversampling and filter initialization
  bme.setTemperatureOversampling(BME680_OS_8X);
  bme.setHumidityOversampling(BME680_OS_2X);
  bme.setPressureOversampling(BME680_OS_4X);
  bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
  bme.setGasHeater(320, 150); // 320*C for 150 ms
struct pms5003data {
  uint16_t framelen;
  uint16_t pm10_standard, pm25_standard, pm100_standard;
  uint16_t pm10_env, pm25_env, pm100_env;
  uint16_t particles_03um, particles_05um, particles_10um, particles_25um, particles_50um, particles_100um;
  uint16_t unused;
  uint16_t checksum;
  
};

struct pms5003data data;
    
uint16_t line = 1;
 
void loop() {
  delay(1000);
  float temperature = bme.temperature;
  float pressure = bme.pressure / 100.0;
  float altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
  float humidity = bme.humidity;
  float gas = bme.gas_resistance / 1000.0;
  double dewPoint = dewPointFast(temperature, humidity);
  
  dataFile = SD.open("airquality.txt", FILE_WRITE);
  
  // if the file opened okay, write to it:
  if (dataFile) 
  {
    // reading data was successful!
    Serial.println();
    Serial.println("---------------------------------------");
    Serial.println("Concentration Units (standard)");
    Serial.print("PM 1.0: "); Serial.print(data.pm10_standard);
    Serial.print("\t\tPM 2.5: "); Serial.print(data.pm25_standard);
    Serial.print("\t\tPM 10: "); Serial.println(data.pm100_standard);
    Serial.println("---------------------------------------");
    Serial.println("Concentration Units (environmental)");
    Serial.print("PM 1.0: "); Serial.print(data.pm10_env);
    Serial.print("\t\tPM 2.5: "); Serial.print(data.pm25_env);
    Serial.print("\t\tPM 10: "); Serial.println(data.pm100_env);
    Serial.println("---------------------------------------");
    Serial.print("Particles > 0.3um / 0.1L air:"); Serial.println(data.particles_03um);
    Serial.print("Particles > 0.5um / 0.1L air:"); Serial.println(data.particles_05um);
    Serial.print("Particles > 1.0um / 0.1L air:"); Serial.println(data.particles_10um);
    Serial.print("Particles > 2.5um / 0.1L air:"); Serial.println(data.particles_25um);
    Serial.print("Particles > 5.0um / 0.1L air:"); Serial.println(data.particles_50um);
    Serial.print("Particles > 10.0 um / 0.1L air:"); Serial.println(data.particles_100um);
    Serial.println("---------------------------------------");

    //bme680
    Serial.print("Temperature = ");
    Serial.print(temperature);
    Serial.println(" *C");
 
    Serial.print("Pressure = ");
    Serial.print(pressure);
    Serial.println(" hPa");
 
    Serial.print("Humidity = ");
    Serial.print(humidity);
    Serial.println(" %");
 
    Serial.print("Dew Point = ");
    Serial.print(dewPoint);
    Serial.println(" *C");
 
    Serial.print("Approx. Altitude = ");
    Serial.print(altitude);
    Serial.println(" m");
 
    Serial.print("Gas = ");
    Serial.print(gas);
    Serial.println(" KOhms");
 
  
 
  Serial.println();
       // Write data to SD card file (DHT11Log.txt)
    //pms5003
        Serial.println();
    dataFile.println("---------------------------------------"++);
    dataFile.println("Concentration Units (standard)");
    dataFile.print("PM 1.0: "); Serial.print(data.pm10_standard);
    dataFile.print("\t\tPM 2.5: "); Serial.print(data.pm25_standard);
    dataFile.print("\t\tPM 10: "); Serial.println(data.pm100_standard);
    dataFile.println("---------------------------------------");
    dataFile.println("Concentration Units (environmental)");
    dataFile.print("PM 1.0: "); Serial.print(data.pm10_env);
    dataFile.print("\t\tPM 2.5: "); Serial.print(data.pm25_env);
    dataFile.print("\t\tPM 10: "); Serial.println(data.pm100_env);
    dataFile.println("---------------------------------------");
    dataFile.print("Particles > 0.3um / 0.1L air:"); Serial.println(data.particles_03um);
    dataFile.print("Particles > 0.5um / 0.1L air:"); Serial.println(data.particles_05um);
    dataFile.print("Particles > 1.0um / 0.1L air:"); Serial.println(data.particles_10um);
    dataFile.print("Particles > 2.5um / 0.1L air:"); Serial.println(data.particles_25um);
    dataFile.print("Particles > 5.0um / 0.1L air:"); Serial.println(data.particles_50um);
    dataFile.print("Particles > 10.0 um / 0.1L air:"); Serial.println(data.particles_100um);
    dataFile.println("---------------------------------------");
 //bme680
    dataFile.print("Temperature = ");
    dataFile.print(temperature);
    dataFile.println(" *C");
 
    dataFile.print("Pressure = ");
    dataFile.print(pressure);
    dataFile.println(" hPa");
 
    dataFile.print("Humidity = ");
    dataFile.print(humidity);
    dataFile.println(" %");
 
    dataFile.print("Dew Point = ");
    dataFile.print(dewPoint);
    dataFile.println(" *C");
 
    dataFile.print("Approx. Altitude = ");
    dataFile.print(altitude);
    dataFile.println(" m");
 
    dataFile.print("Gas = ");
    dataFile.print(gas);
    dataFile.println(" KOhms");
    dataFile.close();
    
  }
  // if the file didn't open, print an error:
  else
    Serial.println("error opening DHT11Log.txt");
}


what is the error?
do the devices all work OK when used in seperate programs?

The error is in this word "void loop() {". All module work separately, but apparently there is a problem in the code

Please include the entire error message. It is easy to do. There is a button (lower right of the IDE window) called "copy error message". Copy the error and paste into a post in code tags. Paraphrasing the error message leaves out important information.

Arduino: 1.8.19 (Windows 10), Board: "Arduino Uno"

C:\Users\RAYANG~1\AppData\Local\Temp\arduino_modified_sketch_939367\Advanced.ino: In function 'void setup()':

Advanced:74:13: error: a function-definition is not allowed here before '{' token

void loop() {

         ^

Advanced:188:1: error: expected '}' at end of input

}

^

exit status 1

a function-definition is not allowed here before '{' token

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Where is the } to close the setup() function?

What Arduino board are you using?

uno

its at the end of codes!!
is it wrong?

Yes, you need to close the setup function before the start of the loop() function and before the global definition of the pms5003data struct.

  bme.setPressureOversampling(BME680_OS_4X);
   bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
   bme.setGasHeater(320, 150); // 320*C for 150 ms
} // inserted missing } to close the setup() function.

struct pms5003data
{
   uint16_t framelen;

thanks for your help but now it has another error :sob: i cant do that

//spi
//#include <SPI.h>


//sd card
#include <SD.h>

#include <Adafruit_BusIO_Register.h>
#include <Adafruit_I2CDevice.h>
#include <Adafruit_I2CRegister.h>
#include <Adafruit_SPIDevice.h>

//pms5003
#include <SoftwareSerial.h>
SoftwareSerial pmsSerial(2, 3);
//bme680
#include <Adafruit_BME680.h>
#include <bme68x.h>
#include <bme68x_defs.h>

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"
File dataFile;
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME680 bme; // I2C
//Adafruit_BME680 bme(BME_CS); // hardware SPI
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);

 


void setup()
{

 
 Serial.begin(9600);
  while (!Serial)
    ; // wait for serial port to connect. Needed for native USB port only
  Serial.print("Initializing SD card...");
   if (!SD.begin()) 
  {
    Serial.println("initialization failed!");
    while (1);
  }
  Serial.println("initialization done.");
  delay(2000);
  pmsSerial.begin(9600);  
  bme.begin(9600);
   
  // Set up oversampling and filter initialization
  bme.setTemperatureOversampling(BME680_OS_8X);
  bme.setHumidityOversampling(BME680_OS_2X);
  bme.setPressureOversampling(BME680_OS_4X);
  bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
   bme.setGasHeater(320, 150); // 320*C for 150 ms
} // inserted missing } to close the setup() function.

struct pms5003data {
  uint16_t framelen;
  uint16_t pm10_standard, pm25_standard, pm100_standard;
  uint16_t pm10_env, pm25_env, pm100_env;
  uint16_t particles_03um, particles_05um, particles_10um, particles_25um, particles_50um, particles_100um;
  uint16_t unused;
  uint16_t checksum;
};

struct pms5003data data;
    
uint16_t line = 1;
 
void loop() {
  delay(1000);
 // Tell BME680 to begin measurement.
  (readPMSdata(&pmsSerial)) {
    // reading data was successful!
    Serial.println();
    Serial.println("---------------------------------------");
    Serial.println("Concentration Units (standard)");
    Serial.print("PM 1.0: "); Serial.print(data.pm10_standard);
    Serial.print("\t\tPM 2.5: "); Serial.print(data.pm25_standard);
    Serial.print("\t\tPM 10: "); Serial.println(data.pm100_standard);
    Serial.println("---------------------------------------");
    Serial.println("Concentration Units (environmental)");
    Serial.print("PM 1.0: "); Serial.print(data.pm10_env);
    Serial.print("\t\tPM 2.5: "); Serial.print(data.pm25_env);
    Serial.print("\t\tPM 10: "); Serial.println(data.pm100_env);
    Serial.println("---------------------------------------");
    Serial.print("Particles > 0.3um / 0.1L air:"); Serial.println(data.particles_03um);
    Serial.print("Particles > 0.5um / 0.1L air:"); Serial.println(data.particles_05um);
    Serial.print("Particles > 1.0um / 0.1L air:"); Serial.println(data.particles_10um);
    Serial.print("Particles > 2.5um / 0.1L air:"); Serial.println(data.particles_25um);
    Serial.print("Particles > 5.0um / 0.1L air:"); Serial.println(data.particles_50um);
    Serial.print("Particles > 10.0 um / 0.1L air:"); Serial.println(data.particles_100um);
    Serial.println("---------------------------------------");
  };

    //bme680
     if (!bme.endReading()) {
    Serial.println(F("Failed to complete reading :("));
    return;
  }
  Serial.print(F("Reading completed at "));
  Serial.println(millis());

  Serial.print(F("Temperature = "));
  Serial.print(bme.temperature);
  Serial.println(F(" *C"));

  Serial.print(F("Pressure = "));
  Serial.print(bme.pressure / 100.0);
  Serial.println(F(" hPa"));

  Serial.print(F("Humidity = "));
  Serial.print(bme.humidity);
  Serial.println(F(" %"));

  Serial.print(F("Gas = "));
  Serial.print(bme.gas_resistance / 1000.0);
  Serial.println(F(" KOhms"));

  Serial.print(F("Approx. Altitude = "));
  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  Serial.println(F(" m"));

  Serial.println();
  delay(2000);
}
 
  
 
  Serial.println();
       // Write data to SD card file (DHT11Log.txt)
    //pms5003
        Serial.println();
    dataFile.println("---------------------------------------"++);
    dataFile.println("Concentration Units (standard)");
    dataFile.print("PM 1.0: "); Serial.print(data.pm10_standard);
    dataFile.print("\t\tPM 2.5: "); Serial.print(data.pm25_standard);
    dataFile.print("\t\tPM 10: "); Serial.println(data.pm100_standard);
    dataFile.println("---------------------------------------");
    dataFile.println("Concentration Units (environmental)");
    dataFile.print("PM 1.0: "); Serial.print(data.pm10_env);
    dataFile.print("\t\tPM 2.5: "); Serial.print(data.pm25_env);
    dataFile.print("\t\tPM 10: "); Serial.println(data.pm100_env);
    dataFile.println("---------------------------------------");
    dataFile.print("Particles > 0.3um / 0.1L air:"); Serial.println(data.particles_03um);
    dataFile.print("Particles > 0.5um / 0.1L air:"); Serial.println(data.particles_05um);
    dataFile.print("Particles > 1.0um / 0.1L air:"); Serial.println(data.particles_10um);
    dataFile.print("Particles > 2.5um / 0.1L air:"); Serial.println(data.particles_25um);
    dataFile.print("Particles > 5.0um / 0.1L air:"); Serial.println(data.particles_50um);
    dataFile.print("Particles > 10.0 um / 0.1L air:"); Serial.println(data.particles_100um);
    dataFile.println("---------------------------------------");
 //bme680
    dataFile.print("Temperature = ");
    dataFile.print(temperature);
    dataFile.println(" *C");
 
    dataFile.print("Pressure = ");
    dataFile.print(pressure);
    dataFile.println(" hPa");
 
    dataFile.print("Humidity = ");
    dataFile.print(humidity);
    dataFile.println(" %");
 
    dataFile.print("Dew Point = ");
    dataFile.print(dewPoint);
    dataFile.println(" *C");
 
    dataFile.print("Approx. Altitude = ");
    dataFile.print(altitude);
    dataFile.println(" m");
 
    dataFile.print("Gas = ");
    dataFile.print(gas);
    dataFile.println(" KOhms");
    dataFile.close();
    
  }
  // if the file didn't open, print an error:
  else
    Serial.println("error opening DHT11Log.txt");
}

A secret error.

what is it? :frowning_face:

You don't know?

Why don't you post the error? It is just common sense that when you ask about an error to let us know what the error is.

Please include the entire error message. It is easy to do. There is a button (lower right of the IDE window) called "copy error message". Copy the error and paste into a post in code tags. Paraphrasing the error message leaves out important information.

Use the IDE autoformat tool (ctrl-t or Tools, Auto format) and you can see that you have a } misplaced and are closing the loop() function before the end.

   Serial.println(F(" m"));

   Serial.println();
   delay(2000);
}  // this closes the loop() function leaving the rest of the code outside a function.

Serial.println();
// Write data to SD card file (DHT11Log.txt)
//pms5003
Serial.println();
dataFile.println("-------------------------

What is that [ (readPMSdata(&pmsSerial)) ]? Is it supposed to be a function definition? If so it should not be in loop().

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