15 #ifndef WS_UART_DRV_PM25AQI_H 16 #define WS_UART_DRV_PM25AQI_H 20 #include <Adafruit_PM25AQI.h> 83 _aqi =
new Adafruit_PM25AQI();
85 if (!
_aqi->begin_UART(
90 if (!
_aqi->begin_UART(
105 Serial.println(
"[UART, PM25] Reading data...");
108 Serial.println(
"[UART, PM25] Data not available.");
112 Serial.println(
"[UART, PM25] Read data OK");
114 Serial.println(F(
"---------------------------------------"));
115 Serial.println(F(
"Concentration Units (standard)"));
116 Serial.println(F(
"---------------------------------------"));
117 Serial.print(F(
"PM 1.0: "));
118 Serial.print(
_data.pm10_standard);
119 Serial.print(F(
"\t\tPM 2.5: "));
120 Serial.print(
_data.pm25_standard);
121 Serial.print(F(
"\t\tPM 10: "));
122 Serial.println(
_data.pm100_standard);
123 Serial.println(F(
"Concentration Units (environmental)"));
124 Serial.println(F(
"---------------------------------------"));
125 Serial.print(F(
"PM 1.0: "));
126 Serial.print(
_data.pm10_env);
127 Serial.print(F(
"\t\tPM 2.5: "));
128 Serial.print(
_data.pm25_env);
129 Serial.print(F(
"\t\tPM 10: "));
130 Serial.println(
_data.pm100_env);
131 Serial.println(F(
"---------------------------------------"));
143 wippersnapper_signal_v1_UARTResponse msgUARTResponse =
144 wippersnapper_signal_v1_UARTResponse_init_zero;
145 msgUARTResponse.which_payload =
146 wippersnapper_signal_v1_UARTResponse_resp_uart_device_event_tag;
147 strcpy(msgUARTResponse.payload.resp_uart_device_event.device_id,
153 msgUARTResponse.payload.resp_uart_device_event.sensor_event_count = 1;
155 wippersnapper_i2c_v1_SensorType_SENSOR_TYPE_PM25_ENV,
156 (
float)
_data.pm25_env);
158 msgUARTResponse.payload.resp_uart_device_event.sensor_event_count = 6;
160 wippersnapper_i2c_v1_SensorType_SENSOR_TYPE_PM10_STD,
161 (
float)
_data.pm10_standard);
164 wippersnapper_i2c_v1_SensorType_SENSOR_TYPE_PM25_STD,
165 (
float)
_data.pm25_standard);
168 wippersnapper_i2c_v1_SensorType_SENSOR_TYPE_PM100_STD,
169 (
float)
_data.pm100_standard);
172 wippersnapper_i2c_v1_SensorType_SENSOR_TYPE_PM10_ENV,
173 (
float)
_data.pm10_env);
176 wippersnapper_i2c_v1_SensorType_SENSOR_TYPE_PM25_ENV,
177 (
float)
_data.pm25_env);
180 wippersnapper_i2c_v1_SensorType_SENSOR_TYPE_PM100_ENV,
181 (
float)
_data.pm100_env);
185 uint8_t mqttBuffer[512] = {0};
186 pb_ostream_t ostream =
187 pb_ostream_from_buffer(mqttBuffer,
sizeof(mqttBuffer));
188 if (!ws_pb_encode(&ostream, wippersnapper_signal_v1_UARTResponse_fields,
190 Serial.println(
"[ERROR, UART]: Unable to encode device response!");
196 pb_get_encoded_size(&msgSz, wippersnapper_signal_v1_UARTResponse_fields,
198 Serial.print(
"[UART] Publishing event to IO..");
200 Serial.println(
"Published!");
206 Adafruit_PM25AQI *
_aqi =
nullptr;
209 SoftwareSerial *_swSerial =
nullptr;
215 #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:141
bool read_data() override
Attempts to read data from the PM25AQI sensor.
Definition: ws_uart_drv_pm25aqi.h:104
PM25_AQI_Data _data
PM25AQI sensor data struct.
Definition: ws_uart_drv_pm25aqi.h:207
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:206
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:211
Base class for UART Device Drivers.
Definition: ws_uart_drv.h:36