Compact, production-ready embedded hardware module.
The 7Semi SCD41 CO₂ Sensor Breakout is a compact, high-performance environmental sensing module designed for precise carbon dioxide monitoring in advanced applications. Built around Sensirion’s cutting-edge photoacoustic sensing technology, it delivers highly accurate and stable CO₂ measurements with minimal power consumption. In addition to CO₂ sensing, the module integrates temperature and humidity sensors, enabling real-time environmental compensation for improved measurement accuracy. With a digital I²C interface and factory calibration, the SCD41 breakout ensures seamless integration and immediate deployment in embedded systems, IoT devices, and industrial applications. Its ultra-low power operation and small footprint make it ideal for both portable and fixed installations, including smart air quality systems, HVAC automation, and environmental monitoring platforms.
| Parameter | Value |
|---|---|
| Supply Voltage | 3.3V to 5V |
| Interface | I²C (0x62) |
| CO2 Measurement Range | 400–2000 ppm |
| Operational temprature | -40°C to 80°C |
| Dimension of product | L=30mm W=22mm H=7.83mm |
Dimensions: L=30mm W=22mm H=7.83mm

| # | Pin | Description |
|---|---|---|
| 1 | VCC | Power 3.3V to 5V |
| 2 | GND | Ground |
| 3 | SDA | I²C Data |
| 4 | SCL | I²C Clock |

* Basic.ino
* Example for using the 7Semi SCD4x CO₂, temperature,
* and humidity sensor with I²C on ESP32/Arduino.
*
* Features demonstrated:
* - Start/stop of standard periodic measurement
* - Reading CO₂ (ppm), temperature (°C), and humidity (%RH)
* - Notes on single-shot mode, offsets, and airflow considerations
*
* Sensor configuration used:
* - Periodic Mode : Standard (2 s polling)
* - I²C Frequency : 100 kHz (recommended for bring-up)
* - Supply Voltage: 3.3V–5.5V (module dependent)
* - Data Output : CO₂ (ppm), Temperature (°C), RH (%)
*
* Connections:
* - SDA -> A4 Default board SDA (or define custom pin)
* - SCL -> A5 Default board SCL (or define custom pin)
* - VIN -> 3.3V / 5V (depending on module)
* - GND -> GND
*
* @author 7Semi
* @license MIT
* @version 1.0
* @date 24 September 2025
***************************************************************/
#include <7Semi_SCD4x.h>
// I2C speed for bring-up (100 kHz recommended; raise later if stable)
#define I2C_FREQ_HZ 100000UL
// Set to -1 to use board defaults
#define I2C_SDA_PIN -1
#define I2C_SCL_PIN -1
// Polling period while in periodic modes
#define POLL_MS 2000UL
SCD4x_7Semi scd(&Wire);
uint32_t lastPoll = 0;
bool running = false;
bool lowPower = false;
void setup() {
Serial.begin(115200);
while (!Serial) {}
Serial.println(F("\n== 7Semi SCD4x =="));
while (!scd.begin(I2C_SDA_PIN, I2C_SCL_PIN, I2C_FREQ_HZ)) {
Serial.println(F("SCD4x not detected. Check wiring/power."));
delay(1000);
}
// Start in standard periodic mode by default
if (scd.startPeriodicMeasurement()) {
running = true;
lowPower = false;
Serial.println(F("Started standard periodic mode. First valid reading ~5s."));
} else {
Serial.println(F("failed to start periodic mode."));
}
}
/**
- Poll data-ready every 2 s
- When ready, read CO₂ (ppm), temperature (°C), humidity (%RH)
- Prints values to Serial (with basic formatting)
*/
void loop() {
static uint32_t lastCheck = 0;
if (millis() - lastCheck < 2000) return; // every 2 s
lastCheck = millis();
uint16_t ready = 0;
// Bit 10..0 used as "new data available" in many Sensirion examples
if (scd.getDataReadyStatus(ready) && (ready & 0x07FF)) {
uint16_t co2;
float temp, rh;
if (scd.readMeasurement(co2, temp, rh)) {
Serial.print("CO₂: ");
Serial.print(co2);
Serial.print(" ppm\t");
Serial.print("Temp: ");
Serial.print(temp, 2);
Serial.print(" °C\t");
Serial.print("RH: ");
Serial.print(rh, 1);
Serial.println(" %");
} else {
Serial.println("Read failed (CRC/I2C error)");
}
}
}
/* ===================== Notes =====================
- If you never see data ready:
* Re-check wiring, pull-ups, and I²C pins for your board.
* Try 100 kHz I²C during bring-up.
* Ensure stable power; SCD4x can run from 3.3–5.5 V depending on module.
- If values look offset:
* Consider setTemperatureOffset() to compensate board self-heating.
* Avoid strong airflow directly on the sensor.
- If you need single-shot mode:
* Use measureSingleShot()/measureSingleShotRhtOnly() and then readMeasurement().
=================================================== */
The SCD41 sensor is used for accurate indoor air quality monitoring by measuring carbon dioxide concentration along with temperature and humidity.
The module supports the I²C communication interface, making it compatible with Arduino, ESP32, STM32 and Raspberry Pi platforms.
The sensor supports a wide CO₂ measurement range from 400 ppm to 40,000 ppm.
No, the SCD41 sensor comes factory calibrated and is ready for immediate use in embedded and IoT applications.