Получение данных с CCS811

CCS811 — датчик качества воздуха. Возвращает два расчётных параметра:

  • eCO2 — эквивалентная концентрация CO₂ (ppm);

  • TVOC — суммарные летучие органические соединения (ppb).

Примечание

Это не «настоящий» CO₂ — реального оптического датчика углекислого газа на CCS811 нет. eCO2 рассчитывается из уровня летучих органики (TVOC) по эмпирической модели. Цифры реагируют на дыхание и проветривание, но абсолютная точность невысокая.

Расположение в кубсате — шина I²C, адрес 0x5A (см. Подготовка среды разработки).

Про пин WAK

У CCS811 есть пин WAK (wake): пока он HIGH — датчик в спячке и не отвечает по I²C. На большинстве модулей китайских клонов пин WAK уже припаян/притянут к GND, и сценарий «всегда активен» работает по умолчанию. В нашей сборке так и есть.

Если i2c_scanner не видит 0x5A, при том что питание подведено — первое подозрение на WAK: проверьте перемычку/провод от WAK к GND.

Необходимые библиотеки

  • Adafruit CCS811 Library (Adafruit);

  • Adafruit BusIO (зависимость).

Тестовый скетч

examples/ccs811_read/ccs811_read.ino
#include <Wire.h>
#include <Adafruit_CCS811.h>

Adafruit_CCS811 ccs;

void setup() {
  Serial.begin(115200);
  delay(300);
  Wire.begin(); // Nano: SDA=A4, SCL=A5

  Serial.println("CCS811 init (Adafruit lib)...");
  if (!ccs.begin(0x5A)) {
    Serial.println("CCS811 not found.");
    Serial.println("Check power, GND, SDA(A4), SCL(A5), address 0x5A");
    while (true) delay(1000);
  }

  Serial.println("CCS811 OK");
  Serial.println("Warm-up: wait 2-5 minutes");
  Serial.println("eCO2_ppm,TVOC_ppb");
}

void loop() {
  if (!ccs.available()) {
    delay(100);
    return;
  }

  if (!ccs.readData()) {
    Serial.print(ccs.geteCO2());
    Serial.print(",");
    Serial.println(ccs.getTVOC());
  } else {
    Serial.println("read_error");
  }

  delay(100);
}

Как запустить

  1. Залейте скетч.

  2. Откройте Serial Monitor на скорости 115200.

  3. Прогрев — обязательно. Дайте датчику 2-5 минут на стабилизацию, первые значения обычно бесполезны.

Что должно быть видно

Сразу после старта:

CCS811 init (Adafruit lib)...
CCS811 OK
Warm-up: wait 2-5 minutes
eCO2_ppm,TVOC_ppb

Дальше — числа дважды в секунду:

400,0
400,0
410,1
420,3
...

Значения «как в комнате»:

Параметр

Типично в помещении

Что считать значимым

eCO2

400-1200 ppm

> 1500 — пора проветрить; < 400 — фон

TVOC

0-300 ppb

резкий скачок при дыхании в датчик, парфюме, маркере

Про прогрев

  • При первом включении нового датчика даташит требует до 20 минут на conditioning — пока внутренние значения «устаканятся».

  • При повседневном включении достаточно 2-5 минут.

  • Если запустить тест на холодном датчике, первые ~30 секунд значения будут константные (400, 0) — это нормально.

Если CCS811 not found

  • Проверьте, что Проверка шины I²C показывает 0x5A.

  • Проверьте перемычку WAK GND (см. выше).

  • Если адрес видится, но Adafruit-библиотека не инициализируется — попробуйте перезапитать датчик (отключить-подключить VCC).