Scd30
arduino esp8266 ESP8266 SCD30 SCD-30 ESP32 UNOR4
Install / Use
/learn @paulvha/Scd30README
paulvha SCD30 library
===========================================================
An extended SCD30 library based on the SparkFun SCD30 CO2 Sensor Library, see information below
Versioning
October 2023
- tested on UNO R4 WiFI with Wire (5V): Works correct unmodified.
- tested on UNO R4 WIFI with QWICC/Wire1 (3v3) : WORKS but needs more time to warm up /get stable<br>
Modified July 2022
- added option autoCalibrate to begin() to enable disable auto calibration (contribution of jhengstermann)
- begin(TwoWire &wirePort = Wire, bool m_begin = true, boolean autoCalibrate = true);
- wirePort : I2C channel to use. Wire by default.
- m_begin : if true will start measurement every 2 seconds. True / start by default.
- autoCalibrate : if true will enable or false disable autocalibrate at begin. True / Enable ASC by default.
Modified by Paulvha version November 2020
- solved a conflict with ByteToFloat when using SPS30 at the same time
Modified by Paulvha version October 2020
- Update in readmeasurement to translate byte to float. It did not work on Arduino. Tested on Uno, Artemis Apollo3, ESP32
- added example4 to manual input temperature offset and see impact.
- SECOND UPDATE IN OCTOBER
- Added example5 to work with Sparkfun LCD
- update to example4 to set and calibrate temperature offset
Modified by Paulvha version August 2020:
Changes based on Datasheet May 2020
- added functions : getForceRecalibration, getMeasurementInterval, getTemperatureOffset, getAltitudeCompensation, getFirmwareLevel
- updated the keywords.txt file
- added example14 to demonstrate the new functions
- A number of library enhancements
- updated sketches and library where needed
Modified by Paulvha version February 2019
Changes:
- Added option in examples 10 and 13 to set BME280 I2C address. (some use 0x76 instead of 0x77)
- Added SoftWire (a port of the ESP8266 I2C library) for ESP32 (which does NOT support clockstretching)
- Removed StartSingleMeasurement as that is not working in the SCD30 as it should.
- Added option to begin() to disable starting measurement. (needed in case one wants to read serial number)
- updated the keywords.txt file
- updated sketches and library where needed
Modified by paulvha version 10 August, 2018
Changes:
- Added ESP8266 board detection in begin() to support the ESP8266 clockstretching
- Added setting debug messages
- Added obtaining serial number of SCD30
- Added StopMeasurement
- Added StartSingleMeasurement (removed February 2019 as it IS unstable)
- Added GetTemperature in Fahrenheit
- Added CRC checks on different places in de driver
- Updated existing sketches fom Sparkfun to new library
- Added new sketches : Example 10: combined read with BME280 Example 11: Set ESP8266 as Access Point and read SCD30 in browser Example 12: Set ESP8266 as WIFI server and read SCD30 in browser
More work to be follow on connecting / comparing with other sensors and document the learnings.
check for updated datasheet and information on
============= ORIGINAL INFORMATION FROM SPARKFUN ===========================
SparkFun SCD30 CO2 Sensor Library

SparkX CO₂ Humidity and Temperature Sensor - SCD30 (SPX-14751)
The SCD30 from Sensirion is a high quality NDIR based CO₂ sensor capable of detecting 400 to 10000ppm with an accuracy of ±(30ppm+3%). In order to improve accuracy the SCD30 has temperature and humidity sensing built-in, as well as commands to set the current altitude.
We've written an Arduino library to make reading the CO₂, humidity, and temperature very easy. It can be downloaded through the Arduino Library manager: search for 'SparkFun SCD30'. We recommend using a Qwiic Breadboard Cable to connect the SCD30 to a Qwiic compatible board. The YeLLow wire goes in the SCL pin. The SCD30 also supports a serial interface but we haven't worked with it.
The CO₂ sensor works very well and for additional accuracy the SCD30 accepts ambient pressure readings. We recommend using the SCD30 in conjunction with the Qwiic Pressure Sensor - MS5637 or the Qwiic Environmental Sensor - BME680 to obtain the current barometric pressure.
Note: The SCD30 has an automatic self-calibration routine. Sensirion recommends 7 days of continuous readings with at least 1 hour a day of 'fresh air' for self-calibration to complete.
Library written by Nathan Seidle (SparkFun).
Repository Contents
- /examples - Example sketches for the library (.ino). Run these from the Arduino IDE.
- /src - Source files for the library (.cpp, .h).
- keywords.txt - Keywords from this library that will be highlighted in the Arduino IDE.
- library.properties - General library properties for the Arduino package manager.
Documentation
- Installing an Arduino Library Guide - Basic information on how to install an Arduino library.
License Information
This product is open source!
Various bits of the code have different licenses applied. Anything SparkFun wrote is beerware; if you see me (or any other SparkFun employee) at the local, and you've found our code helpful, please buy us a round!
Please use, reuse, and modify these files as you see fit. Please maintain attribution to SparkFun Electronics and release anything derivative under the same license.
Distributed as-is; no warranty is given.
- Your friends at SparkFun.
Related Skills
node-connect
336.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
336.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.0kCommit, push, and open a PR
