Using the SCD30 with Arduino is a simple matter of wiring up the sensor to your Arduino-compatible microcontroller, installing the Adafruit SCD30 library we've written, and running the provided example code.
I2C Wiring
Here is how to wire up the sensor using one of the STEMMA QT connectors. The examples show a Metro but wiring will work the same for an Arduino or other compatible board.
- Connect board VIN (red wire) to Arduino 5V if you are running a 5V board Arduino (Uno, etc.). If your board is 3V, connect to that instead.
- Connect board GND (black wire) to Arduino GND
- Connect board SCL (yellow wire) to Arduino SCL
- Connect board SDA (blue wire) to Arduino SDA
Here is how to wire the sensor to a board using a solderless breadboard:
- Connect board VIN (red wire) to Arduino 5V if you are running a 5V board Arduino (Uno, etc.). If your board is 3V, connect to that instead.
- Connect board GND (black wire) to Arduino GND
- Connect board SCL (yellow wire) to Arduino SCL
- Connect board SDA (blue wire) to Arduino SDA
Library Installation
You can install the Adafruit SCD30 library for Arduino using the Library Manager in the Arduino IDE.
Click the Manage Libraries ... menu item, search for Adafruit SCD30 , and select the Adafruit SCD30 library:
Finally, search for Adafruit Unified Sensor and install that too (you may have to scroll a bit)
After opening the demo file, upload to your Arduino wired up to the sensor. Once you upload the code, you will see the temperature, humidity and eCO2 data values being printed when you open the Serial Monitor (Tools->Serial Monitor) at 115200 baud, similar to this:
The sensor has a lot going on, there's temperature and humidity reading thanks to an SHT31 sensor on board. These values are used internally to normalize the NDIR CO2 readings as well. You can only get data every 2 seconds, which is pretty fast for this kind of sensor! If you want to slow down the readings to reduce power usage, uncomment this section:
// if (!scd30.setMeasurementInterval(10)){ // Serial.println("Failed to set measurement interval"); // while(1){ delay(10);} // }
The valid range is 2 seconds per reading up to 1800 seconds per reading.
// Basic demo for readings from Adafruit SCD30 #include <Adafruit_SCD30.h> Adafruit_SCD30 scd30; void setup(void) { Serial.begin(115200); while (!Serial) delay(10); // will pause Zero, Leonardo, etc until serial console opens Serial.println("Adafruit SCD30 test!"); // Try to initialize! if (!scd30.begin()) { Serial.println("Failed to find SCD30 chip"); while (1) { delay(10); } } Serial.println("SCD30 Found!"); // if (!scd30.setMeasurementInterval(10)){ // Serial.println("Failed to set measurement interval"); // while(1){ delay(10);} // } Serial.print("Measurement Interval: "); Serial.print(scd30.getMeasurementInterval()); Serial.println(" seconds"); } void loop() { if (scd30.dataReady()){ Serial.println("Data available!"); if (!scd30.read()){ Serial.println("Error reading sensor data"); return; } Serial.print("Temperature: "); Serial.print(scd30.temperature); Serial.println(" degrees C"); Serial.print("Relative Humidity: "); Serial.print(scd30.relative_humidity); Serial.println(" %"); Serial.print("CO2: "); Serial.print(scd30.CO2, 3); Serial.println(" ppm"); Serial.println(""); } else { //Serial.println("No data"); } delay(100); }
Page last edited January 22, 2025
Text editor powered by tinymce.