Remarks
Ens160 | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
Ens160 sensor;
public override Task Initialize()
{
Resolver.Log.Info("Initializing...");
var i2cBus = Device.CreateI2cBus(Meadow.Hardware.I2cBusSpeed.Standard);
sensor = new Ens160(i2cBus, (byte)Ens160.Addresses.Address_0x53);
var consumer = Ens160.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"Observer: C02 concentration changed by threshold; new: {result.New.CO2Concentration?.PartsPerMillion:N0}ppm");
},
filter: result =>
{
if (result.Old?.CO2Concentration is { } oldCon &&
result.New.CO2Concentration is { } newCon)
{
return Math.Abs((newCon - oldCon).PartsPerMillion) > 10;
}
return false;
}
);
sensor?.Subscribe(consumer);
if (sensor != null)
{
sensor.Updated += (sender, result) =>
{
Resolver.Log.Info($" CO2 Concentration: {result.New.CO2Concentration?.PartsPerMillion:N0}ppm");
Resolver.Log.Info($" Ethanol Concentraion: {result.New.EthanolConcentration?.PartsPerBillion:N0}ppb");
Resolver.Log.Info($" TVOC Concentraion: {result.New.TVOCConcentration?.PartsPerBillion:N0}ppb");
Resolver.Log.Info($" AQI: {sensor.GetAirQualityIndex()}");
};
}
sensor?.StartUpdating(TimeSpan.FromSeconds(2));
return base.Initialize();
}
Sample project(s) available on GitHub
Syntax
public class Ens160 : ByteCommsSensorBase<(Concentration? CO2Concentration, Concentration? EthanolConcentration, Concentration? TVOCConcentration)>, ISamplingSensor<(Concentration? CO2Concentration, Concentration? EthanolConcentration, Concentration? TVOCConcentration)>, ISamplingSensor<(Concentration? CO2Concentration, Concentration? EthanolConcentration, Concentration? TVOCConcentration)>, IDisposable, IConcentrationSensor
Constructors
Ens160(II2cBus, Byte)
Create a new ENS160 object
Declaration
public Ens160(II2cBus i2cBus, byte address = null)
Parameters
Type | Name | Description |
---|---|---|
II2cBus | i2cBus | The I2C bus |
System.Byte | address | The I2C address |
Remarks
The constructor sends the stop periodic updates method otherwise the sensor may not respond to new commands
Properties
CO2Concentration
The current C02 concentration value
Declaration
public Concentration? CO2Concentration { get; }
Property Value
Type | Description |
---|---|
System.Nullable<Concentration> |
Concentration
The current C02 concentration value
Declaration
public Concentration? Concentration { get; }
Property Value
Type | Description |
---|---|
System.Nullable<Concentration> |
CurrentOperatingMode
The current device operating mode
Declaration
public Ens160.OperatingMode CurrentOperatingMode { get; set; }
Property Value
Type | Description |
---|---|
Ens160.OperatingMode |
EthanolConcentration
The current ethanol concentration value
Declaration
public Concentration? EthanolConcentration { get; }
Property Value
Type | Description |
---|---|
System.Nullable<Concentration> |
TVOCConcentration
The current Total Volatile Organic Compounds (TVOC) concentration value
Declaration
public Concentration? TVOCConcentration { get; }
Property Value
Type | Description |
---|---|
System.Nullable<Concentration> |
Methods
GetAirQualityIndex()
Get the air quality index (AQI)
Declaration
public Ens160.UBAAirQualityIndex GetAirQualityIndex()
Returns
Type | Description |
---|---|
Ens160.UBAAirQualityIndex |
GetDeviceID()
Get the sensor ID from PART_ID register Default value is 0x0160 (352)
Declaration
public ushort GetDeviceID()
Returns
Type | Description |
---|---|
System.UInt16 | ID as a ushort (2 bytes) |
GetFirmwareVersion()
Get the sensor app / firmware version
Declaration
public (byte Major, byte Minor, byte Release) GetFirmwareVersion()
Returns
Type | Description |
---|---|
System.ValueTuple<System.Byte, System.Byte, System.Byte> | The major, minor, release values as a ttuple of bytes |
GetHumidity()
Get the relative humidity used in its calculations -b taken from RH_IN if supplied
Declaration
public RelativeHumidity GetHumidity()
Returns
Type | Description |
---|---|
RelativeHumidity |
GetTemperature()
Get the temperature used for calculations - taken from TEMP_IN if supplied
Declaration
public Units.Temperature GetTemperature()
Returns
Type | Description |
---|---|
Units.Temperature | Temperature |
Initialize()
Initialize the sensor
Declaration
protected Task Initialize()
Returns
Type | Description |
---|---|
Task |
RaiseChangedAndNotify(IChangeResult<(Nullable<Concentration> CO2Concentration, Nullable<Concentration> EthanolConcentration, Nullable<Concentration> TVOCConcentration)>)
Raise change events for subscribers
Declaration
protected void RaiseChangedAndNotify(IChangeResult<(Concentration? CO2Concentration, Concentration? EthanolConcentration, Concentration? TVOCConcentration)> changeResult)
Parameters
Type | Name | Description |
---|---|---|
IChangeResult<System.ValueTuple<System.Nullable<Concentration>, System.Nullable<Concentration>, System.Nullable<Concentration>>> | changeResult | The change result with the current sensor data |
ReadSensor()
Get Scdx40 C02 Gas Concentration and Update the Concentration property
Declaration
protected override Task<(Concentration? CO2Concentration, Concentration? EthanolConcentration, Concentration? TVOCConcentration)> ReadSensor()
Returns
Type | Description |
---|---|
Task<System.ValueTuple<System.Nullable<Concentration>, System.Nullable<Concentration>, System.Nullable<Concentration>>> |
Overrides
Reset()
Reset the sensor
Declaration
public Task Reset()
Returns
Type | Description |
---|---|
Task |
SetHumidity(RelativeHumidity)
Set relative humidity
Declaration
public void SetHumidity(RelativeHumidity humidity)
Parameters
Type | Name | Description |
---|---|---|
RelativeHumidity | humidity |
SetTemperature(Units.Temperature)
Set ambient temperature
Declaration
public void SetTemperature(Units.Temperature ambientTemperature)
Parameters
Type | Name | Description |
---|---|---|
Units.Temperature | ambientTemperature |
StartUpdating(Nullable<TimeSpan>)
Starts updating the sensor on the updateInterval frequency specified
Declaration
public override void StartUpdating(TimeSpan? updateInterval = null)
Parameters
Type | Name | Description |
---|---|---|
System.Nullable<TimeSpan> | updateInterval |
StopUpdating()
Stop updating the sensor The sensor will not respond to commands for 500ms The call will delay the calling thread for 500ms
Declaration
public override void StopUpdating()
Overrides
Events
CO2ConcentrationUpdated
Raised when the CO2 concentration changes
Declaration
public event EventHandler<IChangeResult<Concentration>> CO2ConcentrationUpdated
Event Type
Type | Description |
---|---|
EventHandler<IChangeResult<Concentration>> |
ConcentrationUpdated
Raised when the CO2 concentration changes
Declaration
public event EventHandler<IChangeResult<Concentration>> ConcentrationUpdated
Event Type
Type | Description |
---|---|
EventHandler<IChangeResult<Concentration>> |
EthanolConcentrationUpdated
Raised when the ethanol concentration changes
Declaration
public event EventHandler<IChangeResult<Concentration>> EthanolConcentrationUpdated
Event Type
Type | Description |
---|---|
EventHandler<IChangeResult<Concentration>> |
TVOCConcentrationUpdated
Raised when the Total Volatile Organic Compounds (TVOC) concentration changes
Declaration
public event EventHandler<IChangeResult<Concentration>> TVOCConcentrationUpdated
Event Type
Type | Description |
---|---|
EventHandler<IChangeResult<Concentration>> |