/** @file RAK12039_Dust_Read_PMSA003I.ino @author rakwireless.com @brief Read PMSA003I data and output through serial port. @version 0.1 @date 2022-01-07 @copyright Copyright (c) 2022 **/ #include #include #include "RAK12039_PMSA003I.h" #include "SX126x-Arduino.h" RAK_PMSA003I PMSA003I; /* @brief WB_IO6 is connected to the SET pin. Set pin/TTL level @3.3V, high level or suspending is normal working status. while low level is sleeping mode. */ #define SET_PIN WB_IO6 void setup() { // Initialize Serial for debug output. time_t timeout = millis(); Serial.begin(115200); while (!Serial) { if ((millis() - timeout) < 5000) { delay(100); } else { break; } } // Initialize LoRa and set radio to sleep if (lora_rak4630_init() != 0) { Serial.println("Error initializing LoRa"); } else { Serial.println("Set LoRa to sleep"); Radio.Sleep(); } } void loop() { // Sensor power on. pinMode(WB_IO2, OUTPUT); pinMode(SET_PIN, OUTPUT); digitalWrite(WB_IO2, HIGH); digitalWrite(SET_PIN, HIGH); delay(500); Wire.begin(); Wire.setClock(100000); // Wait for sensor to go online time_t wait_sensor = millis(); uint32_t error = 0; while (1) { delay(500); Wire.beginTransmission(0x12); error = Wire.endTransmission(); if (error == 0) { Serial.printf("RAK12039 answered at %ld ms\n", millis()); break; } if ((millis() - wait_sensor) > 5000) { Serial.printf("RAK12039 timeout after 5000 ms"); pinMode(WB_IO6, INPUT); break; } } // delay(500); // PMSA003I.begin(); delay(3000); if (!PMSA003I.begin()) { Serial.println("PMSA003I begin fail,please check connection!"); while (1) { delay(100); } } PMSA_Data_t data; if (PMSA003I.readDate(&data)) { Serial.println("PMSA003I read date success."); Serial.println("Standard particulate matter:"); Serial.print("PM1.0: "); Serial.print(data.pm10_standard); Serial.println(" [ug/m3]"); Serial.print("PM2.5: "); Serial.print(data.pm25_standard); Serial.println(" [ug/m3]"); Serial.print("PM10 : "); Serial.print(data.pm100_standard); Serial.println(" [ug/m3]"); Serial.println("Atmospheric environment:"); Serial.print("PM1.0: "); Serial.print(data.pm10_env); Serial.println(" [ug/m3]"); Serial.print("PM2.5: "); Serial.print(data.pm25_env); Serial.println(" [ug/m3]"); Serial.print("PM10 : "); Serial.print(data.pm100_env); Serial.println(" [ug/m3]"); Serial.println("The number of particles in 0.1L air (above diameter):"); Serial.print("0.3um:"); Serial.println(data.particles_03um); Serial.print("0.5um:"); Serial.println(data.particles_05um); Serial.print("1.0um:"); Serial.println(data.particles_10um); Serial.print("2.5um:"); Serial.println(data.particles_25um); Serial.print("5.0um:"); Serial.println(data.particles_50um); Serial.print("10 um:"); Serial.println(data.particles_100um); } else { Serial.println("PMSA003I read failed!"); } Serial.println(); digitalWrite(WB_IO2, LOW); digitalWrite(SET_PIN, LOW); Wire.end(); pinMode(WB_I2C1_SDA, OUTPUT_D0S1); pinMode(WB_I2C1_SCL, OUTPUT_D0S1); digitalWrite(WB_I2C1_SDA, LOW); digitalWrite(WB_I2C1_SCL, LOW); delay(5000); }