15 #ifndef WS_UART_DRV_PM25AQI_H 16 #define WS_UART_DRV_PM25AQI_H 20 #include <Adafruit_PM25AQI.h> 83 _aqi =
new Adafruit_PM25AQI();
84 bool is_pm1006 = (strcmp(
getDriverID(),
"pm1006") == 0);
86 if (!
_aqi->begin_UART(
92 if (!
_aqi->begin_UART(
108 Serial.println(
"[UART, PM25] Reading data...");
111 Serial.println(
"[UART, PM25] Data not available.");
115 Serial.println(
"[UART, PM25] Read data OK");
117 Serial.println(F(
"---------------------------------------"));
118 Serial.println(F(
"Concentration Units (standard)"));
119 Serial.println(F(
"---------------------------------------"));
120 Serial.print(F(
"PM 1.0: "));
121 Serial.print(
_data.pm10_standard);
122 Serial.print(F(
"\t\tPM 2.5: "));
123 Serial.print(
_data.pm25_standard);
124 Serial.print(F(
"\t\tPM 10: "));
125 Serial.println(
_data.pm100_standard);
126 Serial.println(F(
"Concentration Units (environmental)"));
127 Serial.println(F(
"---------------------------------------"));
128 Serial.print(F(
"PM 1.0: "));
129 Serial.print(
_data.pm10_env);
130 Serial.print(F(
"\t\tPM 2.5: "));
131 Serial.print(
_data.pm25_env);
132 Serial.print(F(
"\t\tPM 10: "));
133 Serial.println(
_data.pm100_env);
134 Serial.println(F(
"---------------------------------------"));
146 wippersnapper_signal_v1_UARTResponse msgUARTResponse =
147 wippersnapper_signal_v1_UARTResponse_init_zero;
148 msgUARTResponse.which_payload =
149 wippersnapper_signal_v1_UARTResponse_resp_uart_device_event_tag;
150 strcpy(msgUARTResponse.payload.resp_uart_device_event.device_id,
156 msgUARTResponse.payload.resp_uart_device_event.sensor_event_count = 1;
158 wippersnapper_i2c_v1_SensorType_SENSOR_TYPE_PM25_ENV,
159 (
float)
_data.pm25_env);
161 msgUARTResponse.payload.resp_uart_device_event.sensor_event_count = 6;
163 wippersnapper_i2c_v1_SensorType_SENSOR_TYPE_PM10_STD,
164 (
float)
_data.pm10_standard);
167 wippersnapper_i2c_v1_SensorType_SENSOR_TYPE_PM25_STD,
168 (
float)
_data.pm25_standard);
171 wippersnapper_i2c_v1_SensorType_SENSOR_TYPE_PM100_STD,
172 (
float)
_data.pm100_standard);
175 wippersnapper_i2c_v1_SensorType_SENSOR_TYPE_PM10_ENV,
176 (
float)
_data.pm10_env);
179 wippersnapper_i2c_v1_SensorType_SENSOR_TYPE_PM25_ENV,
180 (
float)
_data.pm25_env);
183 wippersnapper_i2c_v1_SensorType_SENSOR_TYPE_PM100_ENV,
184 (
float)
_data.pm100_env);
188 uint8_t mqttBuffer[512] = {0};
189 pb_ostream_t ostream =
190 pb_ostream_from_buffer(mqttBuffer,
sizeof(mqttBuffer));
191 if (!ws_pb_encode(&ostream, wippersnapper_signal_v1_UARTResponse_fields,
193 Serial.println(
"[ERROR, UART]: Unable to encode device response!");
199 pb_get_encoded_size(&msgSz, wippersnapper_signal_v1_UARTResponse_fields,
201 Serial.print(
"[UART] Publishing event to IO..");
203 Serial.println(
"Published!");
209 Adafruit_PM25AQI *
_aqi =
nullptr;
212 SoftwareSerial *_swSerial =
nullptr;
218 #endif // WS_UART_DRV_PM25AQI_H const char * getDriverID()
Gets the UART device's unique identifier.
Definition: ws_uart_drv.h:92
void send_data() override
Packs and sends the device's event data to Adafruit IO.
Definition: ws_uart_drv_pm25aqi.h:144
bool read_data() override
Attempts to read data from the PM25AQI sensor.
Definition: ws_uart_drv_pm25aqi.h:107
PM25_AQI_Data _data
PM25AQI sensor data struct.
Definition: ws_uart_drv_pm25aqi.h:210
unsigned long pollingInterval
UART device's polling interval, in milliseconds.
Definition: ws_uart_drv.h:168
const char * uartTopic
UART device's MQTT topic.
Definition: ws_uart_drv.h:165
Adafruit_PM25AQI * _aqi
Pointer to PM25AQI sensor object.
Definition: ws_uart_drv_pm25aqi.h:209
ws_uart_drv_pm25aqi(HardwareSerial *hwSerial, int32_t interval)
Initializes the PM25AQI UART device driver.
Definition: ws_uart_drv_pm25aqi.h:54
~ws_uart_drv_pm25aqi()
Destructor for a PM25AQI sensor.
Definition: ws_uart_drv_pm25aqi.h:66
Class that provides an interface for a PM25 AQI UART sensor.
Definition: ws_uart_drv_pm25aqi.h:27
bool begin() override
Initializes a PM25AQI sensor.
Definition: ws_uart_drv_pm25aqi.h:82
ws_uart_drv(HardwareSerial *hwSerial, int32_t interval)
Initializes a UART device driver.
Definition: ws_uart_drv.h:59
Adafruit_MQTT * mqttClient
Pointer to MQTT client object.
Definition: ws_uart_drv.h:166
void setPrvPollTime(unsigned long curTime)
Sets the last time a UART device driver was polled.
Definition: ws_uart_drv.h:84
void packUARTResponse(wippersnapper_signal_v1_UARTResponse *msgUARTResponse, int event_index, wippersnapper_i2c_v1_SensorType sensor_type, float sensor_value)
Packs the UART device's data into a UARTResponse message.
Definition: ws_uart_drv.h:148
HardwareSerial * _hwSerial
Pointer to Hardware UART interface.
Definition: ws_uart_drv_pm25aqi.h:214
Base class for UART Device Drivers.
Definition: ws_uart_drv.h:36