# Adafruit SCD-40 and SCD-41

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/104/000/medium800/adafruit_products_SDC41_top.jpg?1629484349)

Take a deep breath in...now slowly breathe out. Mmm isn't it wonderful? All that air around us, which we bring into our lungs, extracts oxygen from and then breathes out carbon dioxide. CO2 is essential for life on this planet we call Earth - we and plants take turns using and emitting CO2 in an elegant symbiosis. But it's important to keep that CO2 balanced - you don't want too much around, not good for humans and not good for our planet.

![](https://cdn-learn.adafruit.com/assets/assets/000/104/002/medium800/adafruit_products_SDC40_top_header.jpg?1629484517)

The SCD-40 and SCD-41 are photoacoustic 'true' CO2 sensors that will tell you the CO2 PPM (parts-per-million) composition of ambient air. [Unlike the SGP30, this sensor isn't approximating it from VOC gas concentration](https://www.adafruit.com/product/3709)&nbsp;- **they really are measuring the CO2 concentration**! That means they're bigger and more expensive, but they are the real thing. Perfect for environmental sensing, scientific experiments, air quality and ventilation studies, and more.

![](https://cdn-learn.adafruit.com/assets/assets/000/104/003/medium800/adafruit_products_SDC41_top_angle.jpg?1629484528)

[Compared to the illustrious SCD-30](https://www.adafruit.com/product/4867), this sensor uses a different measurement technique, which allows it to be much smaller. The overall data quality should be very similar, however. Like the SCD-30, this sensor has data read over I2C, so it works very nicely with just about any microcontroller or microcomputer. There's both Arduino and Python/CircuitPython code so you can get started in a jiffy.

![](https://cdn-learn.adafruit.com/assets/assets/000/104/007/medium800/adafruit_products_SDC40_top_header.jpg?1629484632)

There are two variants of this sensor - the SCD-40 and SCD-41

- The&nbsp; **SCD-40** &nbsp;is lower cost and is perfect for indoor/outdoor air quality and CO2 measurements. It has a range of **&nbsp;400~2000 ppm** &nbsp;with an accuracy of ±(50 ppm + 5% of reading)
- The&nbsp; **SCD-41** &nbsp;is more expensive, and while it can definitely be used for air quality, it's wide range means it's best used for industrial or scientific CO2 measurements where the ppm can get very high. It has a range of&nbsp; **400~5000 ppm** &nbsp;with an accuracy of ±(40 ppm + 5% of reading)

![](https://cdn-learn.adafruit.com/assets/assets/000/104/005/medium800/adafruit_products_SDC41_STEMMA_side.jpg?1629484551)

Nice sensor, right? So we made it easy for you to get right into your next project. The sensor is soldered onto a custom-made PCB in the[&nbsp; **STEMMA QT** &nbsp;form factor](https://www.adafruit.com/?q=stemma%20qt%20sensor "STEMMA QT form factor"), making them easy to interface with. The&nbsp;[STEMMA QT connectors](https://learn.adafruit.com/introducing-adafruit-stemma-qt/what-is-stemma-qt)&nbsp;on either side are compatible with the&nbsp;[SparkFun Qwiic](https://www.sparkfun.com/qwiic)&nbsp;I2C connectors. This allows you to make solderless connections between your development board and the SCD-4x or to chain it with a wide range of other sensors and accessories using a&nbsp;[**compatible cable**](https://www.adafruit.com/?q=stemma%20qt%20cable).

![](https://cdn-learn.adafruit.com/assets/assets/000/104/004/medium800/adafruit_products_SDC4x_back.jpg?1629484540)

This sensor can run from 3.3 to 5V, but it's more important for it to have a quiet power supply with low ripple, than any particular voltage. For that reason, we've added a 3.3V regulator and level shifters: when connecting to a 5V microcontroller like an Arduino UNO the 5V supply is often shared with other electronic components that add noise. The onboard regulator will keep the voltage nice and quiet. For advanced hackers, they can cut/solder the backtraces to change whether the regulator is enabled and what I2C logic level is desired.

# Adafruit SCD-40 and SCD-41

## Pinouts

![](https://cdn-learn.adafruit.com/assets/assets/000/104/009/medium800/adafruit_products_SCD4x_pinouts.jpg?1629485120)

The SCD-40 and SCD-41 have the same pinouts.

## Power Pins

- **VIN** - This is the power pin. To power the board, give it the same power as the logic level of your microcontroller - e.g. for a 3V microcontroller like a Feather M4, use 3V, or for a 5V microcontroller like Arduino, use 5V.
- **3Vo** - This is the output from the onboard 3.3V regulator. If you have a need for a clean 3.3V output, you can use this! It can provide at least 100mA output.
- **GND** - This is common ground for power and logic.

## I2C Logic Pins

The default I2C address for the SCD-4x is **0x62**.

- **SCL** - I2C clock pin, connect to your microcontroller I2C clock line. There's a **10K pullup** on this pin.
- **SDA** - I2C data pin, connect to your microcontroller I2C data line. There's a **10K pullup** on this pin.
- [**STEMMA QT**](https://learn.adafruit.com/introducing-adafruit-stemma-qt) **&nbsp;-** These connectors allow you to connectors to development boards with **STEMMA QT** connectors or to other things with&nbsp;[various associated accessories](https://www.adafruit.com/?q=JST%20SH%204).

## Status LED

There is a statis LED marked "on" when the sensor is powered (circled in green).

![](https://cdn-learn.adafruit.com/assets/assets/000/130/058/medium800/adafruit_products_stemma-circuit_-_Copy.png?1715783193)

If you do not want this LED to light up (saving power or avoiding light), cut the circuit board jumper in the red box. If you ever want to reenable it, bridge the pads with a bit of solder.

## Jumpers

The SCD-4x can run from 3 to 5V DC, for both power and I2C data/logic. Normally that would mean we wouldn't put a regulator and logic level shifter on the breakout. However, the SCD-4x also does best with a quiet power supply that can also supply ~200mA peak. Since that may or may not be the same as the logic power supply of the microcontroller, advanced users can customize the power/logic level setup for the sensor. This is done using solder jumpers on the back of the breakout.

On the _left_ is the **I2C logic level** jumper. By default, this is set to 3.3V which should work for both 3.3V and 5V logic level boards. Power at Vin can be 5V even if using a 3.3V logic level board, since the I2C logic will be 3.3V. The only reason (should be rare) to change this jumper is if a 5V logic level board does \*not\* work with the 3.3V I2C logic levels. In that case, this jumper can be cut and soldered to change I2C logic to Vin, which should be 5V when using a 5V board.

On the _right_ is the **Sensor Power** jumper. By default, power comes from whatever is connected to Vin. This allows using 5V power if desired. To use the onboard 3.3V voltage regulator, cut and solder this jumper.

If the above description is still confusing, checkout the schematic available at the end of this guide. The jumpers are very simple and it may be easier to just read the schematic to determine what they do.

![](https://cdn-learn.adafruit.com/assets/assets/000/119/500/medium800/adafruit_products_SDC4x_board_back_correct_jumper_labels.jpg?1679085170)

Danger: 

![](https://cdn-learn.adafruit.com/assets/assets/000/104/077/medium800/adafruit_products_image.png?1630015247)

# Adafruit SCD-40 and SCD-41

## Python & CircuitPython

It's easy to use the **SCD-4x** with Python or CircuitPython, and the [Adafruit CircuitPython SCD4x](https://github.com/adafruit/Adafruit_CircuitPython_SCD4x) module. This module allows you to easily write Python code that reads CO2, temperature, and humidity from the **SCD-4x** sensor.

You can use this sensor with any CircuitPython microcontroller board or with a computer that has GPIO and Python [thanks to Adafruit\_Blinka, our CircuitPython-for-Python compatibility library](https://learn.adafruit.com/circuitpython-on-raspberrypi-linux).

## CircuitPython Microcontroller Wiring

First wire up a SCD-4x to your board exactly as shown below. Here's an example of wiring a Feather M4 to the sensor with I2C using one of the handy [**STEMMA QT**](https://learn.adafruit.com/introducing-adafruit-stemma-qt) connectors:

- **Board 3V** &nbsp;to&nbsp;**sensor VIN (red wire)**
- **Board GND** &nbsp;to&nbsp;**sensor GND (black wire)**
- **Board SCL** &nbsp;to&nbsp;**sensor SCL (yellow wire)**
- **Board SDA** &nbsp;to&nbsp;**sensor SDA (blue wire)**

![adafruit_products_SCD4x_feather_STEMMA_bb.jpg](https://cdn-learn.adafruit.com/assets/assets/000/104/044/medium640/adafruit_products_SCD4x_feather_STEMMA_bb.jpg?1629920079)

You can also use the standard **0.100" pitch** headers to wire it up on a breadboard:

- **Board 3V** &nbsp;to&nbsp;**sensor VIN (red wire)**
- **Board GND** &nbsp;to&nbsp;**sensor GND (black wire)**
- **Board SCL** &nbsp;to&nbsp;**sensor SCL (yellow wire)**
- **Board SDA** &nbsp;to&nbsp;**sensor SDA (blue wire)**

![adafruit_products_SCD4x_feather_breadboard_bb.jpg](https://cdn-learn.adafruit.com/assets/assets/000/104/045/medium640/adafruit_products_SCD4x_feather_breadboard_bb.jpg?1629920116)

## Python Computer Wiring

Since there's _dozens_ of Linux computers/boards you can use, we will show wiring for Raspberry Pi. For other platforms, [please visit the guide for CircuitPython on Linux to see whether your platform is supported](https://learn.adafruit.com/circuitpython-on-raspberrypi-linux).&nbsp;

Here's the Raspberry Pi wired to the sensor using I2C and a [**STEMMA QT**](https://learn.adafruit.com/introducing-adafruit-stemma-qt) connector:

- **Pi 3V** &nbsp;to&nbsp;**sensor VIN (red wire)**
- **Pi GND** &nbsp;to&nbsp;**sensor GND (black wire)**
- **Pi SCL** &nbsp;to&nbsp;**sensor SCL (yellow wire)**
- **Pi SDA** &nbsp;to&nbsp;**sensor SDA (blue wire)**

![adafruit_products_SCD4x_RasPi_STEMMA_bb.jpg](https://cdn-learn.adafruit.com/assets/assets/000/107/295/medium640/adafruit_products_SCD4x_RasPi_STEMMA_bb.jpg?1639415220)

Finally here is an example of how to wire up a Raspberry Pi to the sensor using a solderless breadboard:

- **Pi 3V** &nbsp;to&nbsp;**sensor VIN (red wire)**
- **Pi GND** &nbsp;to&nbsp;**sensor GND (black wire)**
- **Pi SCL** &nbsp;to&nbsp;**sensor SCL (yellow wire)**
- **Pi SDA** &nbsp;to&nbsp;**sensor SDA (blue wire)**

![adafruit_products_SCD4x_RasPi_breadboard_bb.jpg](https://cdn-learn.adafruit.com/assets/assets/000/104/047/medium640/adafruit_products_SCD4x_RasPi_breadboard_bb.jpg?1629920180)

## Python Installation of SCD4x Library

You'll need to install the **Adafruit\_Blinka** library that provides the CircuitPython support in Python. This may also require enabling I2C on your platform and verifying you are running Python 3.&nbsp;[Since each platform is a little different, and Linux changes often, please visit the CircuitPython on Linux guide to get your computer ready](https://learn.adafruit.com/circuitpython-on-raspberrypi-linux)!

Once that's done, from your command line run the following command:

- `pip3 install adafruit-circuitpython-scd4x`

If your default Python is version 3, you may need to run `pip` instead. Make sure you aren't trying to use CircuitPython on Python 2.x, it isn't supported!

## CircuitPython Usage

To use with CircuitPython, you need to first install the SCD4x library, and its dependencies, into the **lib** folder on your **CIRCUITPY** drive. Then you need to update **code.py** with the example script.

Thankfully, we can do this in one go. In the example below, click the **Download Project Bundle** button below to download the necessary libraries and the **code.py** file in a zip file. Extract the contents of the zip file, and copy the **entire**  **lib**  **folder** and the **code.py** file to your **CIRCUITPY** drive.

Your **CIRCUITPY/lib** folder should contain the following folder and file:

- **adafruit\_bus\_device/**
- **adafruit\_scd4x.mpy**

![CIRCUITPY](https://adafruit.github.io/Adafruit_CircuitPython_Bundle/scd4x_scd4x_simpletest.py.png)

## Python Usage

Once you have the library `pip3`-installed on your computer, copy or download the following example to your computer, and run the following, replacing `code.py` with whatever you named the file: `python3 code.py`

## Example Code:
https://github.com/adafruit/Adafruit_CircuitPython_SCD4X/blob/main/examples/scd4x_simpletest.py

 **If running CircuitPython:** Once everything is saved to the **CIRCUITPY** drive, [connect to the serial console](https://learn.adafruit.com/welcome-to-circuitpython/kattni-connecting-to-the-serial-console) to see the data printed out!

**If running Python:** The console output will appear wherever you are running Python.

![](https://cdn-learn.adafruit.com/assets/assets/000/104/043/medium800/adafruit_products_SCD4x_CP_serial_output.png?1629919533)

Here is a quick explanation of the code and library features.

First, you import the necessary modules and library, and initialize the I2C connection with the sensor. Next, you print the serial number.

Then, you start measuring data with `start_periodic_measurement()`.

Now you're ready to read values from the sensor using these properties:

- `data_ready` - Check the sensor to see if new data is available.
- `CO2` - The CO2 concentration in PPM (parts per million).  
- `temperature` - The current temperature in degrees Celsius.  
- `relative_humidity` - The current relative humidity in %rH.

That's all there is to using the SCD-40 and SCD-41 with CircuitPython!

# Adafruit SCD-40 and SCD-41

## Python Docs

# Adafruit SCD-40 and SCD-41

## Arduino

Using the SCD4x with Arduino involves wiring up the sensor to your Arduino-compatible microcontroller, installing the [Arduino I2C SCD4x](https://github.com/Sensirion/arduino-i2c-scd4x) library written by Sensirion, and running the provided example code.

## I2C Wiring

Here is how to wire up the sensor using one of the [**STEMMA QT**](https://learn.adafruit.com/introducing-adafruit-stemma-qt) connectors. The examples show a Metro but wiring will work the same for an Arduino or other compatible board.

- Connect&nbsp;**board VIN (red wire)** to&nbsp; **Arduino 5V** &nbsp;if you are running a **5V** board Arduino (Uno, etc.).&nbsp;If your board is **3V,** connect to that instead.
- Connect **board GND (black wire)&nbsp;**to&nbsp; **Arduino**  **GND**
- Connect **board SCL (yellow wire)&nbsp;**to&nbsp; **Arduino**  **SCL**
- Connect **board SDA (blue wire)&nbsp;**to&nbsp; **Arduino**  **SDA**

![adafruit_products_SCD4x_Arduino_STEMMA_bb.jpg](https://cdn-learn.adafruit.com/assets/assets/000/104/050/medium640/adafruit_products_SCD4x_Arduino_STEMMA_bb.jpg?1629921729)

Here is how to wire the sensor to a board using a solderless breadboard:

- Connect&nbsp;**board VIN (red wire)** to&nbsp; **Arduino 5V** &nbsp;if you are running a **5V** board Arduino (Uno, etc.).&nbsp;If your board is **3V,** connect to that instead.
- Connect **board GND (black wire)&nbsp;**to&nbsp; **Arduino**  **GND**
- Connect **board SCL (yellow wire)&nbsp;**to&nbsp; **Arduino**  **SCL**
- Connect **board SDA (blue wire)&nbsp;**to&nbsp; **Arduino**  **SDA**

![adafruit_products_SCD4x_Arduino_breadboard_bb.jpg](https://cdn-learn.adafruit.com/assets/assets/000/104/051/medium640/adafruit_products_SCD4x_Arduino_breadboard_bb.jpg?1629921773)

## **Library Installation**

You can install the **Sensirion I2C SCD4x** library for Arduino using the Library Manager in the Arduino IDE.

![](https://cdn-learn.adafruit.com/assets/assets/000/104/034/medium800/adafruit_products_Arduino_Open_Library_Manager.png?1629841285)

Click the&nbsp; **Manage Libraries ...** menu item, search for **SCD4x** ,&nbsp;and select the **Sensirion I2C SCD4x** library:

![](https://cdn-learn.adafruit.com/assets/assets/000/104/035/medium800/adafruit_products_SCD4x_arduino_library_install.png?1629841405)

If asked about dependencies, click "Install all".

![](https://cdn-learn.adafruit.com/assets/assets/000/134/953/medium800/adafruit_products_Screenshot_2025-01-31_at_15.13.40.png?1738336462)

## **Load Example**

Open up&nbsp; **File -\> Examples -\> Sensirion I2C SCD4x -\> exampleusage**

```auto
/*
 * THIS FILE IS AUTOMATICALLY GENERATED
 *
 * Generator:     sensirion-driver-generator 1.1.2
 * Product:       scd4x
 * Model-Version: 2.0
 */
/*
 * Copyright (c) 2025, Sensirion AG
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * * Redistributions of source code must retain the above copyright notice, this
 *   list of conditions and the following disclaimer.
 *
 * * Redistributions in binary form must reproduce the above copyright notice,
 *   this list of conditions and the following disclaimer in the documentation
 *   and/or other materials provided with the distribution.
 *
 * * Neither the name of Sensirion AG nor the names of its
 *   contributors may be used to endorse or promote products derived from
 *   this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
#include <Arduino.h>
#include <SensirionI2cScd4x.h>
#include <Wire.h>

// macro definitions
// make sure that we use the proper definition of NO_ERROR
#ifdef NO_ERROR
#undef NO_ERROR
#endif
#define NO_ERROR 0

SensirionI2cScd4x sensor;

static char errorMessage[64];
static int16_t error;

void PrintUint64(uint64_t& value) {
    Serial.print("0x");
    Serial.print((uint32_t)(value >> 32), HEX);
    Serial.print((uint32_t)(value & 0xFFFFFFFF), HEX);
}

void setup() {

    Serial.begin(115200);
    while (!Serial) {
        delay(100);
    }
    Wire.begin();
    sensor.begin(Wire, SCD41_I2C_ADDR_62);

    uint64_t serialNumber = 0;
    delay(30);
    // Ensure sensor is in clean state
    error = sensor.wakeUp();
    if (error != NO_ERROR) {
        Serial.print("Error trying to execute wakeUp(): ");
        errorToString(error, errorMessage, sizeof errorMessage);
        Serial.println(errorMessage);
    }
    error = sensor.stopPeriodicMeasurement();
    if (error != NO_ERROR) {
        Serial.print("Error trying to execute stopPeriodicMeasurement(): ");
        errorToString(error, errorMessage, sizeof errorMessage);
        Serial.println(errorMessage);
    }
    error = sensor.reinit();
    if (error != NO_ERROR) {
        Serial.print("Error trying to execute reinit(): ");
        errorToString(error, errorMessage, sizeof errorMessage);
        Serial.println(errorMessage);
    }
    // Read out information about the sensor
    error = sensor.getSerialNumber(serialNumber);
    if (error != NO_ERROR) {
        Serial.print("Error trying to execute getSerialNumber(): ");
        errorToString(error, errorMessage, sizeof errorMessage);
        Serial.println(errorMessage);
        return;
    }
    Serial.print("serial number: ");
    PrintUint64(serialNumber);
    Serial.println();
    //
    // If temperature offset and/or sensor altitude compensation
    // is required, you should call the respective functions here.
    // Check out the header file for the function definitions.
    // Start periodic measurements (5sec interval)
    error = sensor.startPeriodicMeasurement();
    if (error != NO_ERROR) {
        Serial.print("Error trying to execute startPeriodicMeasurement(): ");
        errorToString(error, errorMessage, sizeof errorMessage);
        Serial.println(errorMessage);
        return;
    }
    //
    // If low-power mode is required, switch to the low power
    // measurement function instead of the standard measurement
    // function above. Check out the header file for the definition.
    // For SCD41, you can also check out the single shot measurement example.
    //
}

void loop() {

    bool dataReady = false;
    uint16_t co2Concentration = 0;
    float temperature = 0.0;
    float relativeHumidity = 0.0;
    //
    // Slow down the sampling to 0.2Hz.
    //
    delay(5000);
    error = sensor.getDataReadyStatus(dataReady);
    if (error != NO_ERROR) {
        Serial.print("Error trying to execute getDataReadyStatus(): ");
        errorToString(error, errorMessage, sizeof errorMessage);
        Serial.println(errorMessage);
        return;
    }
    while (!dataReady) {
        delay(100);
        error = sensor.getDataReadyStatus(dataReady);
        if (error != NO_ERROR) {
            Serial.print("Error trying to execute getDataReadyStatus(): ");
            errorToString(error, errorMessage, sizeof errorMessage);
            Serial.println(errorMessage);
            return;
        }
    }
    //
    // If ambient pressure compenstation during measurement
    // is required, you should call the respective functions here.
    // Check out the header file for the function definition.
    error =
        sensor.readMeasurement(co2Concentration, temperature, relativeHumidity);
    if (error != NO_ERROR) {
        Serial.print("Error trying to execute readMeasurement(): ");
        errorToString(error, errorMessage, sizeof errorMessage);
        Serial.println(errorMessage);
        return;
    }
    //
    // Print results in physical units.
    Serial.print("CO2 concentration [ppm]: ");
    Serial.print(co2Concentration);
    Serial.println();
    Serial.print("Temperature [°C]: ");
    Serial.print(temperature);
    Serial.println();
    Serial.print("Relative Humidity [RH]: ");
    Serial.print(relativeHumidity);
    Serial.println();
}
```

After opening the demo file, upload to your Arduino wired up to the sensor. Once you upload the code, you will see the **CO2, t**** emperature, and relative humidity data**&nbsp;values being printed when you open the Serial Monitor (**Tools-\>Serial Monitor**) at**115200 baud**, similar to this:

![](https://cdn-learn.adafruit.com/assets/assets/000/134/957/medium800/adafruit_products_Screenshot_2025-01-31_at_15.54.15.png?1738338873)

# Adafruit SCD-40 and SCD-41

## WipperSnapper

![](https://cdn-learn.adafruit.com/assets/assets/000/128/305/medium800/adafruit_products_01_DeviceList.png?1709222445)

## What is WipperSnapper

WipperSnapper is a firmware designed to turn any WiFi-capable board into an Internet-of-Things device without programming a single line of code. WipperSnapper connects to [Adafruit IO](https://io.adafruit.com/), a web&nbsp;platform designed ([by Adafruit!](https://www.adafruit.com/about)) to&nbsp;_display_,&nbsp;_respond_, and&nbsp;_interact_&nbsp;with your project's data.

Simply load the WipperSnapper firmware onto your board, add credentials, and plug it into power. Your board will automatically register itself with your Adafruit IO account.

From there, you can add&nbsp;_components_&nbsp;to your board such as buttons, switches, potentiometers, sensors, and more! Components are&nbsp;_dynamically&nbsp;_added to hardware, so you can&nbsp;immediately start interacting, logging, and streaming the data your projects produce without writing code.

If you've never used WipperSnapper, click below to read through the quick start guide before continuing.

[Quickstart: Adafruit IO WipperSnapper](https://learn.adafruit.com/quickstart-adafruit-io-wippersnapper)
## Wiring
First, wire up a SCD-4x to your board exactly as follows. Here is an example of the SCD-4x wired to an&nbsp;[Adafruit ESP32 Feather V2](https://www.adafruit.com/product/5400)&nbsp;using I2C&nbsp;[with a STEMMA QT cable (no soldering required)](https://www.adafruit.com/product/4210)

- **Board 3V** &nbsp;to&nbsp;**sensor VIN (red wire on STEMMA QT)**  
- **Board GND** &nbsp;to&nbsp;**sensor GND (black wire on STEMMA QT)**  
- **Board SCL** &nbsp;to&nbsp;**sensor SCL (yellow wire on STEMMA QT)**  
- **Board SDA** &nbsp;to&nbsp;**sensor SDA (blue wire on STEMMA QT)**

![adafruit_products_scd4x-2.png](https://cdn-learn.adafruit.com/assets/assets/000/114/022/medium640/adafruit_products_scd4x-2.png?1659988662)

![adafruit_products_scd4x-1.png](https://cdn-learn.adafruit.com/assets/assets/000/114/023/medium640/adafruit_products_scd4x-1.png?1659988670)

## Usage

Connect your board to Adafruit IO Wippersnapper and **[navigate to the WipperSnapper board list](https://io.adafruit.com/wippersnapper).**

On this page, **select the WipperSnapper board you're using** to be brought to the board's interface page.

![](https://cdn-learn.adafruit.com/assets/assets/000/128/312/medium800/adafruit_products_02_DeviceSelection_croppped.png?1709223506)

If you do not see your board listed here - you need [to connect your board to Adafruit IO](https://learn.adafruit.com/quickstart-adafruit-io-wippersnapper) first.

On the device page, quickly&nbsp; **check that you're running the latest version of the WipperSnapper firmware**.

The device tile on the left indicates the version number of the firmware running on the connected board.

- **If the firmware version is green with a checkmark -** &nbsp;continue with this guide.
- **If the firmware version is red with an "X" -** &nbsp;[update to the latest WipperSnapper firmware](https://learn.adafruit.com/quickstart-adafruit-io-wippersnapper)&nbsp;on your board before continuing.

![adafruit_products_04_LatestVersion.png](https://cdn-learn.adafruit.com/assets/assets/000/128/310/medium640/adafruit_products_04_LatestVersion.png?1709222860)

![adafruit_products_04_UpdateRequired.png](https://cdn-learn.adafruit.com/assets/assets/000/128/311/medium640/adafruit_products_04_UpdateRequired.png?1709222873)

Next, make sure the sensor is plugged into your board and click the **&nbsp;I2C Scan&nbsp;** button.

![](https://cdn-learn.adafruit.com/assets/assets/000/113/177/medium800/sensor_page_crop_scan.png?1657724520)

You should see the SCD-4x's default I2C address of `0x62`&nbsp;pop up in the I2C scan list.

![](https://cdn-learn.adafruit.com/assets/assets/000/114/095/medium800/adafruit_products_ksnip_20220811-153958.png?1660246844)

###  I don't see the sensor's I2C address listed! 


First, double-check the connection and/or wiring between the sensor and the board.

Then, reset the board and let it re-connect to Adafruit IO WipperSnapper.

With the sensor detected in an I2C scan, you're ready to add the sensor to your board.

**Click the New Component button or the + button** to bring up the component picker.

![](https://cdn-learn.adafruit.com/assets/assets/000/127/931/medium800/sensor_page_temperature___humidity_06_AddComponent.png?1708631009)

Adafruit IO supports a large amount of components. To quickly find your sensor, type&nbsp;`SCD4`&nbsp;into the search bar, then select the&nbsp; **SCD-40/SCD-**** 41**&nbsp;component.

![](https://cdn-learn.adafruit.com/assets/assets/000/128/309/medium800/adafruit_products_kg8W6BpEWk.png?1709222777)

On the component configuration page, the SCD-4x's sensor address should be listed along with the sensor's settings.

The&nbsp; **Send Every** &nbsp;option is specific to each sensor's measurements. This option will tell the Feather how often it should read from each of the SCD-4x's three sensors and send the data to Adafruit IO. Measurements can range from every 30 seconds to every 24 hours.

For this example, set the&nbsp; **Send Every&nbsp;** interval for each sensor to every 30 seconds.

![](https://cdn-learn.adafruit.com/assets/assets/000/114/097/medium800/adafruit_products_ksnip_20220811-154013.png?1660246873)

Your device interface should now show the sensor components you created. After the interval you configured elapses, WipperSnapper will automatically read values from the sensor(s) and send them to Adafruit IO.

![](https://cdn-learn.adafruit.com/assets/assets/000/114/101/medium800thumb/adafruit_products_ezgif.com-gif-maker_%285%29.jpg?1660248247)

To view the data that has been logged from the sensor, click on the graph next to the sensor name.

![](https://cdn-learn.adafruit.com/assets/assets/000/114/100/medium800/adafruit_products_ksnip_20220811-160242.png?1660248240)

Here you can see the feed history and edit things about the feed such as the name, privacy, webhooks associated with the feed and more. If you want to learn more about how feeds work, [check out this page](https://learn.adafruit.com/all-the-internet-of-things-episode-four-adafruit-io/advanced-feeds).

The SCD-4x has three sensors that each have their own feeds. In this picture, we're looking at the CO2 sensor, but if you click on the graph icon for the different sensors you'll see their feed history.

![](https://cdn-learn.adafruit.com/assets/assets/000/114/098/medium800/adafruit_products_ksnip_20220811-160112.png?1660248101)

For IO Free accounts, feed data is stored for a maximum of 30 days and there's a maximum of 10 feeds. In this guide, you created three feeds (one for each of the SCD-4x's sensors). If you’d like to store data for more than 30 days, increase the number of feeds (components) you can use with WipperSnapper, or increase your data rate to send more sensor measurements to Adafruit IO - [upgrade your account to Adafruit IO Plus](https://io.adafruit.com/plus).

# Adafruit SCD-40 and SCD-41

## Downloads

## Files

- [SCD-4x datasheet](https://cdn-learn.adafruit.com/assets/assets/000/104/015/original/Sensirion_CO2_Sensors_SCD4x_Datasheet.pdf?1629489682)
- [EagleCAD PCB files on GitHub](https://github.com/adafruit/Adafruit-SCD-4x-PCB)
- [3D models on GitHub](https://github.com/adafruit/Adafruit_CAD_Parts/tree/main/5187%20SCD-40%20C02%20Sensor)
- [Fritzing object in the Adafruit Fritzing Library](https://github.com/adafruit/Fritzing-Library/blob/master/parts/Adafruit%20SCD4x.fzpz)

# Schematic and Fab Print

Fab print shows SCD-41 - the SCD-40 is the same!

![](https://cdn-learn.adafruit.com/assets/assets/000/104/048/medium800/adafruit_products_SCD4x_sch.png?1629921323)

![](https://cdn-learn.adafruit.com/assets/assets/000/104/049/medium800/adafruit_products_SCD4x_fab_print.png?1629921374)

![](https://cdn-learn.adafruit.com/assets/assets/000/113/700/medium800/adafruit_products_5187_SCD-40_C02_Sensor.jpg?1659029813)


## Primary Products

### Adafruit SCD-40 - True CO2, Temperature and Humidity Sensor

[Adafruit SCD-40 - True CO2, Temperature and Humidity Sensor](https://www.adafruit.com/product/5187)
Take a deep breath in...now slowly breathe out. Mmm isn't it wonderful? All that air around us, which we bring into our lungs, extracts oxygen from and then breathes out carbon dioxide. CO2 is essential for life on this planet we call Earth - we and plants&nbsp;take turns using and...

In Stock
[Buy Now](https://www.adafruit.com/product/5187)
[Related Guides to the Product](https://learn.adafruit.com/products/5187/guides)
### Adafruit SCD-41 - True CO2 Temperature and Humidity Sensor

[Adafruit SCD-41 - True CO2 Temperature and Humidity Sensor](https://www.adafruit.com/product/5190)
Take a deep breath in...now slowly breathe out. Mmm isn't it wonderful? All that air around us, which we bring into our lungs, extracts oxygen from and then breathes out carbon dioxide. CO2 is essential for life on this planet we call Earth - we and plants&nbsp;take turns using and...

In Stock
[Buy Now](https://www.adafruit.com/product/5190)
[Related Guides to the Product](https://learn.adafruit.com/products/5190/guides)

## Featured Products

### STEMMA QT / Qwiic JST SH 4-Pin Cable - 50mm Long

[STEMMA QT / Qwiic JST SH 4-Pin Cable - 50mm Long](https://www.adafruit.com/product/4399)
This 4-wire cable is&nbsp;50mm / 1.9" long and fitted with JST SH female 4-pin connectors on both ends. Compared with the chunkier JST PH these are 1mm pitch instead of 2mm, but still have a nice latching feel, while being easy to insert and remove.

<a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/4399)
[Related Guides to the Product](https://learn.adafruit.com/products/4399/guides)
### STEMMA QT / Qwiic JST SH 4-pin to Premium Male Headers Cable

[STEMMA QT / Qwiic JST SH 4-pin to Premium Male Headers Cable](https://www.adafruit.com/product/4209)
This 4-wire cable is a little over 150mm / 6" long and fitted with JST-SH female 4-pin connectors on one end and premium Dupont male headers on the other. Compared with the chunkier JST-PH these are 1mm pitch instead of 2mm, but still have a nice latching feel, while being easy to insert...

In Stock
[Buy Now](https://www.adafruit.com/product/4209)
[Related Guides to the Product](https://learn.adafruit.com/products/4209/guides)
### STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long

[STEMMA QT / Qwiic JST SH 4-pin Cable - 100mm Long](https://www.adafruit.com/product/4210)
This 4-wire cable is a little over 100mm / 4" long and fitted with JST-SH female 4-pin connectors on both ends. Compared with the chunkier JST-PH these are 1mm pitch instead of 2mm, but still have a nice latching feel, while being easy to insert and remove.

<a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/4210)
[Related Guides to the Product](https://learn.adafruit.com/products/4210/guides)

## Related Guides

- [DIY Trinkey No-Soldering USB Air Quality Monitor](https://learn.adafruit.com/diy-trinkey-no-solder-air-quality-monitor.md)
- [Using Piezo Buzzers with WipperSnapper](https://learn.adafruit.com/using-piezo-buzzers-with-wippersnapper.md)
- [Air Quality Monitor and Case](https://learn.adafruit.com/aqi-case.md)
- [Disconnected CO2 Data Logger](https://learn.adafruit.com/disconnected-co2-data-logger.md)
- [No-Code Indoor Grow Monitor with PPFD and VPD Measurements](https://learn.adafruit.com/no-code-indoor-grow-monitor.md)
- [No-Code IoT CO2 "Canary In a Coalmine"](https://learn.adafruit.com/iot-canary.md)
- [Raspberry Pi Azure IoT Hub Dashboard with CircuitPython](https://learn.adafruit.com/raspberry-pi-iot-dashboard-with-azure-and-circuitpython.md)
- [NeXT Bus Mouse to USB HID with CircuitPython](https://learn.adafruit.com/next-bus-mouse-to-usb-hid-with-circuitpython.md)
- [Adafruit LiIon or LiPoly Charger BFF Add-On for QT Py](https://learn.adafruit.com/adafruit-qt-py-charger-bff.md)
- [RGB & HSV NeoPixel Dialer](https://learn.adafruit.com/rgb-hsv-neopixel-dialer.md)
- [Adafruit Hallowing M4](https://learn.adafruit.com/adafruit-hallowing-m4.md)
- [Adafruit I2C QT Rotary Encoder](https://learn.adafruit.com/adafruit-i2c-qt-rotary-encoder.md)
- [Adafruit HX711 24-bit ADC](https://learn.adafruit.com/adafruit-hx711-24-bit-adc.md)
- [Adafruit TMC2209 Stepper Motor Driver Breakout Board](https://learn.adafruit.com/adafruit-tmc2209-stepper-motor-driver-breakout-board.md)
- [Adafruit Qualia High Res Displayport Desktop Monitor](https://learn.adafruit.com/qualia-high-res-displayport-desktop-monitor.md)
