Skip to content
MicroPython I2C driver for SCD30 CO2 sensor module
Branch: master
Clone or download
Latest commit 38a8ce2 Aug 25, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information. improve Jul 12, 2019 introduce soft_reset to reset the SCD30 Aug 25, 2019
setup.cfg initial commit Jul 12, 2019 bump version to 0.2 Aug 25, 2019

Sensirion SCD30 CO² Sensor I2C driver for MicroPython

Sensirion SCD30 is a CO², Humidity and Temperature sensor on a module. This is a I2C driver written in Python 3 for MicroPython.

Getting Started


  • Sensirion SCD30 Sensor Module
  • MicroPython board with I2C interface


Wire the I2C bus to the I2C bus on your MicroPython board. This is an example using the Pyboard D:

Pyboard SCD30
X15 (3V3) VDD


This example reads the measurements in a continous loop:

import time
from machine import I2C, Pin
from scd30 import SCD30

i2cbus = I2C(1)
scd30 = SCD30(i2c, 0x61)

while True:
    # Wait for sensor data to be ready to read (by default every 2 seconds)
    while scd30.get_status_ready() != 1:

Note that the CO² sensor needs some time to stabilize. Therefor the sensor should be kept powered to achieve a reasonable measurement interval (e.g. <5 minutes). To save power the sensors measurement inverval can be tweaked. See also the Low Power Mode for SCD30 application note.


The CO² sensor has two modes of calibration: FRC (Forced Recalibration) or ASC (Automatic Self-Calibration). This only describes the former.

Essentially the sensor is already calibrated at factory. However, when setting a new measurement interval recalibration might be necessary. The process is to bring the sensor into a controlled environment (e.g. outside) and set the known value at that environment (e.g. 400ppm). From what I understand ASC does essentially the same, just assumes that the lowest values over a certain periode are "outside values"...

Also note that the temperature sensor suffers from heating effects on the PCB. When the sensor operates in 2 second interval the heating is about 3°C. I usually run the sensor at 30 seconds interval and observed a heating of 2°C. The offset is subtracted from the measured temperature! To set a new offset, take the old offset into account!

Built With


This project is licensed under the MIT License - see the LICENSE file for details

You can’t perform that action at this time.