Mbed library for SPS30 i2c communication (Configured to be interfaced with TresidderOS) Inherits members and methods from SensorDriver class
sps30.h@0:9221dac25d3b, 2019-03-04 (annotated)
- 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?
User | Revision | Line number | New 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 |