apc1sensor  2.1.0.0
apc1sensor.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2020 MikroElektronika d.o.o.
3 ** Contact: https://www.mikroe.com/contact
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a copy
6 ** of this software and associated documentation files (the "Software"), to deal
7 ** in the Software without restriction, including without limitation the rights
8 ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 ** copies of the Software, and to permit persons to whom the Software is
10 ** furnished to do so, subject to the following conditions:
11 ** The above copyright notice and this permission notice shall be
12 ** included in all copies or substantial portions of the Software.
13 **
14 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 ** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19 ** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 ** USE OR OTHER DEALINGS IN THE SOFTWARE.
21 ****************************************************************************/
22 
28 #ifndef APC1SENSOR_H
29 #define APC1SENSOR_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_i2c_master.h"
48 #include "drv_uart.h"
49 
70 #define APC1SENSOR_ADDRESS_CMD 0x40
71 #define APC1SENSOR_ADDRESS_RESPONSE 0x47
72 #define APC1SENSOR_CMD_SET_MEAS_MODE 0xE1
73 #define APC1SENSOR_CMD_REQ_MEASUREMENT 0xE2
74 #define APC1SENSOR_CMD_SET_MODE 0xE4
75 #define APC1SENSOR_CMD_GET_INFO 0xE9
76  // apc1sensor_cmd
78 
93 #define APC1SENSOR_HEADER_0 0x42
94 #define APC1SENSOR_HEADER_1 0x4D
95 
100 #define APC1SENSOR_MEASUREMENT_PASSIVE 0x00
101 #define APC1SENSOR_MEASUREMENT_ACTIVE 0x01
102 
107 #define APC1SENSOR_MODE_IDLE 0x00
108 #define APC1SENSOR_MODE_MEASUREMENT 0x01
109 #define APC1SENSOR_MODE_RESET 0x0F
110 
115 #define APC1SENSOR_OPMODE_NORMAL 0
116 #define APC1SENSOR_OPMODE_DEEP_SLEEP 1
117 #define APC1SENSOR_OPMODE_RESET 2
118 
124 #define APC1SENSOR_TX_DRV_BUFFER_SIZE 100
125 #define APC1SENSOR_RX_DRV_BUFFER_SIZE 300
126 
132 #define APC1SENSOR_DEVICE_ADDRESS 0x12
133  // apc1sensor_set
135 
150 #define APC1SENSOR_MAP_MIKROBUS( cfg, mikrobus ) \
151  cfg.tx_pin = MIKROBUS( mikrobus, MIKROBUS_TX ); \
152  cfg.rx_pin = MIKROBUS( mikrobus, MIKROBUS_RX ); \
153  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
154  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
155  cfg.set = MIKROBUS( mikrobus, MIKROBUS_CS ); \
156  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST );
157  // apc1sensor_map // apc1sensor
160 
165 typedef enum
166 {
171 
176 typedef struct
177 {
178  digital_out_t set;
179  digital_out_t rst;
181  i2c_master_t i2c;
182  uart_t uart;
184  uint8_t slave_address;
186  uint8_t uart_rx_buffer[ APC1SENSOR_RX_DRV_BUFFER_SIZE ];
187  uint8_t uart_tx_buffer[ APC1SENSOR_TX_DRV_BUFFER_SIZE ];
191  uint8_t meas_mode;
193 } apc1sensor_t;
194 
199 typedef struct
200 {
201  pin_name_t scl;
202  pin_name_t sda;
203  pin_name_t rx_pin;
204  pin_name_t tx_pin;
206  pin_name_t set;
207  pin_name_t rst;
209  uint32_t i2c_speed;
210  uint8_t i2c_address;
212  uint32_t baud_rate;
214  uart_data_bits_t data_bit;
215  uart_parity_t parity_bit;
216  uart_stop_bits_t stop_bit;
221 
226 typedef struct
227 {
228  uint16_t pm1_0;
229  uint16_t pm2_5;
230  uint16_t pm10;
231  uint16_t pm1_0_air;
232  uint16_t pm2_5_air;
233  uint16_t pm10_air;
234  uint16_t part_over_0_3um;
235  uint16_t part_over_0_5um;
236  uint16_t part_over_1_0um;
237  uint16_t part_over_2_5um;
238  uint16_t part_over_5_0um;
239  uint16_t part_over_10um;
240  uint16_t tvoc;
241  uint16_t eco2;
242  float t_comp;
243  float rh_comp;
244  float t_raw;
245  float rh_raw;
246  uint32_t rs0;
247  uint32_t rs1;
248  uint32_t rs2;
249  uint32_t rs3;
250  uint8_t aqi;
251  uint8_t version;
252  uint8_t error_code;
255 
260 typedef struct
261 {
262  uint8_t module_name[ 7 ];
263  uint8_t serial_num[ 8 ];
264  uint8_t fw_version[ 2 ];
267 
272 typedef enum
273 {
275  APC1SENSOR_ERROR = -1
276 
278 
295 
311 
326 
340 
352 
364 
376 
389 err_t apc1sensor_set_meas_mode ( apc1sensor_t *ctx, uint8_t mode );
390 
402 
416 
430 
442 void apc1sensor_set_opmode ( apc1sensor_t *ctx, uint8_t opmode );
443 
453 
454 #ifdef __cplusplus
455 }
456 #endif
457 #endif // APC1SENSOR_H
458  // apc1sensor
460 
461 // ------------------------------------------------------------------------ END
apc1sensor_t::rst
digital_out_t rst
Definition: apc1sensor.h:179
apc1sensor_measurement_t::t_comp
float t_comp
Definition: apc1sensor.h:242
apc1sensor_read_info
err_t apc1sensor_read_info(apc1sensor_t *ctx, apc1sensor_info_t *info)
APC1 Sensor read info function.
APC1SENSOR_RX_DRV_BUFFER_SIZE
#define APC1SENSOR_RX_DRV_BUFFER_SIZE
Definition: apc1sensor.h:125
apc1sensor_drv_interface_sel
void apc1sensor_drv_interface_sel(apc1sensor_cfg_t *cfg, apc1sensor_drv_t drv_sel)
APC1 Sensor driver interface setup function.
apc1sensor_cfg_t::tx_pin
pin_name_t tx_pin
Definition: apc1sensor.h:204
APC1SENSOR_TX_DRV_BUFFER_SIZE
#define APC1SENSOR_TX_DRV_BUFFER_SIZE
APC1 Sensor driver buffer size.
Definition: apc1sensor.h:124
APC1SENSOR_DRV_SEL_UART
@ APC1SENSOR_DRV_SEL_UART
Definition: apc1sensor.h:168
apc1sensor_measurement_t::pm1_0
uint16_t pm1_0
Definition: apc1sensor.h:228
APC1SENSOR_ERROR
@ APC1SENSOR_ERROR
Definition: apc1sensor.h:275
apc1sensor_t
APC1 Sensor Demo context object.
Definition: apc1sensor.h:177
apc1sensor_t::slave_address
uint8_t slave_address
Definition: apc1sensor.h:184
apc1sensor_measurement_t::rs1
uint32_t rs1
Definition: apc1sensor.h:247
apc1sensor_cfg_t::uart_blocking
bool uart_blocking
Definition: apc1sensor.h:213
apc1sensor_cfg_t::stop_bit
uart_stop_bits_t stop_bit
Definition: apc1sensor.h:216
apc1sensor_cfg_t::rx_pin
pin_name_t rx_pin
Definition: apc1sensor.h:203
apc1sensor_read_measurement
err_t apc1sensor_read_measurement(apc1sensor_t *ctx, apc1sensor_measurement_t *measurement)
APC1 Sensor read measurement function.
apc1sensor_cfg_t::set
pin_name_t set
Definition: apc1sensor.h:206
apc1sensor_measurement_t::pm10
uint16_t pm10
Definition: apc1sensor.h:230
apc1sensor_set_idle_mode
err_t apc1sensor_set_idle_mode(apc1sensor_t *ctx)
APC1 Sensor set idle mode function.
apc1sensor_measurement_t
APC1 Sensor Demo measurement data object.
Definition: apc1sensor.h:227
apc1sensor_measurement_t::rs3
uint32_t rs3
Definition: apc1sensor.h:249
APC1SENSOR_DRV_SEL_I2C
@ APC1SENSOR_DRV_SEL_I2C
Definition: apc1sensor.h:167
apc1sensor_measurement_t::eco2
uint16_t eco2
Definition: apc1sensor.h:241
apc1sensor_measurement_t::rs2
uint32_t rs2
Definition: apc1sensor.h:248
apc1sensor_measurement_t::error_code
uint8_t error_code
Definition: apc1sensor.h:252
apc1sensor_measurement_t::pm2_5
uint16_t pm2_5
Definition: apc1sensor.h:229
apc1sensor_measurement_t::pm10_air
uint16_t pm10_air
Definition: apc1sensor.h:233
apc1sensor_measurement_t::rs0
uint32_t rs0
Definition: apc1sensor.h:246
apc1sensor_reset_device
void apc1sensor_reset_device(apc1sensor_t *ctx)
APC1 Sensor reset device function.
apc1sensor_request_meas
err_t apc1sensor_request_meas(apc1sensor_t *ctx)
APC1 Sensor request meas function.
apc1sensor_measurement_t::tvoc
uint16_t tvoc
Definition: apc1sensor.h:240
apc1sensor_cfg_t
APC1 Sensor Demo configuration object.
Definition: apc1sensor.h:200
apc1sensor_cfg_t::rst
pin_name_t rst
Definition: apc1sensor.h:207
apc1sensor_cfg_t::parity_bit
uart_parity_t parity_bit
Definition: apc1sensor.h:215
apc1sensor_default_cfg
err_t apc1sensor_default_cfg(apc1sensor_t *ctx)
APC1 Sensor default configuration function.
apc1sensor_drv_t
apc1sensor_drv_t
APC1 Sensor Click driver selector.
Definition: apc1sensor.h:166
apc1sensor_measurement_t::part_over_0_5um
uint16_t part_over_0_5um
Definition: apc1sensor.h:235
apc1sensor_t::drv_sel
apc1sensor_drv_t drv_sel
Definition: apc1sensor.h:189
apc1sensor_cfg_setup
void apc1sensor_cfg_setup(apc1sensor_cfg_t *cfg)
APC1 Sensor configuration object setup function.
apc1sensor_cfg_t::sda
pin_name_t sda
Definition: apc1sensor.h:202
apc1sensor_t::set
digital_out_t set
Definition: apc1sensor.h:178
apc1sensor_set_meas_mode
err_t apc1sensor_set_meas_mode(apc1sensor_t *ctx, uint8_t mode)
APC1 Sensor set meas mode function.
apc1sensor_measurement_t::pm2_5_air
uint16_t pm2_5_air
Definition: apc1sensor.h:232
apc1sensor_measurement_t::rh_comp
float rh_comp
Definition: apc1sensor.h:243
apc1sensor_measurement_t::part_over_10um
uint16_t part_over_10um
Definition: apc1sensor.h:239
apc1sensor_sw_reset
err_t apc1sensor_sw_reset(apc1sensor_t *ctx)
APC1 Sensor sw reset function.
apc1sensor_cfg_t::drv_sel
apc1sensor_drv_t drv_sel
Definition: apc1sensor.h:218
apc1sensor_t::uart
uart_t uart
Definition: apc1sensor.h:182
apc1sensor_measurement_t::version
uint8_t version
Definition: apc1sensor.h:251
apc1sensor_t::meas_mode
uint8_t meas_mode
Definition: apc1sensor.h:191
apc1sensor_cfg_t::data_bit
uart_data_bits_t data_bit
Definition: apc1sensor.h:214
apc1sensor_cfg_t::baud_rate
uint32_t baud_rate
Definition: apc1sensor.h:212
apc1sensor_measurement_t::part_over_2_5um
uint16_t part_over_2_5um
Definition: apc1sensor.h:237
apc1sensor_info_t
APC1 Sensor Demo module type, ID and firmware version object.
Definition: apc1sensor.h:261
apc1sensor_set_opmode
void apc1sensor_set_opmode(apc1sensor_t *ctx, uint8_t opmode)
APC1 Sensor set opmode function.
apc1sensor_measurement_t::part_over_0_3um
uint16_t part_over_0_3um
Definition: apc1sensor.h:234
apc1sensor_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: apc1sensor.h:209
apc1sensor_start_measurement
err_t apc1sensor_start_measurement(apc1sensor_t *ctx)
APC1 Sensor start measurement function.
APC1SENSOR_OK
@ APC1SENSOR_OK
Definition: apc1sensor.h:274
apc1sensor_t::i2c
i2c_master_t i2c
Definition: apc1sensor.h:181
apc1sensor_init
err_t apc1sensor_init(apc1sensor_t *ctx, apc1sensor_cfg_t *cfg)
APC1 Sensor initialization function.
apc1sensor_return_value_t
apc1sensor_return_value_t
APC1 Sensor Demo return value data.
Definition: apc1sensor.h:273
apc1sensor_measurement_t::part_over_1_0um
uint16_t part_over_1_0um
Definition: apc1sensor.h:236
apc1sensor_cfg_t::i2c_address
uint8_t i2c_address
Definition: apc1sensor.h:210
apc1sensor_measurement_t::pm1_0_air
uint16_t pm1_0_air
Definition: apc1sensor.h:231
apc1sensor_measurement_t::rh_raw
float rh_raw
Definition: apc1sensor.h:245
apc1sensor_measurement_t::t_raw
float t_raw
Definition: apc1sensor.h:244
apc1sensor_cfg_t::scl
pin_name_t scl
Definition: apc1sensor.h:201
apc1sensor_measurement_t::aqi
uint8_t aqi
Definition: apc1sensor.h:250
apc1sensor_measurement_t::part_over_5_0um
uint16_t part_over_5_0um
Definition: apc1sensor.h:238