mirror of
https://github.com/airgradienthq/arduino.git
synced 2025-07-26 15:07:17 +02:00
Adding additional parameters for Plantower PM sensors
This commit is contained in:
112
AirGradient.cpp
112
AirGradient.cpp
@ -109,6 +109,103 @@ int AirGradient::getPM2_Raw(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int AirGradient::getPM0_3Count(){
|
||||||
|
int count;
|
||||||
|
DATA data;
|
||||||
|
requestRead();
|
||||||
|
if (readUntil(data)) {
|
||||||
|
count = data.PM_RAW_0_3;
|
||||||
|
return count;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int AirGradient::getPM10_0Count(){
|
||||||
|
int count;
|
||||||
|
DATA data;
|
||||||
|
requestRead();
|
||||||
|
if (readUntil(data)) {
|
||||||
|
count = data.PM_RAW_10_0;
|
||||||
|
return count;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int AirGradient::getPM5_0Count(){
|
||||||
|
int count;
|
||||||
|
DATA data;
|
||||||
|
requestRead();
|
||||||
|
if (readUntil(data)) {
|
||||||
|
count = data.PM_RAW_5_0;
|
||||||
|
return count;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int AirGradient::getPM2_5Count(){
|
||||||
|
int count;
|
||||||
|
DATA data;
|
||||||
|
requestRead();
|
||||||
|
if (readUntil(data)) {
|
||||||
|
count = data.PM_RAW_2_5;
|
||||||
|
return count;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int AirGradient::getPM1_0Count(){
|
||||||
|
int count;
|
||||||
|
DATA data;
|
||||||
|
requestRead();
|
||||||
|
if (readUntil(data)) {
|
||||||
|
count = data.PM_RAW_1_0;
|
||||||
|
return count;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int AirGradient::getPM0_5Count(){
|
||||||
|
int count;
|
||||||
|
DATA data;
|
||||||
|
requestRead();
|
||||||
|
if (readUntil(data)) {
|
||||||
|
count = data.PM_RAW_0_5;
|
||||||
|
return count;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int AirGradient::getAMB_TMP(){
|
||||||
|
int count;
|
||||||
|
DATA data;
|
||||||
|
requestRead();
|
||||||
|
if (readUntil(data)) {
|
||||||
|
count = data.AMB_TMP;
|
||||||
|
return count;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int AirGradient::getAMB_HUM(){
|
||||||
|
int count;
|
||||||
|
DATA data;
|
||||||
|
requestRead();
|
||||||
|
if (readUntil(data)) {
|
||||||
|
count = data.AMB_HUM;
|
||||||
|
return count;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Private Methods /////////////////////////////////////////////////////////////
|
// Private Methods /////////////////////////////////////////////////////////////
|
||||||
// Functions only available to other functions in this library
|
// Functions only available to other functions in this library
|
||||||
@ -248,6 +345,21 @@ void AirGradient::loop()
|
|||||||
_data->PM_AE_UG_1_0 = makeWord(_payload[6], _payload[7]);
|
_data->PM_AE_UG_1_0 = makeWord(_payload[6], _payload[7]);
|
||||||
_data->PM_AE_UG_2_5 = makeWord(_payload[8], _payload[9]);
|
_data->PM_AE_UG_2_5 = makeWord(_payload[8], _payload[9]);
|
||||||
_data->PM_AE_UG_10_0 = makeWord(_payload[10], _payload[11]);
|
_data->PM_AE_UG_10_0 = makeWord(_payload[10], _payload[11]);
|
||||||
|
|
||||||
|
// Total particles count per 100ml air
|
||||||
|
_data->PM_RAW_0_3 = makeWord(_payload[12], _payload[13]);
|
||||||
|
_data->PM_RAW_0_5 = makeWord(_payload[14], _payload[15]);
|
||||||
|
_data->PM_RAW_1_0 = makeWord(_payload[16], _payload[17]);
|
||||||
|
_data->PM_RAW_2_5 = makeWord(_payload[18], _payload[19]);
|
||||||
|
_data->PM_RAW_5_0 = makeWord(_payload[20], _payload[21]);
|
||||||
|
_data->PM_RAW_10_0 = makeWord(_payload[22], _payload[23]);
|
||||||
|
|
||||||
|
// Formaldehyde concentration (PMSxxxxST units only)
|
||||||
|
_data->AMB_HCHO = makeWord(_payload[24], _payload[25]) / 1000;
|
||||||
|
|
||||||
|
// Temperature & humidity (PMSxxxxST units only)
|
||||||
|
_data->AMB_TMP = makeWord(_payload[26], _payload[27]) / 10;
|
||||||
|
_data->AMB_HUM = makeWord(_payload[28], _payload[29]) / 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
_index = 0;
|
_index = 0;
|
||||||
|
@ -186,6 +186,21 @@ class AirGradient
|
|||||||
uint16_t PM_AE_UG_1_0;
|
uint16_t PM_AE_UG_1_0;
|
||||||
uint16_t PM_AE_UG_2_5;
|
uint16_t PM_AE_UG_2_5;
|
||||||
uint16_t PM_AE_UG_10_0;
|
uint16_t PM_AE_UG_10_0;
|
||||||
|
|
||||||
|
// Raw particles count (number of particles in 0.1l of air
|
||||||
|
uint16_t PM_RAW_0_3;
|
||||||
|
uint16_t PM_RAW_0_5;
|
||||||
|
uint16_t PM_RAW_1_0;
|
||||||
|
uint16_t PM_RAW_2_5;
|
||||||
|
uint16_t PM_RAW_5_0;
|
||||||
|
uint16_t PM_RAW_10_0;
|
||||||
|
|
||||||
|
// Formaldehyde (HCHO) concentration in mg/m^3 - PMSxxxxST units only
|
||||||
|
uint16_t AMB_HCHO;
|
||||||
|
|
||||||
|
// Temperature & humidity - PMSxxxxST units only
|
||||||
|
int16_t AMB_TMP;
|
||||||
|
uint16_t AMB_HUM;
|
||||||
};
|
};
|
||||||
|
|
||||||
void PMS(Stream&);
|
void PMS(Stream&);
|
||||||
@ -197,8 +212,19 @@ class AirGradient
|
|||||||
void requestRead();
|
void requestRead();
|
||||||
bool read_PMS(DATA& data);
|
bool read_PMS(DATA& data);
|
||||||
bool readUntil(DATA& data, uint16_t timeout = SINGLE_RESPONSE_TIME);
|
bool readUntil(DATA& data, uint16_t timeout = SINGLE_RESPONSE_TIME);
|
||||||
|
|
||||||
|
|
||||||
const char* getPM2();
|
const char* getPM2();
|
||||||
int getPM2_Raw();
|
int getPM2_Raw();
|
||||||
|
int getPM0_3Count();
|
||||||
|
int getPM0_5Count();
|
||||||
|
int getPM1_0Count();
|
||||||
|
int getPM2_5Count();
|
||||||
|
int getPM5_0Count();
|
||||||
|
int getPM10_0Count();
|
||||||
|
|
||||||
|
int getAMB_TMP();
|
||||||
|
int getAMB_HUM();
|
||||||
|
|
||||||
//PMS VARIABLES PUBLIC_END
|
//PMS VARIABLES PUBLIC_END
|
||||||
|
|
||||||
@ -252,7 +278,7 @@ class AirGradient
|
|||||||
enum STATUS { STATUS_WAITING, STATUS_OK };
|
enum STATUS { STATUS_WAITING, STATUS_OK };
|
||||||
enum MODE { MODE_ACTIVE, MODE_PASSIVE };
|
enum MODE { MODE_ACTIVE, MODE_PASSIVE };
|
||||||
|
|
||||||
uint8_t _payload[12];
|
uint8_t _payload[30];
|
||||||
Stream* _stream;
|
Stream* _stream;
|
||||||
DATA* _data;
|
DATA* _data;
|
||||||
STATUS _PMSstatus;
|
STATUS _PMSstatus;
|
||||||
|
Reference in New Issue
Block a user