sps30.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2020 HAW Hamburg
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser General
5  * Public License v2.1. See the file LICENSE in the top level directory for more
6  * details.
7  */
8 
9 #pragma once
10 
63 #include <stdbool.h>
64 #include "periph/gpio.h"
65 #include "periph/i2c.h"
66 
67 #ifdef __cplusplus
68 extern "C" {
69 #endif
70 
74 typedef struct {
77 
81 typedef struct {
83 } sps30_t;
84 
92 typedef struct {
93  float mc_pm1;
94  float mc_pm2_5;
95  float mc_pm4;
96  float mc_pm10;
97  float nc_pm0_5;
98  float nc_pm1;
99  float nc_pm2_5;
100  float nc_pm4;
101  float nc_pm10;
102  float ps;
103 } sps30_data_t;
104 
108 typedef enum {
109  SPS30_OK = 0,
113 
117 #define SPS30_FAN_CLEAN_S (10U)
118 
122 #define SPS30_SER_ART_LEN (32U)
123 
127 #define SPS30_DEFAULT_ACI_S (604800UL)
128 
146 #ifndef CONFIG_SPS30_ERROR_RETRY
147 #define CONFIG_SPS30_ERROR_RETRY (500U)
148 #endif
160 int sps30_init(sps30_t *dev, const sps30_params_t *params);
161 
178 
189 
200 bool sps30_data_ready(const sps30_t *dev, int *error);
201 
211 
224 int sps30_read_ac_interval(const sps30_t *dev, uint32_t *seconds);
225 
243 int sps30_write_ac_interval(const sps30_t *dev, uint32_t seconds);
244 
257 
267 int sps30_read_article_code(const sps30_t *dev, char *str, size_t len);
268 
278 int sps30_read_serial_number(const sps30_t *dev, char *str, size_t len);
279 
287 int sps30_reset(const sps30_t *dev);
288 
296 int sps30_sleep(const sps30_t *dev);
297 
305 int sps30_wakeup(const sps30_t *dev);
306 
307 #ifdef __cplusplus
308 }
309 #endif
Low-level GPIO peripheral driver interface definitions.
uint_fast8_t i2c_t
Default i2c_t type definition.
Definition: i2c.h:144
int sps30_read_ac_interval(const sps30_t *dev, uint32_t *seconds)
Read the fan auto-clean interval.
int sps30_start_measurement(const sps30_t *dev)
Enable the measurement action.
int sps30_start_fan_clean(const sps30_t *dev)
Run a fan cleaning cycle manually.
bool sps30_data_ready(const sps30_t *dev, int *error)
Ask the device if a measurement is ready for reading.
int sps30_read_article_code(const sps30_t *dev, char *str, size_t len)
Read the article code from the sensor as string.
sps30_error_code_t
SPS30 error codes (returned as negative values)
Definition: sps30.h:108
int sps30_reset(const sps30_t *dev)
Reset the sensor.
int sps30_sleep(const sps30_t *dev)
Put the sensor in sleep mode.
int sps30_read_serial_number(const sps30_t *dev, char *str, size_t len)
Read the serial number from the sensor as string.
int sps30_write_ac_interval(const sps30_t *dev, uint32_t seconds)
Write the fan auto-clean interval.
int sps30_wakeup(const sps30_t *dev)
Wake up sensor from sleep mode (returns sensor to Idle mode)
int sps30_read_measurement(const sps30_t *dev, sps30_data_t *data)
Read a set of particulate matter measurements.
int sps30_stop_measurement(const sps30_t *dev)
Stops the measurement action.
int sps30_init(sps30_t *dev, const sps30_params_t *params)
Initialize SPS30 sensor driver.
@ SPS30_I2C_ERROR
Some I2C operation failed.
Definition: sps30.h:111
@ SPS30_CRC_ERROR
The CRC check of received data failed.
Definition: sps30.h:110
@ SPS30_OK
Everything went fine.
Definition: sps30.h:109
Low-level I2C peripheral driver interface definition.
Set of measured particulate matter values.
Definition: sps30.h:92
float nc_pm10
Number concentration of all particles <= 10µm [#/cm^3].
Definition: sps30.h:101
float mc_pm10
Mass concentration of all particles <= 10µm [µg/m^3].
Definition: sps30.h:96
float nc_pm0_5
Number concentration of all particles <= 0.5µm [#/cm^3].
Definition: sps30.h:97
float nc_pm4
Number concentration of all particles <= 4µm [#/cm^3].
Definition: sps30.h:100
float mc_pm1
Mass concentration of all particles <= 1µm [µg/m^3].
Definition: sps30.h:93
float mc_pm4
Mass concentration of all particles <= 4µm [µg/m^3].
Definition: sps30.h:95
float ps
Typical particle size [µm].
Definition: sps30.h:102
float nc_pm2_5
Number concentration of all particles <= 2.5µm [#/cm^3].
Definition: sps30.h:99
float mc_pm2_5
Mass concentration of all particles <= 2.5µm [µg/m^3].
Definition: sps30.h:94
float nc_pm1
Number concentration of all particles <= 1µm [#/cm^3].
Definition: sps30.h:98
SPS30 device parameters.
Definition: sps30.h:74
i2c_t i2c_dev
I2C dev the sensor is connected to.
Definition: sps30.h:75
SPS30 device instance.
Definition: sps30.h:81
sps30_params_t p
parameters of the sensor device
Definition: sps30.h:82