Adafruit SCD30 Library
Adafruit_SCD30.h
Go to the documentation of this file.
1 
16 #ifndef _ADAFRUIT_SCD30_H
17 #define _ADAFRUIT_SCD30_H
18 
19 #include "Arduino.h"
20 #include <Adafruit_BusIO_Register.h>
21 #include <Adafruit_I2CDevice.h>
22 #include <Adafruit_Sensor.h>
23 #include <Wire.h>
24 #define SCD30_I2CADDR_DEFAULT 0x61
25 #define SCD30_CHIP_ID 0x60
26 
27 #define SCD30_WHOAMI 0xD100
28 
29 #define SCD30_CMD_READ_MEASUREMENT 0x0300
30 
31 #define SCD30_CMD_CONTINUOUS_MEASUREMENT \
32  0x0010
33 #define SCD30_CMD_STOP_MEASUREMENTS 0x0104
34 #define SCD30_CMD_SET_MEASUREMENT_INTERVAL \
35  0x4600
36 #define SCD30_CMD_GET_DATA_READY 0x0202
37 #define SCD30_CMD_AUTOMATIC_SELF_CALIBRATION \
38  0x5306
39 #define SCD30_CMD_SET_FORCED_RECALIBRATION_REF \
40  0x5204
41 #define SCD30_CMD_SET_TEMPERATURE_OFFSET 0x5403
42 #define SCD30_CMD_SET_ALTITUDE_COMPENSATION \
43  0x5102
44 #define SCD30_CMD_SOFT_RESET 0xD304
45 #define SCD30_CMD_READ_REVISION 0xD100
46 
52 typedef enum {
53  SCD30_RATE_ONE_SHOT,
54  SCD30_RATE_1_HZ,
55  SCD30_RATE_7_HZ,
56  SCD30_RATE_12_5_HZ,
57  SCD30_RATE_25_HZ,
58 } scd30_rate_t;
59 
60 class Adafruit_SCD30;
61 
63 class Adafruit_SCD30_Temp : public Adafruit_Sensor {
64 public:
67  Adafruit_SCD30_Temp(Adafruit_SCD30 *parent) { _theSCD30 = parent; }
68  bool getEvent(sensors_event_t *);
69  void getSensor(sensor_t *);
70 
71 private:
72  int _sensorID = 0xC02;
73  Adafruit_SCD30 *_theSCD30 = NULL;
74 };
75 
78 class Adafruit_SCD30_Humidity : public Adafruit_Sensor {
79 public:
82  Adafruit_SCD30_Humidity(Adafruit_SCD30 *parent) { _theSCD30 = parent; }
83  bool getEvent(sensors_event_t *);
84  void getSensor(sensor_t *);
85 
86 private:
87  int _sensorID = 0xC02 + 1;
88  Adafruit_SCD30 *_theSCD30 = NULL;
89 };
90 
96 public:
98  ~Adafruit_SCD30();
99 
100  bool begin(uint8_t i2c_addr = SCD30_I2CADDR_DEFAULT, TwoWire *wire = &Wire,
101  int32_t sensor_id = 0);
102 
103  void reset(void);
104  bool dataReady(void);
105  bool getEvent(sensors_event_t *humidity, sensors_event_t *temp);
106 
107  bool read(void);
108 
109  uint16_t getMeasurementInterval(void);
110  bool setMeasurementInterval(uint16_t interval);
111 
112  bool selfCalibrationEnabled(void);
113  bool selfCalibrationEnabled(bool);
114 
115  bool startContinuousMeasurement(uint16_t pressure = 0);
116  uint16_t getAmbientPressureOffset(void);
117 
118  bool setAltitudeOffset(uint16_t altitude);
119  uint16_t getAltitudeOffset(void);
120 
121  bool setTemperatureOffset(uint16_t temp_offset);
122  uint16_t getTemperatureOffset(void);
123 
124  bool forceRecalibrationWithReference(uint16_t reference);
125  uint16_t getForcedCalibrationReference(void);
126 
127  Adafruit_Sensor *getTemperatureSensor(void);
128  Adafruit_Sensor *getHumiditySensor(void);
129  float CO2,
130  temperature,
131  relative_humidity;
132  ;
133 
134 protected:
135  virtual bool _init(int32_t sensor_id);
136 
137  uint16_t _sensorid_humidity,
139 
140  Adafruit_I2CDevice *i2c_dev = NULL;
141 
142  Adafruit_SCD30_Temp *temp_sensor = NULL;
143  Adafruit_SCD30_Humidity *humidity_sensor =
144  NULL;
145 
146 private:
147  friend class Adafruit_SCD30_Temp;
148  friend class Adafruit_SCD30_Humidity;
150 
153  void fillHumidityEvent(sensors_event_t *humidity, uint32_t timestamp);
154  void fillTempEvent(sensors_event_t *temp, uint32_t timestamp);
155  bool sendCommand(uint16_t command, uint16_t argument);
156  bool sendCommand(uint16_t command);
157  uint16_t getAmbiendPressure(void);
158  uint8_t computeCRC8(uint8_t data[], uint8_t len);
159  uint16_t readRegister(uint16_t reg_address);
160 };
161 
162 #endif
uint16_t _sensorid_temp
ID number for temperature.
Definition: Adafruit_SCD30.h:137
Class that stores state and functions for interacting with the SCD30 CO2, Temperature, and Humidity sensor.
Definition: Adafruit_SCD30.h:95
float temperature
The most recent temperature reading.
Definition: Adafruit_SCD30.h:129
void getSensor(sensor_t *)
Gets the sensor_t data for the SCD30&#39;s tenperature.
Definition: Adafruit_SCD30.cpp:454
Adafruit_SCD30_Humidity(Adafruit_SCD30 *parent)
Create an Adafruit_Sensor compatible object for the humidity sensor.
Definition: Adafruit_SCD30.h:82
bool getEvent(sensors_event_t *)
Gets the temperature as a standard sensor event.
Definition: Adafruit_SCD30.cpp:478
#define SCD30_I2CADDR_DEFAULT
SCD30 default i2c address.
Definition: Adafruit_SCD30.h:24
Definition: Adafruit_SCD30.h:78
scd30_rate_t
Allowed values for setDataRate.
Definition: Adafruit_SCD30.h:52
Definition: Adafruit_SCD30.h:63
Adafruit_SCD30_Temp(Adafruit_SCD30 *parent)
Create an Adafruit_Sensor compatible object for the temp sensor.
Definition: Adafruit_SCD30.h:67