diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Driver/Htu21d.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Driver/Htu21d.Enums.cs index 26917afdae..8141fee8ac 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Driver/Htu21d.Enums.cs +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Driver/Htu21d.Enums.cs @@ -4,21 +4,6 @@ namespace Meadow.Foundation.Sensors.Atmospheric { public partial class Htu21d { - /// - /// Valid addresses for the sensor. - /// - public enum Addresses : byte - { - /// - /// Bus address 0x40 - /// - Address_0x40 = 0x40, - /// - /// Default bus address - /// - Default = Address_0x40 - } - private const byte SOFT_RESET = 0xFE; private const byte TEMPERATURE_MEASURE_NOHOLD = 0xF3; @@ -43,10 +28,5 @@ public enum SensorResolution : byte TEMP13_HUM10 = 0x80, TEMP11_HUM11 = 0x81, } - - private enum Register : byte - { - - } } } \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Driver/Htu21d.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Driver/Htu21d.cs deleted file mode 100644 index 966f38762d..0000000000 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Driver/Htu21d.cs +++ /dev/null @@ -1,163 +0,0 @@ -using Meadow.Hardware; -using Meadow.Peripherals.Sensors; -using Meadow.Units; -using System; -using System.Threading; -using System.Threading.Tasks; -using TU = Meadow.Units.Temperature.UnitType; -using HU = Meadow.Units.RelativeHumidity.UnitType; - -namespace Meadow.Foundation.Sensors.Atmospheric -{ - /// - /// Provide access to the Htu21d(f) - /// temperature and humidity sensors - /// - public partial class Htu21d : - ByteCommsSensorBase<(Units.Temperature? Temperature, RelativeHumidity? Humidity)>, - ITemperatureSensor, IHumiditySensor - { - public event EventHandler> TemperatureUpdated = delegate { }; - public event EventHandler> HumidityUpdated = delegate { }; - - public int DEFAULT_SPEED => 400; - - /// - /// The temperature, from the last reading. - /// - public Units.Temperature? Temperature => Conditions.Temperature; - - /// - /// The humidity, in percent relative humidity, from the last reading.. - /// - public RelativeHumidity? Humidity => Conditions.Humidity; - - /// - /// Serial number of the device. - /// - public ulong SerialNumber { get; private set; } - - /// - /// Firmware revision of the sensor. - /// - public byte FirmwareRevision { get; private set; } - - /// - /// Create a new Htu21d temperature and humidity sensor. - /// - /// Sensor address (default to 0x40). - /// I2CBus (default to 100 KHz). - public Htu21d(II2cBus i2cBus, byte address = (byte)Addresses.Default, int updateIntervalMs = 1000) - : base(i2cBus, address, updateIntervalMs) - { - Initialize(); - } - - protected void Initialize () - { - Peripheral.Write(SOFT_RESET); - - Thread.Sleep(100); - - SetResolution(SensorResolution.TEMP11_HUM11); - } - - protected override async Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity)> ReadSensor() - { - (Units.Temperature Temperature, RelativeHumidity Humidity) conditions; - - return await Task.Run(() => { - // ---- HUMIDITY - //Bus.WriteBytes(HUMDITY_MEASURE_NOHOLD); - Peripheral.Write(HUMDITY_MEASURE_NOHOLD); - Thread.Sleep(25); // Maximum conversion time is 12ms (page 5 of the datasheet). - //Bus.ReadBytes(_rx, 3); // 2 data bytes plus a checksum (we ignore the checksum here) - Peripheral.Read(ReadBuffer.Span[0..3]);// 2 data bytes plus a checksum (we ignore the checksum here) - var humidityReading = (ushort)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); - conditions.Humidity = new RelativeHumidity(((125 * (float)humidityReading) / 65536) - 6, RelativeHumidity.UnitType.Percent); - if (conditions.Humidity < new RelativeHumidity(0, HU.Percent)) - { - conditions.Humidity = new RelativeHumidity(0, HU.Percent); - } - else - { - if (conditions.Humidity > new RelativeHumidity(100, HU.Percent)) - { - conditions.Humidity = new RelativeHumidity(100, HU.Percent); - } - } - - // ---- TEMPERATURE - //Bus.WriteBytes(TEMPERATURE_MEASURE_NOHOLD); - Peripheral.Write(TEMPERATURE_MEASURE_NOHOLD); - Thread.Sleep(25); // Maximum conversion time is 12ms (page 5 of the datasheet). - //Bus.ReadBytes(_rx, 3); // 2 data bytes plus a checksum (we ignore the checksum here) - Peripheral.Read(ReadBuffer.Span[0..3]);// 2 data bytes plus a checksum (we ignore the checksum here) - var temperatureReading = (short)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); - conditions.Temperature = new Units.Temperature((float)(((175.72 * temperatureReading) / 65536) - 46.85), Units.Temperature.UnitType.Celsius); - - return conditions; - }); - } - - /// - /// Inheritance-safe way to raise events and notify observers. - /// - /// - protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? Temperature, RelativeHumidity? Humidity)> changeResult) - { - if (changeResult.New.Temperature is { } temp) { - TemperatureUpdated?.Invoke(this, new ChangeResult(temp, changeResult.Old?.Temperature)); - } - if (changeResult.New.Humidity is { } humidity) { - HumidityUpdated?.Invoke(this, new ChangeResult(humidity, changeResult.Old?.Humidity)); - } - base.RaiseEventsAndNotify(changeResult); - } - - /// - /// Turn the heater on or off. - /// - /// Heater status, true = turn heater on, false = turn heater off. - public void Heater(bool onOrOff) - { - //var register = Bus.ReadRegisterByte(READ_HEATER_REGISTER); - var register = Peripheral.ReadRegister(READ_HEATER_REGISTER); - register &= 0xfd; - - if (onOrOff) - { - register |= 0x02; - } - //Bus.WriteRegister(WRITE_HEATER_REGISTER, register); - Peripheral.WriteRegister(WRITE_HEATER_REGISTER, register); - } - - //Set sensor resolution - /*******************************************************************************************/ - //Sets the sensor resolution to one of four levels - //Page 12: - // 0/0 = 12bit RH, 14bit Temp - // 0/1 = 8bit RH, 12bit Temp - // 1/0 = 10bit RH, 13bit Temp - // 1/1 = 11bit RH, 11bit Temp - //Power on default is 0/0 - void SetResolution(SensorResolution resolution) - { - var register = Peripheral.ReadRegister(READ_USER_REGISTER); - - //userRegister &= 0b01111110; //Turn off the resolution bits - //resolution &= 0b10000001; //Turn off all other bits but resolution bits - //userRegister |= resolution; //Mask in the requested resolution bits - - var res = (byte)resolution; - - register &= 0x73; //Turn off the resolution bits - res &= 0x81; //Turn off all other bits but resolution bits - register |= res; //Mask in the requested resolution bits - - //Request a write to user register - Peripheral.WriteRegister(WRITE_USER_REGISTER, register); //Write the new resolution bits - } - } -} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Datasheet/htu21d.pdf b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Datasheet/htu21d.pdf similarity index 100% rename from Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Datasheet/htu21d.pdf rename to Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Datasheet/htu21d.pdf diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Datasheet/htu31d.pdf b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Datasheet/htu31d.pdf new file mode 100644 index 0000000000..50aba5faa4 Binary files /dev/null and b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Datasheet/htu31d.pdf differ diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.Enums.cs new file mode 100644 index 0000000000..4b2a911283 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.Enums.cs @@ -0,0 +1,45 @@ +namespace Meadow.Foundation.Sensors.Atmospheric +{ + public partial class Htu21d + { + enum Registers : byte + { + SOFT_RESET = 0xFE, + + TEMPERATURE_MEASURE_NOHOLD = 0xF3, + HUMDITY_MEASURE_NOHOLD = 0xF5, + + TEMPERATURE_MEASURE_HOLD = 0xE3, + HUMDITY_MEASURE_HOLD = 0xE5, + TEMPERATURE_MEASURE_PREVIOUS = 0xE0, + + WRITE_USER_REGISTER = 0xE6, + READ_USER_REGISTER = 0xE7, + READ_HEATER_REGISTER = 0x11, + WRITE_HEATER_REGISTER = 0x51, + } + + /// + /// Resolution of sensor data + /// + public enum SensorResolution : byte + { + /// + /// 14 bit temperature, 12 bit humidity + /// + TEMP14_HUM12 = 0x00, + /// + /// 12 bit temperature, 8 bit humidity + /// + TEMP12_HUM8 = 0x01, + /// + /// 13 bit temperature, 10 bit humidity + /// + TEMP13_HUM10 = 0x80, + /// + /// 11 bit temperature, 11 bit humidity + /// + TEMP11_HUM11 = 0x81, + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs new file mode 100644 index 0000000000..ff466223eb --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu21d.cs @@ -0,0 +1,116 @@ +using Meadow.Hardware; +using Meadow.Units; +using System; +using System.Threading; +using System.Threading.Tasks; +using HU = Meadow.Units.RelativeHumidity.UnitType; + +namespace Meadow.Foundation.Sensors.Atmospheric +{ + /// + /// Provide access to the Htu21d(f) + /// temperature and humidity sensors + /// + public partial class Htu21d : Htux1dBase + { + /// + /// Firmware revision of the sensor. + /// + public byte FirmwareRevision { get; private set; } + + /// + /// Create a new Htu21d temperature and humidity sensor + /// + /// Sensor address (default to 0x40) + /// I2CBus (default to 100 KHz) + /// Update interval, defaults to 1 sec if null + public Htu21d(II2cBus i2cBus, byte address = (byte)Addresses.Default, TimeSpan? updateInterval = null) + : base(i2cBus, address, updateInterval) + { + Initialize(); + } + + /// + /// Initialize HTU21D + /// + protected void Initialize () + { + Peripheral?.Write((byte)Registers.SOFT_RESET); + + Thread.Sleep(100); + + SetResolution(SensorResolution.TEMP11_HUM11); + } + + protected override async Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity)> ReadSensor() + { + (Units.Temperature Temperature, RelativeHumidity Humidity) conditions; + + return await Task.Run(() => + { + // humidity + Peripheral?.Write((byte)Registers.HUMDITY_MEASURE_NOHOLD); + Thread.Sleep(20); // Maximum conversion time is 12ms (page 5 of the datasheet) + + Peripheral?.Read(ReadBuffer.Span[0..2]);// 2 data bytes plus a checksum (we ignore the checksum here) + var humidityReading = (ushort)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); + var humidity = (125 * (float)humidityReading / 65536) - 6; + humidity = Math.Clamp(humidity, 0, 100); + conditions.Humidity = new RelativeHumidity(humidity, HU.Percent); + + // temperature + Peripheral?.Write((byte)Registers.TEMPERATURE_MEASURE_NOHOLD); + Thread.Sleep(20); // Maximum conversion time is 12ms (page 5 of the datasheet) + + Peripheral?.Read(ReadBuffer.Span[0..2]);// 2 data bytes plus a checksum (we ignore the checksum here) + var temperatureReading = (short)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); + conditions.Temperature = new Units.Temperature((float)(((175.72 * temperatureReading) / 65536) - 46.85), Units.Temperature.UnitType.Celsius); + + return conditions; + }); + } + + /// + /// Turn the heater on or off + /// + /// Heater status, true = turn heater on, false = turn heater off. + public void Heater(bool heaterOn) + { + if (Peripheral == null) return; + + var register = Peripheral.ReadRegister((byte)Registers.READ_HEATER_REGISTER); + register &= 0xfd; + + if (heaterOn) + { + register |= 0x02; + } + Peripheral.WriteRegister((byte)Registers.WRITE_HEATER_REGISTER, register); + } + + //Set sensor resolution + /*******************************************************************************************/ + //Sets the sensor resolution to one of four levels + //Page 12: + // 0/0 = 12bit RH, 14bit Temp + // 0/1 = 8bit RH, 12bit Temp + // 1/0 = 10bit RH, 13bit Temp + // 1/1 = 11bit RH, 11bit Temp + //Power on default is 0/0 + void SetResolution(SensorResolution resolution) + { + if (Peripheral == null) return; + + var register = Peripheral.ReadRegister((byte)Registers.READ_USER_REGISTER); + + var res = (byte)resolution; + + register &= 0x73; //Turn off the resolution bits + res &= 0x81; //Turn off all other bits but resolution bits + register |= res; //Mask in the requested resolution bits + + //Request a write to user register + Peripheral.WriteRegister((byte)Registers.WRITE_USER_REGISTER, register); //Write the new resolution bits + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.Enums.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.Enums.cs new file mode 100644 index 0000000000..c8ac9135fc --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.Enums.cs @@ -0,0 +1,43 @@ +using System; + +namespace Meadow.Foundation.Sensors.Atmospheric +{ + public partial class Htu31d + { + /// + /// Valid addresses for the sensor. + /// + public enum Addresses : byte + { + /// + /// Bus address 0x40 + /// + Address_0x40 = 0x40, + /// + /// Default bus address + /// + Default = Address_0x40 + } + + private enum Commands : byte + { + /** Read temperature and humidity. */ + ReadTempHumidity = 0x00, + + /** Start a conversion! */ + Conversion = 0x40, + + /** Read serial number command. */ + ReadSerial = 0x0A, + + /** Enable heater */ + HeaterOn = 0x04, + + /** Disable heater */ + HeaterOff = 0x02, + + /** Reset command. */ + Reset = 0x1e, + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs new file mode 100644 index 0000000000..47c25207c8 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Drivers/Htu31d.cs @@ -0,0 +1,104 @@ +using Meadow.Hardware; +using Meadow.Peripherals.Sensors; +using Meadow.Units; +using System; +using System.Threading; +using System.Threading.Tasks; +using TU = Meadow.Units.Temperature.UnitType; +using HU = Meadow.Units.RelativeHumidity.UnitType; + +namespace Meadow.Foundation.Sensors.Atmospheric +{ + /// + /// Provide access to the Htu31d + /// temperature and humidity sensors + /// + public partial class Htu31d : Htux1dBase + { + /// + /// Create a new Htu31d temperature and humidity sensor. + /// + /// Sensor address (default to 0x40). + /// I2CBus (default to 100 KHz). + /// Update interval, defaults to 1 sec if null + public Htu31d(II2cBus i2cBus, byte address = (byte)Addresses.Default, TimeSpan? updateInterval = null) + : base(i2cBus, address, updateInterval) + { + SerialNumber = GetSerial(); + } + + /// + /// Read atmospheric data from sensor + /// + /// + protected override async Task<(Units.Temperature? Temperature, RelativeHumidity? Humidity)> ReadSensor() + { + (Units.Temperature Temperature, RelativeHumidity Humidity) conditions; + + return await Task.Run(() => + { + Peripheral?.Write((byte)Commands.Conversion); + Thread.Sleep(20); // Maximum conversion time is 20ms + Peripheral?.ReadRegister((byte)Commands.ReadTempHumidity, ReadBuffer.Span[0..5]);// 2 bytes for temp, checksum, 2 bytes humidity, checksum + + // temperature + var temperatureReading = (ushort)((ReadBuffer.Span[0] << 8) + ReadBuffer.Span[1]); + conditions.Temperature = new Units.Temperature((float)(((175.72 * temperatureReading) / 65536) - 46.85), Units.Temperature.UnitType.Celsius); + + // humidity + var humidityReading = (ushort)((ReadBuffer.Span[3] << 8) + ReadBuffer.Span[4]); + var humidity = (125 * (float)humidityReading / 65536) - 6; + humidity = Math.Clamp(humidity, 0, 100); + conditions.Humidity = new RelativeHumidity(humidity, HU.Percent); + + return conditions; + }); + } + + /// + /// Turn the heater on or off + /// + /// Heater status, true = turn heater on, false = turn heater off + public void Heater(bool heaterOn) + { + if(heaterOn) + { + Peripheral?.WriteRegister((byte)Commands.HeaterOn, 1); + } + else + { + Peripheral?.WriteRegister((byte)Commands.HeaterOff, 1); + } + } + + /// + /// Reset the sensor + /// + public void Reset() + { + Peripheral?.WriteRegister((byte)Commands.Reset, 1); + + Thread.Sleep(15); //could make this async ... + } + + private UInt32 GetSerial() + { + if (Peripheral == null) return 0; + + var data = new byte[4]; + + Peripheral.ReadRegister((byte)Commands.ReadSerial, data); + + UInt32 serial; + + serial = data[0]; + serial <<= 8; + serial |= data[1]; + serial <<= 8; + serial |= data[2]; + serial <<= 8; + serial |= data[3]; + return serial; + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Htux1dBase.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Htux1dBase.cs new file mode 100644 index 0000000000..213beb4091 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Htux1dBase.cs @@ -0,0 +1,88 @@ +using Meadow.Hardware; +using Meadow.Peripherals.Sensors; +using Meadow.Units; +using System; + +namespace Meadow.Foundation.Sensors.Atmospheric +{ + /// + /// Valid addresses for the sensor + /// + public enum Addresses : byte + { + /// + /// Bus address 0x40 + /// + Address_0x40 = 0x40, + /// + /// Default bus address + /// + Default = Address_0x40 + } + + /// + /// Abstract HTDx1D base class for HTU21D and HTU31D + /// + public abstract class Htux1dBase : + ByteCommsSensorBase<(Meadow.Units.Temperature? Temperature, RelativeHumidity? Humidity)>, + ITemperatureSensor, IHumiditySensor + { + /// + /// Temperature changed event + /// + public event EventHandler> TemperatureUpdated = delegate { }; + + /// + /// Humidity changed event + /// + public event EventHandler> HumidityUpdated = delegate { }; + + /// + /// Default I2C bus speed + /// + public int DEFAULT_SPEED => 400; + + /// + /// The temperature, from the last reading + /// + public Units.Temperature? Temperature => Conditions.Temperature; + + /// + /// The humidity, in percent relative humidity, from the last reading + /// + public RelativeHumidity? Humidity => Conditions.Humidity; + + /// + /// Serial number of the device. + /// + public UInt32 SerialNumber { get; protected set; } + + /// + /// Abstract HTDx1D ctor for HTU21D and HTU31D + /// + /// + /// + /// + public Htux1dBase(II2cBus i2cBus, byte address = (byte)Addresses.Default, TimeSpan? updateInterval = null) + : base(i2cBus, address, (int)(updateInterval == null ? 1000 : updateInterval.Value.TotalMilliseconds)) + { + } + + /// + /// Inheritance-safe way to raise events and notify observers. + /// + /// New temperature and humidity values + protected override void RaiseEventsAndNotify(IChangeResult<(Units.Temperature? Temperature, RelativeHumidity? Humidity)> changeResult) + { + if (changeResult.New.Temperature is { } temp) + { + TemperatureUpdated?.Invoke(this, new ChangeResult(temp, changeResult.Old?.Temperature)); + } + if (changeResult.New.Humidity is { } humidity) + { + HumidityUpdated?.Invoke(this, new ChangeResult(humidity, changeResult.Old?.Humidity)); + } + base.RaiseEventsAndNotify(changeResult); + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Driver/Sensors.Atmospheric.Htu21d.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Sensors.Atmospheric.Htux1d.csproj similarity index 59% rename from Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Driver/Sensors.Atmospheric.Htu21d.csproj rename to Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Sensors.Atmospheric.Htux1d.csproj index 61516cc334..7856ad1496 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Driver/Sensors.Atmospheric.Htu21d.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Driver/Sensors.Atmospheric.Htux1d.csproj @@ -5,28 +5,22 @@ Wilderness Labs, Inc netstandard2.1 Library - Htu21d + Htux1d Wilderness Labs, Inc http://developer.wildernesslabs.co/Meadow/Meadow.Foundation/ - Meadow.Foundation.Sensors.Atmospheric.Htu21d + Meadow.Foundation.Sensors.Atmospheric.Htux1d https://github.com/WildernessLabs/Meadow.Foundation - Meadow.Foundation, Atmospheric, Htu21d - 0.1.45 + Meadow.Foundation, Atmospheric, Humidity, Temperature, Htu21d, Htu31d + 0.1.0 true - HTU21D(F) I2C temperature and humidity sensor + HTU21D(F) and HTU31D I2C temperature and humidity sensors enable - - 8.0 - - - 8.0 + + 9.0 - - - diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Samples/Htu21d_Sample/Htu21d_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/Htu21d_Sample.csproj similarity index 71% rename from Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Samples/Htu21d_Sample/Htu21d_Sample.csproj rename to Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/Htu21d_Sample.csproj index 1d508bf45d..7b0208976b 100644 --- a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Samples/Htu21d_Sample/Htu21d_Sample.csproj +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/Htu21d_Sample.csproj @@ -9,14 +9,11 @@ App enable - - 8.0 - - - 8.0 + + 9.0 - + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Samples/Htu21d_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/MeadowApp.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Samples/Htu21d_Sample/MeadowApp.cs rename to Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/MeadowApp.cs diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Samples/Htu21d_Sample/Program.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/Program.cs similarity index 100% rename from Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu21d/Samples/Htu21d_Sample/Program.cs rename to Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu21d_Sample/Program.cs diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/Htu31d_Sample.csproj b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/Htu31d_Sample.csproj new file mode 100644 index 0000000000..7b0208976b --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/Htu31d_Sample.csproj @@ -0,0 +1,19 @@ + + + https://github.com/WildernessLabs/Meadow.Foundation + Wilderness Labs, Inc + Wilderness Labs, Inc + true + netstandard2.1 + Exe + App + enable + + + 9.0 + + + + + + diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/MeadowApp.cs new file mode 100644 index 0000000000..0dc370122d --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/MeadowApp.cs @@ -0,0 +1,63 @@ +using Meadow; +using Meadow.Devices; +using Meadow.Foundation.Sensors.Atmospheric; +using System; +using System.Threading.Tasks; + +namespace MeadowApp +{ + public class MeadowApp : App + { + // + + readonly Htu31d sensor; + + public MeadowApp() + { + Console.WriteLine("Initializing..."); + + sensor = new Htu31d(Device.CreateI2cBus()); + + var consumer = Htu31d.CreateObserver( + handler: result => + { + Console.WriteLine($"Observer: Temp changed by threshold; new temp: {result.New.Temperature?.Celsius:N2}C, old: {result.Old?.Temperature?.Celsius:N2}C"); + }, + filter: result => + { + //c# 8 pattern match syntax. checks for !null and assigns var. + if (result.Old?.Temperature is { } oldTemp && + result.Old?.Humidity is { } oldHumidity && + result.New.Temperature is { } newTemp && + result.New.Humidity is { } newHumidity) + { + return ((newTemp - oldTemp).Abs().Celsius > 0.5 && + (newHumidity - oldHumidity).Percent > 0.05); + } + return false; + } + ); + sensor.Subscribe(consumer); + + sensor.Updated += (sender, result) => + { + Console.WriteLine($" Temperature: {result.New.Temperature?.Celsius:F1}C"); + Console.WriteLine($" Relative Humidity: {result.New.Humidity?.Percent:F1}%"); + }; + + ReadConditions().Wait(); + + sensor.StartUpdating(TimeSpan.FromSeconds(1)); + } + + async Task ReadConditions() + { + var result = await sensor.Read(); + Console.WriteLine("Initial Readings:"); + Console.WriteLine($" Temperature: {result.Temperature?.Celsius:F1}C"); + Console.WriteLine($" Relative Humidity: {result.Humidity:F1}%"); + } + + // + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/Program.cs b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/Program.cs new file mode 100644 index 0000000000..5ab1662da4 --- /dev/null +++ b/Source/Meadow.Foundation.Peripherals/Sensors.Atmospheric.Htu2xd/Samples/Htu31d_Sample/Program.cs @@ -0,0 +1,17 @@ +using System.Threading; +using Meadow; + +namespace MeadowApp +{ + class Program + { + static IApp app; + + public static void Main(string[] args) + { + app = new MeadowApp(); + + Thread.Sleep(Timeout.Infinite); + } + } +} \ No newline at end of file diff --git a/Source/Meadow.Foundation.sln b/Source/Meadow.Foundation.sln index ff0704068f..a2b1c7f730 100644 --- a/Source/Meadow.Foundation.sln +++ b/Source/Meadow.Foundation.sln @@ -163,7 +163,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{6A66 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Sht31d", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Sht31D\Driver\Sensors.Atmospheric.Sht31d.csproj", "{81E6E143-8752-45A9-8BDA-C6F4730A7DF1}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sensors.Atmospheric.Htu21d", "Sensors.Atmospheric.Htu21d", "{27F8F5B1-F535-4116-BB16-63454D21D13B}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sensors.Atmospheric.Htux1d", "Sensors.Atmospheric.Htux1d", "{27F8F5B1-F535-4116-BB16-63454D21D13B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sensors.Atmospheric.Hih6130", "Sensors.Atmospheric.Hih6130", "{91CA9079-8D10-4A3B-AE42-CB49781687C0}" EndProject @@ -318,10 +318,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Distance.Gp2d12", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Mpl115a2", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Mpl115a2\Driver\Sensors.Atmospheric.Mpl115a2.csproj", "{949DBB54-777B-4C58-A39D-EEA02F00DAB4}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Htu21d_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Htu21d\Samples\Htu21d_Sample\Htu21d_Sample.csproj", "{0A1A1B26-9653-49ED-91C4-43DC5E129EFD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Htu21d", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Htu21d\Driver\Sensors.Atmospheric.Htu21d.csproj", "{AB2ADDF2-5307-4F0A-9E34-E7A2242176CF}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hih6130_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Hih6130\Samples\Hih6130_Sample\Hih6130_Sample.csproj", "{EF135479-CBF6-4E03-B6EB-55EA850946A3}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Bmp085", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Bmp085\Driver\Sensors.Atmospheric.Bmp085.csproj", "{728ECF00-EB02-4981-87F9-A72A163DB93C}" @@ -996,6 +992,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Maple.Unit.Tests", "Meadow. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Maple.Server_UDP_Listener", "Meadow.Foundation.Libraries_and_Frameworks\Web.Maple.MapleServer\Utilities\Maple.Server_UDP_Listener\Maple.Server_UDP_Listener.csproj", "{6B545252-7BC0-4FF2-B6FB-F37C27C87B73}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sensors.Atmospheric.Htux1d", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Htu2xd\Driver\Sensors.Atmospheric.Htux1d.csproj", "{F6FE1203-D39F-40DD-BD89-82CFF8AD694E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Htu21d_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Htu2xd\Samples\Htu21d_Sample\Htu21d_Sample.csproj", "{35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Htu31d_Sample", "Meadow.Foundation.Peripherals\Sensors.Atmospheric.Htu2xd\Samples\Htu31d_Sample\Htu31d_Sample.csproj", "{BA371CFB-C07A-4D29-B700-EAD37DD30D6F}" +EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataLoggers.SensorReading", "Meadow.Foundation.Libraries_and_Frameworks\DataLoggers.SensorReading\Driver\DataLoggers.SensorReading.csproj", "{A65353C4-D300-421D-AD04-5D69AF02BD9F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Location.Gnss.NmeaProcessor", "Meadow.Foundation.Libraries_and_Frameworks\Location.Gnss.NmeaProcessor\Driver\Location.Gnss.NmeaProcessor.csproj", "{3ACEB0E7-9EA2-43A6-93E2-E9A14644E7BE}" @@ -1276,14 +1278,6 @@ Global {949DBB54-777B-4C58-A39D-EEA02F00DAB4}.Debug|Any CPU.Build.0 = Debug|Any CPU {949DBB54-777B-4C58-A39D-EEA02F00DAB4}.Release|Any CPU.ActiveCfg = Release|Any CPU {949DBB54-777B-4C58-A39D-EEA02F00DAB4}.Release|Any CPU.Build.0 = Release|Any CPU - {0A1A1B26-9653-49ED-91C4-43DC5E129EFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0A1A1B26-9653-49ED-91C4-43DC5E129EFD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0A1A1B26-9653-49ED-91C4-43DC5E129EFD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0A1A1B26-9653-49ED-91C4-43DC5E129EFD}.Release|Any CPU.Build.0 = Release|Any CPU - {AB2ADDF2-5307-4F0A-9E34-E7A2242176CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB2ADDF2-5307-4F0A-9E34-E7A2242176CF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB2ADDF2-5307-4F0A-9E34-E7A2242176CF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB2ADDF2-5307-4F0A-9E34-E7A2242176CF}.Release|Any CPU.Build.0 = Release|Any CPU {EF135479-CBF6-4E03-B6EB-55EA850946A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EF135479-CBF6-4E03-B6EB-55EA850946A3}.Debug|Any CPU.Build.0 = Debug|Any CPU {EF135479-CBF6-4E03-B6EB-55EA850946A3}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -2310,6 +2304,24 @@ Global {6B545252-7BC0-4FF2-B6FB-F37C27C87B73}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B545252-7BC0-4FF2-B6FB-F37C27C87B73}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B545252-7BC0-4FF2-B6FB-F37C27C87B73}.Release|Any CPU.Build.0 = Release|Any CPU + {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Release|Any CPU.Build.0 = Release|Any CPU + {F6FE1203-D39F-40DD-BD89-82CFF8AD694E}.Release|Any CPU.Deploy.0 = Release|Any CPU + {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Release|Any CPU.Build.0 = Release|Any CPU + {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B}.Release|Any CPU.Deploy.0 = Release|Any CPU + {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Release|Any CPU.Build.0 = Release|Any CPU + {BA371CFB-C07A-4D29-B700-EAD37DD30D6F}.Release|Any CPU.Deploy.0 = Release|Any CPU {A65353C4-D300-421D-AD04-5D69AF02BD9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A65353C4-D300-421D-AD04-5D69AF02BD9F}.Debug|Any CPU.Build.0 = Debug|Any CPU {A65353C4-D300-421D-AD04-5D69AF02BD9F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU @@ -2485,8 +2497,6 @@ Global {262EB4C5-8F3B-4BD2-9448-EA136549D38C} = {2EEF65DD-A7F6-4E60-8CB6-6783231CDD3F} {E2D4DFD5-F251-42E7-975B-F82CBEB3F35B} = {8C198F16-DD20-46E5-8D34-1AD95DFC438A} {949DBB54-777B-4C58-A39D-EEA02F00DAB4} = {DD2F1AA1-B2FB-40B7-9537-0070F5F97173} - {0A1A1B26-9653-49ED-91C4-43DC5E129EFD} = {5DA778E0-E827-4A63-844B-1166BEEB8897} - {AB2ADDF2-5307-4F0A-9E34-E7A2242176CF} = {27F8F5B1-F535-4116-BB16-63454D21D13B} {EF135479-CBF6-4E03-B6EB-55EA850946A3} = {6416DC2C-DED8-44E7-8783-24EFB7F9C682} {728ECF00-EB02-4981-87F9-A72A163DB93C} = {C724C5EE-7972-41DA-9FDB-42416980F25C} {59EED95C-1CA7-466C-853C-BF14E1EF43A9} = {21C511DD-43DD-486E-86D7-18D8F6810ACD} @@ -2823,6 +2833,9 @@ Global {9FC9AAAC-9654-4A54-8FC7-7B76D95A4E6F} = {8EE895A8-B28B-4432-B273-29115038A8DE} {E3BDF7CE-658E-480E-8EB7-B981C6DEAE0F} = {BDD4ACA9-4A60-40D8-9EFA-B97DAA346CD3} {6B545252-7BC0-4FF2-B6FB-F37C27C87B73} = {9FC9AAAC-9654-4A54-8FC7-7B76D95A4E6F} + {F6FE1203-D39F-40DD-BD89-82CFF8AD694E} = {27F8F5B1-F535-4116-BB16-63454D21D13B} + {35A953A9-FEF5-4DCE-86FB-EE9B298FBA5B} = {5DA778E0-E827-4A63-844B-1166BEEB8897} + {BA371CFB-C07A-4D29-B700-EAD37DD30D6F} = {5DA778E0-E827-4A63-844B-1166BEEB8897} {A65353C4-D300-421D-AD04-5D69AF02BD9F} = {D47B0BF3-B61F-4F83-BD73-3E749DFD470C} {3ACEB0E7-9EA2-43A6-93E2-E9A14644E7BE} = {23CAD9E3-4913-4CC0-93DF-91494B3CFC44} {F809885F-C4D9-460F-B231-3E2F01984F99} = {17E22697-CB77-4F38-AB13-BBDBD53B7829}