一、CCS811简介

  CCS811 是一款超低功耗数字气体传感器,集成了用于监测室内空气质量 (IAQ)(包括多种挥发性有机化合物 (VOC))的金属氧化物 (MOX) 气体传感器、微控制器单元 (MCU)、16 bit ADC 模数转换器和 I2C 接口。通过 I²C 接口实时输出等效(eCO₂)及总挥发性有机物(TVOC)浓度,并在片内完成算法处理,显著简化主控系统设计与功耗管理​。

二、产品特性

  • 等效气体输出:eCO₂ 范围 400 – 5000ppm,TVOC 范围 0 – 1000 ppb​。
  • 多种测量模式:支持 Idle(模式 0)、1 s(模式 1)、10 s(模式 2)、60 s(模式 3)及原始数据模式(模式 4),满足不同功耗与响应速率需求​。
  • 自动与手动基线校正:芯片内置自动基线校正算法(24 h 最小更新时间窗),也可通过 BASELINE 寄存器手动保存/恢复基线,加快算法收敛​。
  • 温湿度补偿:可写入外部温湿度数据至 ENV_DATA 寄存器,以补偿温湿度变化对气体测量的影响;若无外部传感器,可接入 NTC 热敏电阻获取本地环境温度​。
  • 阈值中断:在 MEAS_MODE 寄存器开启阈值中断后,传感器仅在 eCO₂ 跨越设定范围时通过 nINT 输出告警,降低主控轮询开销​。

三、引脚说明

SCLI2C串行时钟线
SDAI2C串行数据线
WAK使能,低电平有效,拉低后传感器才开始工作
INT低电平有效,CCS811芯片内部程序跑飞后可以将该引脚接地复位
RST低电平有效,默认上拉至VDD
ADD地址选择位,当I2C地址低时,7位器件地址为0x5A; 当I2C地址高时,7位器件地址为0x5B;

四、启动与运行条件

  早期老化:CCS811 在电阻水平和灵敏度方面的性能在早期使用过程中会发生变化。在此阶段,电阻变化在运行的前 24 至 48 小时内最为显著。老化过程旨在加速 CCS811 的这一阶段,从而最大限度地减少正常运行期间的变化。即新器件首次上电后,持续运行 ≥ 48 h 可稳定传感器电阻与灵敏度;若长期断电后重启,建议同样进行 48 h早期老化。
  CCS 建议 CCS811 尽可能在所选模式 1-4 下连续运行至少 24 小时,以确保性能更稳定,并能够更准确地指示室内空气质量 (IAQ) 水平。每次切换测量模式后需持续运行 ≥ 20 min,待算法基线收敛后方可读取准确数据;切换至 Idle 模式时,需最少 10 min 稳定。

五、主要寄存器介绍

STATUS (0x00):状态寄存器,单字节只读,指示设备是否处于活动状态、是否有新数据可用或是否发生错误。

MEAS_MODE (0x01):设置驱动模式寄存器,单字节读写,用于启用传感器驱动模式和中断。

ALG_RESULT_DATA (0x02) :算法结果数据寄存器,多字节只读寄存器包含计算出的 eCO2 (ppm) 和 TVOC (ppb) 值,后跟 STATUS 寄存器、ERROR_ID 寄存器和 RAW_DATA 寄存器。

  • 如果仅需要 eCO2,则只需读取前 2 个字节。
  • 如果需要 TVOC,则需要读取 4 个字节。
  • 在没有实现中断且主机需要轮询 STATUS 寄存器以确定是否有新数据的系统中,一种有效的替代方案是在单个事务中读取 5 个字节,并返回 eCO2、TVOC 和状态寄存器。
  • 也可以在单个事务中读取所有 8 个字节。

ENV_DATA (0x05):环境补偿寄存器,4字节读写,按固定格式写入湿度(16 bit)与温度(16 bit)用于补偿​。

  • 湿度存储在字节 0 中,精确到 0.5%,其他小数部分可以存储在字节 1 中。默认值为 50% = 0x64, 0x00。例如,48.5% 的湿度存储为 0x61, 0x00。
  • 温度存储在字节 2 中,精确到 0.5°C,并添加 25°C 作为偏移量(因此所有值均为正值)。其他小数部分可以存储在字节 3 中。默认值为 25°C = 0x64, 0x00。例如,23.5% 的温度存储为 0x61, 0x00。

内部算法使用这些值(如果应用程序未设置,则使用默认值)来补偿湿度和环境温度的变化。

NTC (0x06):NTC寄存器,四字节只读:返回 RREF 与 RNTC 两端电压(mV),主机据此计算环境温度并写入 ENV_DATA​ 。NTC 电阻的阻值可以通过所用参考电阻的比值和相关知识来确定。RNTC = VNTC x RREF / VREF。温度可以通过所用 NTC 电阻的数据表中的 NTC 电阻阻值来确定。

其中模块上预留有相应焊盘,方便NTC补偿。

BASELINE (0x11) :基线寄存器,双字节读写,其中包含算法计算中使用的当前基线的编码版本。先前存储的值可以写回此双字节寄存器,算法将在其计算中使用新值(直到其作为内部自动基线校正的一部分进行调整)。如果要保存基线并在稍后恢复,则必须将两个字节一起保存并一起写回。
HW_ID (0x20):设备ID寄存器,单字节只读,硬件标识,固定值 0x81 。
FW_Boot_Version (0x23) :固件引导加载程序版本寄存器,双字节只读,Bootloader 固件版本。
FW_App_Version (0x24):固件应用程序版本寄存器,双字节只读,Application 固件版本。
ERROR_ID (0xE0):错误标识符寄存器,单字节只读,如果设置状态寄存器的ERR位为0,则此字节只读寄存器指示错误的来源。

SW_RESET (0xFF):软复位寄存器,四字节写入(0x11,0xE5,0x72,0x8A)触发软件复位,重启至 Boot 模式 。
APP_START (0xF4):应用程序启动寄存器,单字节写入,将 CCS811 的模式从启动模式更改为运行应用程序,以选择“APP_START”寄存器,并开始运行已加载的应用程序软件。

六、ESP32驱动示例

  1. 引脚接线
ESP32CCS811
3V3VCC
GNDGND
21SDA
22SCL
23WAK
  1. 代码示例
/*
  ccs811basic.ino - Demo sketch printing results of the CCS811 digital gas sensor for monitoring indoor air quality from ams.
  Created by Maarten Pennings 2017 Dec 11
*/


#include <Wire.h>    // I2C library
#include "ccs811.h"  // CCS811 library


// Wiring for ESP8266 NodeMCU boards: VDD to 3V3, GND to GND, SDA to D2, SCL to D1, nWAKE to D3 (or GND)
//CCS811 ccs811(D3); // nWAKE on D3

// Wiring for Nano: VDD to 3v3, GND to GND, SDA to A4, SCL to A5, nWAKE to 13
//CCS811 ccs811(13); 

// nWAKE not controlled via Arduino host, so connect CCS811.nWAKE to GND
//CCS811 ccs811; 

// Wiring for ESP32 NodeMCU boards: VDD to 3V3, GND to GND, SDA to 21, SCL to 22, nWAKE to D3 (or GND)
CCS811 ccs811(23); // nWAKE on 23


void setup() {
  // Enable serial
  Serial.begin(115200);
  Serial.println("");
  Serial.println("setup: Starting CCS811 basic demo");
  Serial.print("setup: ccs811 lib  version: "); Serial.println(CCS811_VERSION);

  // Enable I2C
  Wire.begin(); 
  
  // Enable CCS811
  ccs811.set_i2cdelay(50); // Needed for ESP8266 because it doesn't handle I2C clock stretch correctly
  bool ok= ccs811.begin();
  if( !ok ) Serial.println("setup: CCS811 begin FAILED");

  // Print CCS811 versions
  Serial.print("setup: hardware    version: "); Serial.println(ccs811.hardware_version(),HEX);
  Serial.print("setup: bootloader  version: "); Serial.println(ccs811.bootloader_version(),HEX);
  Serial.print("setup: application version: "); Serial.println(ccs811.application_version(),HEX);
  
  // Start measuring
  ok= ccs811.start(CCS811_MODE_1SEC);
  if( !ok ) Serial.println("setup: CCS811 start FAILED");
}


void loop() {
  // Read
  uint16_t eco2, etvoc, errstat, raw;
  ccs811.read(&eco2,&etvoc,&errstat,&raw); 
  
  // Print measurement results based on status
  if( errstat==CCS811_ERRSTAT_OK ) { 
    Serial.print("CCS811: ");
    Serial.print("eco2=");  Serial.print(eco2);     Serial.print(" ppm  ");
    Serial.print("etvoc="); Serial.print(etvoc);    Serial.print(" ppb  ");
    //Serial.print("raw6=");  Serial.print(raw/1024); Serial.print(" uA  "); 
    //Serial.print("raw10="); Serial.print(raw%1024); Serial.print(" ADC  ");
    //Serial.print("R="); Serial.print((1650*1000L/1023)*(raw%1024)/(raw/1024)); Serial.print(" ohm");
    Serial.println();
  } else if( errstat==CCS811_ERRSTAT_OK_NODATA ) {
    Serial.println("CCS811: waiting for (new) data");
  } else if( errstat & CCS811_ERRSTAT_I2CFAIL ) { 
    Serial.println("CCS811: I2C error");
  } else {
    Serial.print("CCS811: errstat="); Serial.print(errstat,HEX); 
    Serial.print("="); Serial.println( ccs811.errstat_str(errstat) ); 
  }
  
  // Wait
  delay(1000); 
}
  1. 效果展示

总结

  CCS811 是 AMS推出的一款超低功耗数字气体传感器,内置金属氧化物微加热线圈(micro‑hotplate)与片上 MCU/ADC,能够通过 I²C 接口直接输出等效 CO₂(eCO₂)和总挥发性有机物(TVOC)浓度,广泛用于室内空气质量监测与智能家居等场景。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐