NAME
Device::Chip::CCS811
- chip driver for CCS811
SYNOPSIS
use Device::Chip::CCS811;
use Future::AsyncAwait;
my $chip = Device::Chip::CCS811->new;
await $chip->mount( Device::Chip::Adapter::...->new );
await $chip->init;
await $chip->change_config( DRIVE_MODE => 1 );
sleep 60; # wait for chip to warm up
my ( $eCO2, $eTVOC ) = await $chip->read_alg_result_data;
printf "eCO2=%dppm\n", $eCO2;
printf "eTVOC=%dppb\n", $eTVOC;
DESCRIPTION
This Device::Chip subclass provides specific communication to a ScioSense CCS811 Digital Gas Sensor attached to a computer via an I²C adapter.
The reader is presumed to be familiar with the general operation of this chip; the documentation here will not attempt to explain or define chip-specific concepts or features, only the use of this module to access them.
METHODS
The following methods documented in an await
expression return Future instances.
read_status
$status = await $chip->read_status;
Reads the STATUS
register and returns a hash reference containing the following fields:
FWMODE => "boot" | "app"
APP_ERASE => 0 | 1
APP_VERIFY => 0 | 1
APP_VALID => 0 | 1
DATA_READY => 0 | 1
ERROR => 0 | 1
read_config
$config = await $chip->read_config;
Reads the MEAS_MODE
configuration register and reeturns a hash reference containing the following fields:
DRIVE_MODE => 0 | 1 | 2 | 3 | 4
INT_DATARDY => 0 | 1
INT_THRESH => 0 | 1
change_config
await $chip->change_config( %changes );
Writes updates to the MEAS_MODE
configuration register.
read_alg_result_data
$data = await $chip->read_alg_result_data;
Reads the ALG_RESULT_DATA
register and returns a hash reference containing the following fields, in addition to the STATUS
fields.
eCO2 => INT (in units of ppm)
eTVOC => INT (in unts of ppb)
ERROR_ID => INT
read_id
$id = await $chip->read_id;
Reads the HW_ID
register and returns an integer. This should be the value 0x81 for the CCS811 chip.
init
await $chip->init;
Performs the chip startup actions; namely, starting the application if the chip is still in bootloader mode.
AUTHOR
Paul Evans <leonerd@leonerd.org.uk>