STM32 Nucleo and CCS811 sensor Arduino example

In this example we will connect a CCS811 gas sensor to an STM32 Nucleo – we will write the code in the Arduino IDE

CCS811 is a low-power digital gas sensor solution, which integrates a gas sensor solution for detecting low levels of VOCs typically found indoors, with a microcontroller unit (MCU) and an Analog-to-Digital converter to monitor the local environment and provide an indication of the indoor air quality via an equivalent CO2 or TVOC output over a standard I2C digital interface.

Features

Integrated MCU
On-board processing
Standard digital interface
Optimised low power modes
IAQ threshold alarms
Programmable baseline
2.7mm x 4.0mm LGA package
Low component count
Proven technology platform

Specs

Interface I²C
Supply Voltage [V] 1.8 to 3.6
Power Consumption [mW] 1.2 to 46
Dimension [mm] 2.7 x 4.0 x 1.1 LGA
Ambient Temperature Range [°C] -40 to 85
Ambient Humidity Range [% r.h.] 10 to 95

Parts List

Name Part Type
CCS811 CJMCU-811 CCS811 Air Quality Gas Sensor
STM32 Nucleo STM32 Development Board NUCLEO-F446RE, STM32 STM32F446RET6 MCU, supports Arduino
Connecting wire Free shipping Dupont line 120pcs 20cm male to male + male to female and female to female jumper wire

 

Layout

Remember and connect WAKE to gnd

Nucleo and CCS811 layout
Nucleo and CCS811 layout

Code

Again we use a library this is the adafruit one – you can use the library manager and add this.

And this is the out of the box example

#include "Adafruit_CCS811.h"
 
Adafruit_CCS811 ccs;
 
void setup() 
{
  Serial.begin(9600);
  Serial.println("CCS811 test");
 
  if(!ccs.begin())
  {
    Serial.println("Failed to start sensor! Please check your wiring.");
    while(1);
  }
 
  //calibrate temperature sensor
  while(!ccs.available());
  float temp = ccs.calculateTemperature();
  ccs.setTempOffset(temp - 25.0);
}
 
void loop() 
{
  if(ccs.available())
  {
    float temp = ccs.calculateTemperature();
    if(!ccs.readData()){
    Serial.print("CO2: ");
    Serial.print(ccs.geteCO2());
    Serial.print("ppm, TVOC: ");
    Serial.print(ccs.getTVOC());
    Serial.print("ppb Temp:");
    Serial.println(temp);
  }
  else
  {
    Serial.println("ERROR!");
    while(1);
  }
}
delay(500);
}

Output

Open the serial monitor – this is what I saw. The higher CO2 level was when I breathed on the sensor

CO2: 400ppm, TVOC: 0ppb Temp:25.92
CO2: 400ppm, TVOC: 0ppb Temp:25.52
CO2: 400ppm, TVOC: 0ppb Temp:20.47
CO2: 400ppm, TVOC: 0ppb Temp:19.33
CO2: 400ppm, TVOC: 0ppb Temp:23.47
CO2: 400ppm, TVOC: 0ppb Temp:25.00
CO2: 400ppm, TVOC: 0ppb Temp:26.32

 

Links

ccs811 datasheet

CJMCU-811 CCS811 Air Quality Gas Sensor