Mbed library for SPS30 i2c communication (Configured to be interfaced with TresidderOS) Inherits members and methods from SensorDriver class

Dependents:   SPS30_TEST

Committer:
ziqiyap
Date:
Mon Mar 04 05:58:42 2019 +0000
Revision:
0:9221dac25d3b
Child:
1:0078efb8903a
created sps30 library;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ziqiyap 0:9221dac25d3b 1 #ifndef SPS30_H
ziqiyap 0:9221dac25d3b 2 #define SPS30_H
ziqiyap 0:9221dac25d3b 3
ziqiyap 0:9221dac25d3b 4 #define SPS30_I2C_ADDR 0x69
ziqiyap 0:9221dac25d3b 5
ziqiyap 0:9221dac25d3b 6 #define SPS30_CMMD_STRT_MEAS 0x0010
ziqiyap 0:9221dac25d3b 7 #define SPS30_CMMD_STOP_MEAS 0x0104
ziqiyap 0:9221dac25d3b 8 #define SPS30_CMMD_GET_READY_STAT 0x0202
ziqiyap 0:9221dac25d3b 9 #define SPS30_CMMD_READ_MEAS 0x0300
ziqiyap 0:9221dac25d3b 10
ziqiyap 0:9221dac25d3b 11 #define SPS30_CMMD_AUTO_CLEAN_INTV 0x8004
ziqiyap 0:9221dac25d3b 12 #define SPS30_CMMD_START_FAN_CLEAN 0x5607
ziqiyap 0:9221dac25d3b 13
ziqiyap 0:9221dac25d3b 14 #define SPS30_CMMD_SOFT_RESET 0xD304
ziqiyap 0:9221dac25d3b 15
ziqiyap 0:9221dac25d3b 16 #define SPS30_CMMD_READ_SERIALNBR 0xD033
ziqiyap 0:9221dac25d3b 17 #define SPS30_CMMD_READ_ARTICLECODE 0xD025
ziqiyap 0:9221dac25d3b 18
ziqiyap 0:9221dac25d3b 19 #define SPS30_POLYNOMIAL 0x31 // P(x) = x^8 + x^5 + x^4 + 1 = 100110p01
ziqiyap 0:9221dac25d3b 20 #define SPS30_CRC_INIT 0xff
ziqiyap 0:9221dac25d3b 21
ziqiyap 0:9221dac25d3b 22 #define SPS30_SN_SIZE 33 //size of the s/n ascii string + CRC values
ziqiyap 0:9221dac25d3b 23 #define SPS30_ACODE_SIZE 33 //size of the article code ascii string + CRC values
ziqiyap 0:9221dac25d3b 24
ziqiyap 0:9221dac25d3b 25 /** Create SPS30 controller class
ziqiyap 0:9221dac25d3b 26 *
ziqiyap 0:9221dac25d3b 27 * @param sps30 class
ziqiyap 0:9221dac25d3b 28 *
ziqiyap 0:9221dac25d3b 29 */
ziqiyap 0:9221dac25d3b 30 class sps30 {
ziqiyap 0:9221dac25d3b 31
ziqiyap 0:9221dac25d3b 32 public:
ziqiyap 0:9221dac25d3b 33 enum SPSerror {
ziqiyap 0:9221dac25d3b 34 SPSnoERROR, //all ok
ziqiyap 0:9221dac25d3b 35 SPSisReady, //ready ststus register
ziqiyap 0:9221dac25d3b 36 SPSnoAckERROR, //no I2C ACK error
ziqiyap 0:9221dac25d3b 37 SPStimeoutERROR, //I2C timeout error
ziqiyap 0:9221dac25d3b 38 SPScrcERROR, //CRC error, any
ziqiyap 0:9221dac25d3b 39 // SPScrcERRORv1, //CRC error on value 1
ziqiyap 0:9221dac25d3b 40 // SPScrcERRORv2, //CRC error on value 2
ziqiyap 0:9221dac25d3b 41 // SPScrcERRORv3, //CRC error on value 3
ziqiyap 0:9221dac25d3b 42 // SPScrcERRORv4, //CRC error on value 4
ziqiyap 0:9221dac25d3b 43 // SPScrcERRORv5, //CRC error on value 5
ziqiyap 0:9221dac25d3b 44 // SPScrcERRORv6, //CRC error on value 6
ziqiyap 0:9221dac25d3b 45 };
ziqiyap 0:9221dac25d3b 46
ziqiyap 0:9221dac25d3b 47 uint16_t ready; /**< 1 = ready, 0 = busy */
ziqiyap 0:9221dac25d3b 48
ziqiyap 0:9221dac25d3b 49 float mass_1p0_f; /**< float of Mass Conc of PM1.0 */
ziqiyap 0:9221dac25d3b 50 float mass_2p5_f; /**< float of Mass Conc of PM2.5 */
ziqiyap 0:9221dac25d3b 51 float mass_4p0_f; /**< float of Mass Conc of PM4.0 */
ziqiyap 0:9221dac25d3b 52 float mass_10p0_f; /**< float of Mass Conc of PM10 */
ziqiyap 0:9221dac25d3b 53
ziqiyap 0:9221dac25d3b 54 float num_0p5_f; /**< float of Number Conc of PM0.5 */
ziqiyap 0:9221dac25d3b 55 float num_1p0_f; /**< float of Number Conc of PM1.0 */
ziqiyap 0:9221dac25d3b 56 float num_2p5_f; /**< float of Number Conc of PM2.5 */
ziqiyap 0:9221dac25d3b 57 float num_4p0_f; /**< float of Number Conc of PM4.0 */
ziqiyap 0:9221dac25d3b 58 float num_10p0_f; /**< float of Number Conc of PM10 */
ziqiyap 0:9221dac25d3b 59
ziqiyap 0:9221dac25d3b 60 float typ_pm_size_f; /**< float of Typical Particle Size */
ziqiyap 0:9221dac25d3b 61
ziqiyap 0:9221dac25d3b 62 uint8_t acode[24]; /**< Article code number?? */
ziqiyap 0:9221dac25d3b 63 uint8_t sn[24]; /**< ASCII Serial Number */
ziqiyap 0:9221dac25d3b 64
ziqiyap 0:9221dac25d3b 65
ziqiyap 0:9221dac25d3b 66
ziqiyap 0:9221dac25d3b 67 /** Create a SPS30 object using the specified I2C object
ziqiyap 0:9221dac25d3b 68 * @param sda - mbed I2C interface pin
ziqiyap 0:9221dac25d3b 69 * @param scl - mbed I2C interface pin
ziqiyap 0:9221dac25d3b 70 * @param I2C Frequency (in Hz)
ziqiyap 0:9221dac25d3b 71 *
ziqiyap 0:9221dac25d3b 72 * @return none
ziqiyap 0:9221dac25d3b 73 */
ziqiyap 0:9221dac25d3b 74 sps30(PinName sda, PinName scl, int i2cFrequency);
ziqiyap 0:9221dac25d3b 75
ziqiyap 0:9221dac25d3b 76 /** Destructor
ziqiyap 0:9221dac25d3b 77 *
ziqiyap 0:9221dac25d3b 78 * @param --none--
ziqiyap 0:9221dac25d3b 79 *
ziqiyap 0:9221dac25d3b 80 * @return none
ziqiyap 0:9221dac25d3b 81 */
ziqiyap 0:9221dac25d3b 82 ~sps30();
ziqiyap 0:9221dac25d3b 83
ziqiyap 0:9221dac25d3b 84 /** Start Auto-Measurement
ziqiyap 0:9221dac25d3b 85 *
ziqiyap 0:9221dac25d3b 86 * @param --none--
ziqiyap 0:9221dac25d3b 87 *
ziqiyap 0:9221dac25d3b 88 * @return enum SPSerror
ziqiyap 0:9221dac25d3b 89 */
ziqiyap 0:9221dac25d3b 90 uint8_t startMeasurement();
ziqiyap 0:9221dac25d3b 91
ziqiyap 0:9221dac25d3b 92 /** Stop Auto-Measurement
ziqiyap 0:9221dac25d3b 93 *
ziqiyap 0:9221dac25d3b 94 * @param --none--
ziqiyap 0:9221dac25d3b 95 *
ziqiyap 0:9221dac25d3b 96 * @return enum SPSerror
ziqiyap 0:9221dac25d3b 97 */
ziqiyap 0:9221dac25d3b 98 uint8_t stopMeasurement();
ziqiyap 0:9221dac25d3b 99
ziqiyap 0:9221dac25d3b 100 /** Get Ready Status register
ziqiyap 0:9221dac25d3b 101 *
ziqiyap 0:9221dac25d3b 102 * @param --none--
ziqiyap 0:9221dac25d3b 103 * @see Ready Status result
ziqiyap 0:9221dac25d3b 104 *
ziqiyap 0:9221dac25d3b 105 * @return enum SPSerror
ziqiyap 0:9221dac25d3b 106 */
ziqiyap 0:9221dac25d3b 107 uint8_t getReadyStatus();
ziqiyap 0:9221dac25d3b 108
ziqiyap 0:9221dac25d3b 109 /** Get all particulate matter parameters
ziqiyap 0:9221dac25d3b 110 *
ziqiyap 0:9221dac25d3b 111 * @param --none-
ziqiyap 0:9221dac25d3b 112 * @see Results in Public member variables
ziqiyap 0:9221dac25d3b 113 *
ziqiyap 0:9221dac25d3b 114 * @return enum SPSerror
ziqiyap 0:9221dac25d3b 115 */
ziqiyap 0:9221dac25d3b 116 uint8_t readMeasurement();
ziqiyap 0:9221dac25d3b 117
ziqiyap 0:9221dac25d3b 118 /** Calculate the SPS30 CRC value
ziqiyap 0:9221dac25d3b 119 *
ziqiyap 0:9221dac25d3b 120 * @param 16 bit value to perform a CRC check on
ziqiyap 0:9221dac25d3b 121 *
ziqiyap 0:9221dac25d3b 122 * @return 8 bit CRC value
ziqiyap 0:9221dac25d3b 123 */
ziqiyap 0:9221dac25d3b 124 uint8_t calcCrc2b(uint16_t seed);
ziqiyap 0:9221dac25d3b 125
ziqiyap 0:9221dac25d3b 126 /** Compare received CRC value with calculated CRC value
ziqiyap 0:9221dac25d3b 127 *
ziqiyap 0:9221dac25d3b 128 * @param 16 bit value to perform a CRC check on
ziqiyap 0:9221dac25d3b 129 * @param 8 bit value to compare CRC values
ziqiyap 0:9221dac25d3b 130 *
ziqiyap 0:9221dac25d3b 131 * @return enum SPSerror
ziqiyap 0:9221dac25d3b 132 */
ziqiyap 0:9221dac25d3b 133 uint8_t checkCrc2b(uint16_t seed, uint8_t crcIn);
ziqiyap 0:9221dac25d3b 134
ziqiyap 0:9221dac25d3b 135 /** Get Article Code
ziqiyap 0:9221dac25d3b 136 *
ziqiyap 0:9221dac25d3b 137 * @param --none--
ziqiyap 0:9221dac25d3b 138 *
ziqiyap 0:9221dac25d3b 139 *
ziqiyap 0:9221dac25d3b 140 * @return enum SPSerror
ziqiyap 0:9221dac25d3b 141 */
ziqiyap 0:9221dac25d3b 142 uint8_t getArticleCode();
ziqiyap 0:9221dac25d3b 143
ziqiyap 0:9221dac25d3b 144 /** Get Serial Number
ziqiyap 0:9221dac25d3b 145 *
ziqiyap 0:9221dac25d3b 146 * @param --none--
ziqiyap 0:9221dac25d3b 147 * @see ASCII Serial Number in scdSTR structure
ziqiyap 0:9221dac25d3b 148 *
ziqiyap 0:9221dac25d3b 149 * @return enum SPSerror
ziqiyap 0:9221dac25d3b 150 */
ziqiyap 0:9221dac25d3b 151 uint8_t getSerialNumber();
ziqiyap 0:9221dac25d3b 152
ziqiyap 0:9221dac25d3b 153 /** Perform a soft reset
ziqiyap 0:9221dac25d3b 154 *
ziqiyap 0:9221dac25d3b 155 * @param --none--
ziqiyap 0:9221dac25d3b 156 *
ziqiyap 0:9221dac25d3b 157 * @return enum SPSerror
ziqiyap 0:9221dac25d3b 158 */
ziqiyap 0:9221dac25d3b 159 uint8_t softReset();
ziqiyap 0:9221dac25d3b 160
ziqiyap 0:9221dac25d3b 161 private:
ziqiyap 0:9221dac25d3b 162 char i2cBuff[60];
ziqiyap 0:9221dac25d3b 163
ziqiyap 0:9221dac25d3b 164 uint16_t mass_1p0_m; /**< High order 16 bit word of Mass Conc of PM1.0 */
ziqiyap 0:9221dac25d3b 165 uint16_t mass_1p0_l; /**< Low order 16 bit word of Mass Conc of PM1.0 */
ziqiyap 0:9221dac25d3b 166 uint16_t mass_2p5_m; /**< High order 16 bit word of Mass Conc of PM2.5 */
ziqiyap 0:9221dac25d3b 167 uint16_t mass_2p5_l; /**< Low order 16 bit word of Mass Conc of PM2.5 */
ziqiyap 0:9221dac25d3b 168 uint16_t mass_4p0_m; /**< High order 16 bit word of Mass Conc of PM4.0 */
ziqiyap 0:9221dac25d3b 169 uint16_t mass_4p0_l; /**< Low order 16 bit word of Mass Conc of PM4.0 */
ziqiyap 0:9221dac25d3b 170 uint16_t mass_10p0_m; /**< High order 16 bit word of Mass Conc of PM10 */
ziqiyap 0:9221dac25d3b 171 uint16_t mass_10p0_l; /**< Low order 16 bit word of Mass Conc of PM10 */
ziqiyap 0:9221dac25d3b 172
ziqiyap 0:9221dac25d3b 173 uint16_t num_0p5_m; /**< High order 16 bit word of Number Conc of PM0.5 */
ziqiyap 0:9221dac25d3b 174 uint16_t num_0p5_l; /**< Low order 16 bit word of Number Conc of PM0.5 */
ziqiyap 0:9221dac25d3b 175 uint16_t num_1p0_m; /**< High order 16 bit word of Number Conc of PM1.0 */
ziqiyap 0:9221dac25d3b 176 uint16_t num_1p0_l; /**< Low order 16 bit word of Number Conc of PM1.0 */
ziqiyap 0:9221dac25d3b 177 uint16_t num_2p5_m; /**< High order 16 bit word of Number Conc of PM2.5 */
ziqiyap 0:9221dac25d3b 178 uint16_t num_2p5_l; /**< Low order 16 bit word of Number Conc of PM2.5 */
ziqiyap 0:9221dac25d3b 179 uint16_t num_4p0_m; /**< High order 16 bit word of Number Conc of PM4.0 */
ziqiyap 0:9221dac25d3b 180 uint16_t num_4p0_l; /**< Low order 16 bit word of Number Conc of PM4.0 */
ziqiyap 0:9221dac25d3b 181 uint16_t num_10p0_m; /**< High order 16 bit word of Number Conc of PM10 */
ziqiyap 0:9221dac25d3b 182 uint16_t num_10p0_l; /**< Low order 16 bit word of Number Conc of PM10 */
ziqiyap 0:9221dac25d3b 183
ziqiyap 0:9221dac25d3b 184 uint16_t typ_pm_size_m; /**< High order 16 bit word of Typical Particle Size */
ziqiyap 0:9221dac25d3b 185 uint16_t typ_pm_size_l; /**< Low order 16 bit word of Typical Particle Size */
ziqiyap 0:9221dac25d3b 186
ziqiyap 0:9221dac25d3b 187 uint32_t mass_1p0_i; /**< 32 bit int of Mass Conc of PM1.0 */
ziqiyap 0:9221dac25d3b 188 uint32_t mass_2p5_i; /**< 32 bit int of Mass Conc of PM2.5 */
ziqiyap 0:9221dac25d3b 189 uint32_t mass_4p0_i; /**< 32 bit int of Mass Conc of PM4.0 */
ziqiyap 0:9221dac25d3b 190 uint32_t mass_10p0_i; /**< 32 bit int of Mass Conc of PM10 */
ziqiyap 0:9221dac25d3b 191
ziqiyap 0:9221dac25d3b 192 uint32_t num_0p5_i; /**< 32 bit int of Number Conc of PM0.5 */
ziqiyap 0:9221dac25d3b 193 uint32_t num_1p0_i; /**< 32 bit int of Number Conc of PM1.0 */
ziqiyap 0:9221dac25d3b 194 uint32_t num_2p5_i; /**< 32 bit int of Number Conc of PM2.5 */
ziqiyap 0:9221dac25d3b 195 uint32_t num_4p0_i; /**< 32 bit int of Number Conc of PM4.0 */
ziqiyap 0:9221dac25d3b 196 uint32_t num_10p0_i; /**< 32 bit int of Number Conc of PM10 */
ziqiyap 0:9221dac25d3b 197
ziqiyap 0:9221dac25d3b 198 uint32_t typ_pm_size_i; /**< 32 bit int of Typical Particle Size */
ziqiyap 0:9221dac25d3b 199
ziqiyap 0:9221dac25d3b 200 protected:
ziqiyap 0:9221dac25d3b 201 I2C _i2c;
ziqiyap 0:9221dac25d3b 202
ziqiyap 0:9221dac25d3b 203 };
ziqiyap 0:9221dac25d3b 204 #endif
ziqiyap 0:9221dac25d3b 205