Skip to main content

Grove - CO2 & Temperature & Humidity Sensor (SCD30)

The Grove - CO2 & Temperature & Humidity Sensor (SCD30) is a high precision carbon dioxide sensor, which is based on Sensirion SCD30. The measuring range of this sensor is 0 ppm-40'000 ppm, and the measurement accuracy can reach to ±(30 ppm + 3%) between 400ppm to 10'000ppm.

In addition to the Non-Dispersive Infrared(NDIR) measurement technology for CO2 detection, the SCD30 integrates Sensirion humidity and temperature sensors on the same sensor module.

Upgradable to Industrial Sensors

With the SenseCAP S2110 controller and S2100 data logger, you can easily turn the Grove into a LoRaWAN® sensor. Seeed not only helps you with prototyping but also offers you the possibility to expand your project with the SenseCAP series of robust industrial sensors.

SenseCAP S210x series industrial sensors provide an out-of-box experience for environmental sensing. Please refer to the S2103 Wireless CO2, Temperature, and Humidity Sensor with higher performance and robustness for air quality monitoring. The series includes sensors for soil moisture, air temperature and humidity, light intensity, CO2, EC, and an 8-in-1 weather station. Try the latest SenseCAP S210x for your next successful industrial project.

SenseCAP Industrial Sensor
S2103 Air Temp & Humidity & CO2


Product VersionChangesReleased Date
Grove - CO2 & Temperature & Humidity Sensor (SCD30) V1.0InitialDec 2018

Application Ideas

  • Air Purifier
  • Environmental Monitoring
  • Plant Environmental Monitoring


  • NDIR CO2 sensor technology
  • Integrated temperature and humidity sensor
  • Best performance-to-price ratio
  • Dual-channel detection for superior stability
  • Digital interface I2C
  • Low power consumption
  • Ultra-long sensor lifetime (15 years)


Supply voltage3.3V / 5V
Operating temperature0 – 50℃
Storage temperature- 40°C – 70°C
Humidity operating conditions0 – 95 %RH
Sensor lifetime15 years
I2C Address0x61
SizeL: 61mm W: 42mm H: 19mm
Package SizeL: 110mm W: 70mm H: 40mm
Gross weight27g
Table 1.General Specification
CO2 measurement range0 – 40’000 ppm
Accuracy400ppm – 10'000ppm± (30 ppm + 3%)
Repeatability400ppm – 10'000ppm10ppm
Response timeτ63%20 s
Table 2.CO2 Sensor Specifications
Humidity measurement range0 %RH – 100 %RH
Accuracy0 – 50°C, 0 – 100%RH±2 %RH
Repeatability0.1 %RH
Response timeτ63%8 s
Table 3.Humidity Sensor Specifications
Temperature measurement range-40°C – 120°C
Accuracy0 – 50°C±0.5°C
Response timeτ63%> 2 s
Table 4.Temperature Sensor Specifications
Average currentUpdate interval 2 s19 mA
Max. currentDuring measurement75 mA
Energy consumption1 measurement120 mJ
Table 5.Electrical Specifications

Hardware Overview

Platforms Supported

ArduinoRaspberry Pi

Getting Started

Play With Arduino


Materials required

Seeeduino V4.2Base ShieldGrove-CO2 & T&H SCD30
Get ONE NowGet ONE NowGet ONE Now

In addition, you can consider our new Seeeduino Lotus M0+, which is equivalent to the combination of Seeeduino V4.2 and Baseshield.


1 Please plug the USB cable gently, otherwise you may damage the port. Please use the USB cable with 4 wires inside, the 2 wires cable can't transfer data. If you are not sure about the wire you have, you can click here to buy

2 Each Grove module comes with a Grove cable when you buy. In case you lose the Grove cable, you can click here to buy.

Hardware Connection

  • Step 1. Connect the Grove - CO2 & Temperature & Humidity Sensor (SCD30) to the I2C port of the Base Shield.

  • Step 2. Plug Grove - Base Shield into Seeeduino.

  • Step 3. Connect Seeeduino to PC via a USB cable.


    If this is the first time you work with Arduino, we strongly recommend you to see [Getting Started with Arduino]( before the start.
  • Step 1. Download the Seeed SCD30 Library Library from Github.

  • Step 2. Refer to How to install library to install library for Arduino.

  • Step 3. Restart the Arduino IDE. Open the example, you can open it in the following three ways: a. Open it directly in the Arduino IDE via the path: File --> Examples -->Grove_scd30_co2_sensor-->SCD30_Example.

    b. Open it in your computer by click the SCD30_Example.ino which you can find in the folder XXXX\Arduino\libraries\Seeed_SCD30-master\examples\SCD30_Example, XXXX is the location you installed the Arduino IDE.

    c. Or, you can just click the icon in upper right corner of the code block to copy the following code into a new sketch in the Arduino IDE.

#include "SCD30.h"

#if defined(ARDUINO_ARCH_AVR)
#pragma message("Defined architecture for ARDUINO_ARCH_AVR.")
#define SERIAL Serial
#elif defined(ARDUINO_ARCH_SAM)
#pragma message("Defined architecture for ARDUINO_ARCH_SAM.")
#define SERIAL SerialUSB
#elif defined(ARDUINO_ARCH_SAMD)
#pragma message("Defined architecture for ARDUINO_ARCH_SAMD.")
#define SERIAL SerialUSB
#elif defined(ARDUINO_ARCH_STM32F4)
#pragma message("Defined architecture for ARDUINO_ARCH_STM32F4.")
#define SERIAL SerialUSB
#pragma message("Not found any architecture.")
#define SERIAL Serial

void setup()
SERIAL.println("SCD30 Raw Data");

void loop()
float result[3] = {0};

SERIAL.print("Carbon Dioxide Concentration is: ");
SERIAL.println(" ppm");
SERIAL.println(" ");
SERIAL.print("Temperature = ");
SERIAL.println(" ℃");
SERIAL.println(" ");
SERIAL.print("Humidity = ");
SERIAL.println(" %");
SERIAL.println(" ");
SERIAL.println(" ");
SERIAL.println(" ");


    The library file may be updated. This code may not be applicable to the updated library file, so we recommend that you use the first two methods.
  • Step 4. Upload the demo. If you do not know how to upload the code, please check How to upload code.

If everything goes well, the raw data of the Grove - CO2 & Temperature & Humidity Sensor (SCD30) should be able to read from Serial Monitor.

Calibration and Placement

In order to get more accurate results in a practical scenario, you need to pay attention to the following two points:

    1. The correct placement
    1. Calibration


Please refer to the SCD30 Design-In Guidelines for the correct placement.


When activated for the first time a period of minimum 7 days is needed so that the algorithm can find its initial parameter set for ASC. The sensor has to be exposed to fresh air for at least 1 hour every day. Also during that period, the sensor may not be disconnected from the power supply, otherwise the procedure to find calibration parameters is aborted and has to be restarted from the beginning. The successfully calculated parameters are stored in non-volatile memory of the SCD30 having the effect that after a restart the previously found parameters for ASC are still present. For more detail about the calibration, please refer to the Interface Description Sensirion SCD30 Sensor Module

There are two ino sample in the SCD30 library foldor, you can run the SCD30_auto_calibration.ino to start the calibration.

Play With Wio Terminal (ArduPy)


  • Step 1. Prepare the below stuffs:
Wio TerminalGrove-CO2 & T&H SCD30
Get One NowGet One Now
  • Step 2. Connect Grove-CO2 & T&H SCD30 to the I2C Grove port of Wio Terminal.

  • Step 3. Connect the Wio Terminal to PC through USB Type-C cable.


  • Step 1. Follow ArduPy Getting Started to configure the ArduPy development environment on Wio Terminal.

  • Step 2. Make sure that the ArduPy firmware is flashed into Wio Terminal. For more information, please follow here.

aip install Seeed-Studio/seeed-ardupy-scd30
aip build
aip flash
  • Step 3. Copy the following code and save it as
from arduino import grove_scd30
from machine import LCD
from machine import Sprite
import time

scd30 = grove_scd30()
lcd = LCD()
spr = Sprite(lcd) # Create a buff

def main():
spr.createSprite(320, 240)
while True:
spr.drawString("SCD30 Reading", 90, 10)
spr.drawFastHLine(40, 35, 240, lcd.color.DARKGREY)
spr.drawString("- CO2 Level: ", 20, 50)
spr.drawString("- Temperature: ", 20, 80)
spr.drawString("- Humidity: ", 20, 110)

data = scd30.getCarbonDioxideConcentration()
spr.drawFloat(data[0], 2,220,50) # CO2
spr.drawFloat(data[1], 2, 220,80)
spr.drawFloat(data[2], 2, 220,110)

print("\nCarbon Dioxide Concentration:", data[0])
print("Temperature:", data[1])
print("Humidity:", data[2])

if __name__ == "__main__":
  • Step 4. Save the in a location that you know. Run the following command and replace <YourPythonFilePath> with your location.
aip shell -n -c "runfile <YourPythonFilePath>"
# Example:
# aip shell -n -c "runfile /Users/ansonhe/Desktop/"
  • Step 5. We will see the 3 data values display on terminal as below, and displaying on the Wio Terminal LCD screen.
ansonhe@Ansons-Macbook-Pro ~:aip shell -n -c "runfile /Users/ansonhe/Desktop/"
Positional argument (/dev/cu.usbmodem1414301) takes precedence over --open.
Connected to ardupy
Carbon Dioxide Concentration: 2360.639
Temperature: 29.18707
Humidity: 66.88538

Carbon Dioxide Concentration: 2360.639
Temperature: 29.18707
Humidity: 66.88538

Carbon Dioxide Concentration: 2500.573
Temperature: 29.17372
Humidity: 66.61072

Schematic Online Viewer


Tech Support & Product Discussion

Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.

Loading Comments...