Remarks
Ccs811 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Ccs811 sensor;
public override Task Initialize()
{
Resolver.Log.Info("Initializing...");
var i2c = Device.CreateI2cBus(Meadow.Hardware.I2cBusSpeed.Fast);
sensor = new Ccs811(i2c);
var consumer = Ccs811.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"Observer triggered:");
Resolver.Log.Info($" new CO2: {result.New.Co2?.PartsPerMillion:N1}ppm, old: {result.Old?.Co2?.PartsPerMillion:N1}ppm.");
Resolver.Log.Info($" new VOC: {result.New.Voc?.PartsPerBillion:N1}ppb, old: {result.Old?.Voc?.PartsPerBillion:N1}ppb.");
},
filter: result =>
{
//c# 8 pattern match syntax. checks for !null and assigns var.
if (result.Old is { } old)
{
return (
(result.New.Co2.Value - old.Co2.Value).Abs().PartsPerMillion > 1000 // 1000ppm
&&
(result.New.Voc.Value - old.Voc.Value).Abs().PartsPerBillion > 100 // 100ppb
);
}
return false;
}
);
sensor.Subscribe(consumer);
sensor.Updated += (sender, result) =>
{
Resolver.Log.Info($"CO2: {result.New.Co2.Value.PartsPerMillion:n1}ppm, VOC: {result.New.Voc.Value.PartsPerBillion:n1}ppb");
};
return Task.CompletedTask;
}
public override async Task Run()
{
var result = await sensor.Read();
Resolver.Log.Info("Initial Readings:");
Resolver.Log.Info($" CO2: {result.Co2.Value.PartsPerMillion:n1}ppm");
Resolver.Log.Info($" VOC: {result.Voc.Value.PartsPerBillion:n1}ppb");
sensor.StartUpdating(TimeSpan.FromSeconds(1));
}
Sample project(s) available on GitHub
Wiring Example
To wire a Ccs811 to your Meadow board, connect the following:
Ccs811 | Meadow Pin |
---|---|
GND | GND |
VCC | 3V3 |
SCL | D08 |
SDA | D07 |
It should look like the following diagram:
Syntax
public class Ccs811 : ByteCommsSensorBase<(Concentration? Co2, Concentration? Voc)>, ISamplingSensor<(Concentration? Co2, Concentration? Voc)>, ISamplingSensor<(Concentration? Co2, Concentration? Voc)>, IDisposable, ICo2Sensor, IVocSensor
Constructors
Ccs811(II2cBus, Ccs811.Addresses)
Create a new Ccs811 object
Declaration
public Ccs811(II2cBus i2cBus, Ccs811.Addresses address = default(Ccs811.Addresses))
Parameters
Type | Name | Description |
---|---|---|
II2cBus | i2cBus | The I2C bus |
Ccs811.Addresses | address | The I2C address |
Ccs811(II2cBus, Byte)
Create a new Ccs811 object
Declaration
public Ccs811(II2cBus i2cBus, byte address)
Parameters
Type | Name | Description |
---|---|---|
II2cBus | i2cBus | The I2C bus |
System.Byte | address | The I2C address |
Properties
Co2
The measured CO2 concentration
Declaration
public Concentration? Co2 { get; }
Property Value
Type | Description |
---|---|
System.Nullable<Concentration> |
Voc
The measured VOC concentration
Declaration
public Concentration? Voc { get; }
Property Value
Type | Description |
---|---|
System.Nullable<Concentration> |
Methods
GetBaseline()
Get baseline value
Declaration
public ushort GetBaseline()
Returns
Type | Description |
---|---|
System.UInt16 | The baseline value |
GetMeasurementMode()
Get the current measurement mode
Declaration
public Ccs811.MeasurementMode GetMeasurementMode()
Returns
Type | Description |
---|---|
Ccs811.MeasurementMode | The measurement mode |
Initialize()
Initialize the sensor
Declaration
protected void Initialize()
RaiseEventsAndNotify(IChangeResult<(Nullable<Concentration> Co2, Nullable<Concentration> Voc)>)
Raise events for subcribers and notify of value changes
Declaration
protected override void RaiseEventsAndNotify(IChangeResult<(Concentration? Co2, Concentration? Voc)> changeResult)
Parameters
Type | Name | Description |
---|---|---|
IChangeResult<System.ValueTuple<System.Nullable<Concentration>, System.Nullable<Concentration>>> | changeResult | The updated sensor data |
ReadSensor()
Reads data from the sensor
Declaration
protected override Task<(Concentration? Co2, Concentration? Voc)> ReadSensor()
Returns
Type | Description |
---|---|
Task<System.ValueTuple<System.Nullable<Concentration>, System.Nullable<Concentration>>> | The latest sensor reading |
Overrides
SetBaseline(UInt16)
Set the baseline value
Declaration
public void SetBaseline(ushort value)
Parameters
Type | Name | Description |
---|---|---|
System.UInt16 | value | The new baseline |
SetMeasurementMode(Ccs811.MeasurementMode)
Set the Measurement mode
Declaration
public void SetMeasurementMode(Ccs811.MeasurementMode mode)
Parameters
Type | Name | Description |
---|---|---|
Ccs811.MeasurementMode | mode | The new mode |
Events
Co2Updated
Event raised when the CO2 concentration value changes
Declaration
public event EventHandler<ChangeResult<Concentration>> Co2Updated
Event Type
Type | Description |
---|---|
EventHandler<ChangeResult<Concentration>> |
VocUpdated
Event raised when the VOC concentration value changes
Declaration
public event EventHandler<ChangeResult<Concentration>> VocUpdated
Event Type
Type | Description |
---|---|
EventHandler<ChangeResult<Concentration>> |