Adding additional parameters for Plantower PM sensors

This commit is contained in:
Achim
2022-11-10 16:25:01 +07:00
parent 5dd8a8be32
commit 183f62daf7
2 changed files with 139 additions and 1 deletions

View File

@ -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;

View File

@ -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;