Sensirion SCD4x · NDIR CO2 传感器 · I2C

SCD41 CO2 传感器模块(蓝板)
接线、代码与 SCD40 区别

21.6 × 13.4 mm 的小板,四线 I2C 接口,能同时输出 CO2 浓度、温度和湿度。 供电范围 2.4 – 5.5 V,3.3V 和 5V 都能直接用(Sensirion 数据手册)。 这一页整理引脚定义、Arduino UNO / ESP32 / STM32 / 树莓派四种接线图、可下载源码, 以及两个最容易踩的坑:205 mA 峰值电流的供电问题,和 怎么确认手上这颗到底是 SCD40 还是 SCD41

更新于 2026-07-31

1

先确认:你手上这颗是 SCD40 还是 SCD41

这一条最重要,请先看

SCD40 和 SCD41 引脚完全相同、I2C 地址都是 0x62、外观也几乎一样, 光看板子分不出来。已经有客户反馈买到的模块实际是 SCD40。

如果你的项目对量程和精度有要求,请先用下面的自测程序确认芯片型号再投入使用。 确认结果和商品描述不符,可以直接联系淘宝客服处理。

方法 1(最快):直接看芯片壳上的激光刻字

新批号的传感器,型号直接激光刻在顶部金属壳上,旁边还有一个二维码(批次信息)。 拿到手先翻过来看一眼,比烧程序去试快得多。

SCD41 与 SCD40 芯片金属外壳激光刻字对比示意图,型号刻在壳体上,旁边有二维码
新批号在金属壳上刻有 SCD41SCD40 字样,右下角是二维码。图为示意,实物刻字位置以手上模块为准。
看不到刻字怎么办

老批号可能没有刻字,或者刻字被模块的排针、外壳挡住看不清。 这种情况用下面两种软件方法识别,不用拆板子。

方法 2 / 3:用程序读出来

看不到刻字时,用 I2C 命令识别。建议两个都跑一遍:

方法命令判据可靠性
2. 单次测量命令
最关键的软件判据
0x219D
measure_single_shot
命令被接受并能读出有效数据 → SCD41
命令无应答或读不出数据 → SCD40
高。SCD40 本身不支持这条命令
3. 变体寄存器 0x202F
get_sensor_variant
返回值高 4 位:0 → SCD40,1 → SCD41 仅较新固件支持,老固件读不到(待确认)
现成的自测程序

下面的代码包里有一份 SCD4x_识别是40还是41.ino, 烧进 Arduino 或 ESP32、打开串口监视器(115200)就会自动跑完上面两个方法并直接给出结论。 见 第 6 节代码下载

2

SCD40 与 SCD41 到底差在哪

两颗都是 Sensirion SCD4x 系列的光声式 NDIR CO2 传感器,同一个封装、同一套基础命令。真正的差别集中在量程规格单次测量能力两点上。

项目SCD40SCD41
CO2 规格量程400 – 2000 ppm400 – 5000 ppm
单次测量 0x219D不支持支持
低功耗间歇测量受限可用单次测量做低功耗
I2C 地址0x620x62
引脚 / 封装完全相同,可直接互换
周期测量周期5 秒一组
基础命令集相同(启动 / 读数 / 停止 / 序列号 / 校准)
怎么选

室内空气质量、新风联动、CO2 报警这类应用,日常浓度在 400–2000 ppm 之间, SCD40 完全够用。
密闭空间、车内、发酵、温室、人多的会议室可能冲到 2000 ppm 以上, 或者需要低功耗电池供电,那就要 SCD41。

精度数值请以数据手册为准

上表的量程按 Sensirion 官方规格整理。具体精度指标(如 ±(40 ppm + 5%)) 随批次和固件版本可能不同,需要写进方案文档时请查对应型号的最新数据手册, 不要直接引用本页数字。本页没有列出的参数一律待确认,不做推测。

3

引脚定义

蓝板正面丝印从左到右依次是:

  • GND地。所有主控接线都必须共地,这是最常见的疏漏。
  • VCC电源正。芯片供电范围 2.4 – 5.5 V,3.3V 和 5V 都行;接和主控逻辑相同的那一路(UNO 接 5V,ESP32/STM32/树莓派接 3.3V)。详见第 4 节。
  • SCLI2C 时钟线。
  • SDAI2C 数据线。
  • NC空脚,不接。
背面丝印是反的,别看错

板子背面丝印顺序是 SDA / SCL / VCC / GND,和正面相反——那是从背面看的顺序。 接线以正面丝印为准,或者直接对着焊盘旁边的字接。

板载元件:上拉和去耦都已经做好了

这块蓝板上带了:

  • 10K 上拉电阻 × 2 —— 接在 SDA 和 SCL 上,上拉到 VCC。 所以不用你另外加上拉电阻,直接四根线接上去就行。
  • 100nF 去耦电容 × 1 —— 给传感器供电滤波用。

板上没有 LDO 稳压和电平转换芯片,但并不需要:SCD4x 本身 2.4 – 5.5 V 都能供电, 而上拉电阻是接到 VCC 的——这正是「VCC 要接和主控逻辑相同那一路」的原因,详见第 4 节

4

供电与电平:最容易踩的两个坑

坑 1 · 峰值电流约 205 mA

SCD4x 是光声式传感器,每次测量要驱动光源,瞬间峰值电流可达约 205 mA。 这个数字比大多数 I2C 传感器高一个数量级,是很多「读数乱跳」「模块一会儿认得到一会儿认不到」的真正原因。

这也意味着:不是随便找个脚给电就行,要看那个脚能出多少电流。

坑 2 · VCC 接 3.3V 还是 5V —— 都可以

按 Sensirion 数据手册,SCD4x 的供电范围是 2.4 – 5.5 V3.3V 和 5V 都在范围内,接哪个都能工作

SCL / SDA 是开漏输出,I2C 的电平由上拉电阻接到哪一路电源决定。 所以有一条很省事的原则:

模块 VCC 接到和主控逻辑相同的那一路电源,I2C 电平自然就一致,不需要电平转换。

主控VCC 接为什么
Arduino UNO / Nano
5V 逻辑
5V 电平和 UNO 一致,直接接 A4 / A5 即可;
而且 5V 脚电流够,见下方说明
ESP32 / STM32 / 树莓派
3.3V 逻辑
3.3V 同理,电平一致,直接接

ESP32 板上的输出本来就是 3.3V,没有 5V 可选,直接接 3V3。

坑 3 · UNO 上别接 3.3V 那个脚

Arduino UNO 上 5V 和 3.3V 两个输出脚都有,但给 SCD4x 供电要用 5V 那个

UNO 的脚电流能力结论
3.3V 约 50 mA 不要用。205 mA 峰值一来就掉压,表现为扫不到地址、读数乱跳
5V USB 供电时整板约 500 mA 用这个。电流够,电平也和 UNO 一致

3.3V 系统(ESP32 / STM32 / 树莓派)同样要注意 3.3V 那一路能不能扛住 205 mA 峰值。 如果同时还带屏幕、WiFi、电机,建议给 3.3V 加大电容,或者用外部电源单独供并共地。

5

四种主控接线图

下面四张图的连线一一对应、不交叉,照着接即可。所有图都以蓝板正面丝印为准。

SCD41 接 Arduino UNO 的接线图:GND 对 GND,VCC 按模块类型接 5V 或外部 3.3V,SCL 对 A5,SDA 对 A4
Arduino UNO / Nano。VCC 接哪里取决于模块带不带稳压:带稳压接 5V,裸板要外部 3.3V。UNO 自己的 3.3V 脚只有约 50 mA,带不动。
SCD41 接 ESP32 的接线图:GND 对 GND,VCC 对 3V3,SCL 对 GPIO22,SDA 对 GPIO21
ESP32。GPIO21 / GPIO22 是默认 I2C 引脚,程序里可以改成其它脚。
SCD41 接 STM32F103C8T6 的接线图:GND 对 GND,VCC 对 3.3V,SCL 对 PB6,SDA 对 PB7
STM32F103C8T6。CubeMX 里把 I2C1 速度设成 100 kHz。
SCD41 接树莓派的接线图:GND 对 6 号脚,VCC 对 1 号脚 3.3V,SCL 对 5 号脚,SDA 对 3 号脚
树莓派。VCC 接 1 号脚的 3.3V,不要接 2 号脚的 5V
6

代码下载

优先用官方例程

Sensirion 官方给四个平台都提供了现成的驱动和示例,由厂家维护、跟着固件更新, 比任何第三方教程都可靠,建议优先用这些。下面先列官方仓库,再放本站整理的精简版。

一、官方驱动与示例(推荐)

平台官方仓库 / 包怎么用
Arduino / ESP32 Sensirion/arduino-i2c-scd4x IDE 库管理器搜 Sensirion I2C SCD4x 安装,示例在
文件 → 示例 → Sensirion I2C SCD4x → exampleUsage
树莓派(C) Sensirion/raspberry-pi-i2c-scd4x 下载解压后:
cd example-usage && make && ./scd4x_i2c_example_usage
树莓派(Python) Sensirion/python-i2c-scd4x
pip install sensirion-i2c-scd4x
默认走 /dev/i2c-1,仓库 examples/ 里有完整示例
STM32 / 其它单片机 Sensirion/embedded-i2c-scd4x 平台无关的 C 驱动,只要实现 sensirion_i2c_hal 里几个函数
(用 HAL_I2C_Master_Transmit / Receive 对接即可)
库版本坑:头文件名改过

当前官方库的头文件是 SensirionI2cScd4x.h小写的 c), 类名是 SensirionI2cScd4x。 网上不少老教程写的是 SensirionI2CScd4x.h(大写 C)和旧的三段式序列号接口, 那是旧版本的写法,照抄会编译不过。以库自带示例为准。

二、本站整理的打包下载

说明

Arduino 那一份是官方示例原样收录(保留 Sensirion BSD-3 版权声明), 只在开头加了中文接线和供电注释。 其余几份是本站写的精简版:不依赖第三方库、直接发 I2C 命令, 方便你一步步看哪里不通——这几份尚未实机验证,请以实测为准, 正式项目建议用上面的官方驱动。

Arduino / ESP32 官方例程

Sensirion 官方 exampleUsage 原版,加中文接线与供电说明。

下载

识别 40 还是 41

看不到芯片刻字时用,串口直接给结论。精简版,未实机验证。

下载

ESP32 精简版

不依赖库,直接发 I2C 命令,可自定义引脚。未实机验证。

下载

STM32 HAL 精简版

scd41.c / scd41.h,含 CubeMX 配置说明。未实机验证。
正式项目建议用官方 embedded-i2c-scd4x。

下载

树莓派 smbus2 精简版

单文件 Python,含 raspi-config 与 i2cdetect 步骤。未实机验证。

下载

全部合集

上面所有文件打包,含说明文档。

下载
7

使用要点

  • 周期测量每 5 秒出一组数据。启动后第一组数据要等约 5 秒,不是立刻就有。
  • 发配置类命令前必须先停:发 stop_periodic_measurement0x3F86)并等 500 ms,否则命令会被忽略。这是新手最常见的错误。
  • 读数为 0 表示该帧无效,程序里应当丢弃,不要显示成"CO2 浓度为 0"。
  • 刚上电前几分钟读数会漂,属于正常现象,需要预热。
  • 每个数据字后面跟 1 字节 CRC(多项式 0x31,初始值 0xFF)。CRC 校验不过通常是杜邦线松动、线太长或缺上拉电阻。
  • I2C 速度用 100 kHz,不要拉到 400 kHz。
命令说明
start_periodic_measurement0x21B1启动周期测量
read_measurement0xEC05读 CO2 / 温度 / 湿度
stop_periodic_measurement0x3F86停止,之后等 500 ms
get_serial_number0x3682读序列号,用来确认通信正常
get_data_ready_status0xE4B8低 11 位非 0 表示数据就绪
measure_single_shot0x219D单次测量,仅 SCD41 支持

换算公式(来自数据手册):

物理量换算
CO2原始值直接就是 ppm
温度 (°C)-45 + 175 × raw / 65535
湿度 (%RH)100 × raw / 65535
8

排查流程

  1. 先跑 I2C 扫描,确认总线上能看到 0x62。树莓派用 i2cdetect -y 1,Arduino / ESP32 用任意 I2C Scanner。
  2. 扫不到 0x62:检查 SDA / SCL 有没有接反、VCC 是否接对(UNO 接 5V,ESP32 / STM32 / 树莓派接 3.3V)、有没有共地。UNO 用户重点查供电是否够(见第 4 节)。
  3. 扫得到但读数失败:多半是 CRC 校验不过。板上已有 10K 上拉,所以重点查杜邦线是否松动、线是否过长、有没有干扰源。
  4. 能读但数值是 0:那一帧无效,正常现象,程序里丢弃即可。
  5. 数值一直不变或明显不合理:确认是否忘了先发停止命令就直接发配置命令;再确认预热时间是否足够。
  6. 怀疑型号不符:跑第 1 节的识别程序确认是 SCD40 还是 SCD41。
9

客服话术

客户问"接上去没反应 / 扫不到地址":

您好,SCD4x 这颗芯片测量瞬间的峰值电流大概 205 mA,比一般传感器高很多。如果您用的是 Arduino UNO,请注意 UNO 上 5V 和 3.3V 两个脚都有:3.3V 那个脚只能给 50 mA 左右,是带不动的,会出现扫不到地址或者读数乱跳;5V 脚电流够。具体接哪个要看模块带不带稳压电路,资料页第 4 节有对照表。ESP32、STM32、树莓派本身是 3.3V 系统,直接接 3.3V 就行。四种主控的接线图和现成代码都在这里:

mingwei-tech-site.pages.dev/pages/scd41-co2-sensor

客户问"这个是 SCD40 还是 SCD41":

您好,SCD40 和 SCD41 引脚和地址完全一样,肉眼分不出来。资料页第 1 节有一个现成的自测程序,烧进 Arduino 或 ESP32 打开串口就会直接告诉您是哪一颗。如果确认结果和商品描述不符,麻烦把串口截图发给我,我这边给您处理。

10

官方资料

本页信息来源

引脚顺序、尺寸和板载元件(2 × 10K 上拉、100nF 去耦)来自实物与卖家确认; 供电范围(2.4 – 5.5 V)、命令字、CRC 和换算公式来自 Sensirion 官方数据手册; Arduino 例程为官方原版,其余精简版尚未实机验证

← 返回传感器分类 返回首页 进入淘宝店铺 →