public override bool Configure(string jsonDeviceConfiguration)
        {
            var config      = DeserializeDeviceConfig <Si7021Configuration>(jsonDeviceConfiguration);
            var i2CSettings = new I2cConnectionSettings(1, config.I2CAddress);
            var i2CDevice   = I2cDevice.Create(i2CSettings);

            // TODO: probably requires try catch?! Check device availability

            _si7021 = new Si7021(i2CDevice)
            {
                Heater     = config.HeaterIsEnabled,
                Resolution = config.Resolution
            };

            return(true);
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            I2cConnectionSettings settings = new I2cConnectionSettings(1, Si7021.DefaultI2cAddress);
            I2cDevice             device   = I2cDevice.Create(settings);

            using (Si7021 sensor = new Si7021(device, Resolution.Resolution1))
            {
                while (true)
                {
                    Console.WriteLine($"Temperature: {sensor.Temperature.Celsius}℃");
                    Console.WriteLine($"Humidity: {sensor.Humidity}%");
                    Console.WriteLine();

                    Thread.Sleep(1000);
                }
            }
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello Si7021!");

            const int Si7021Address = 0x40;
            const int BusId         = 1;

            var i2cSettings = new I2cConnectionSettings(BusId, Si7021Address);
            var i2cDevice   = new Windows10I2cDevice(i2cSettings);
            var i2CSi7021   = new Si7021(i2cDevice);

            using (i2CSi7021)
            {
                Console.WriteLine($"Temperature in fahrenheit: {i2CSi7021.ReadTemperatureInFahrenheit()}");
                Console.WriteLine($"Temperature in celcius: {i2CSi7021.ReadTemperatureInCelcius()}");
                Console.WriteLine($"Relative humidity is: {i2CSi7021.ReadHumidity()}%");
            }
        }
Esempio n. 4
0
        public static (double temperatureFahrenheit, double relativeHumidityPercent) GetSiTemperatureAndHumidity()
        {
            // bus id on the raspberry pi 3 and 4
            const int busId = 1;
            // set this to the current sea level pressure in the area for correct altitude readings

            I2cConnectionSettings i2CSettings = new(busId, Si7021.DefaultI2cAddress);
            var i2CDevice = I2cDevice.Create(i2CSettings);

            using var i2CSi7021 = new Si7021(i2CDevice);

            var temperature = i2CSi7021.Temperature;

            Console.WriteLine($"Temperature: {Green($"{temperature.DegreesFahrenheit:0.#}\u00B0F")}");

            var humidity = i2CSi7021.Humidity;

            Console.WriteLine($"Humidity: {Green($"{humidity.Percent:0}%")}");

            return(temperature.DegreesFahrenheit, humidity.Percent);
        }
Esempio n. 5
0
        public static void Main(string[] args)
        {
            I2cConnectionSettings settings = new I2cConnectionSettings(1, Si7021.DefaultI2cAddress);
            I2cDevice             device   = I2cDevice.Create(settings);

            using (Si7021 sensor = new Si7021(device, Resolution.Resolution1))
            {
                while (true)
                {
                    var tempValue = sensor.Temperature;
                    var humValue  = sensor.Humidity;

                    Console.WriteLine($"Temperature: {tempValue.DegreesCelsius:0.#}\u00B0C");
                    Console.WriteLine($"Relative humidity: {humValue.Percent:0.#}%");

                    // WeatherHelper supports more calculations, such as saturated vapor pressure, actual vapor pressure and absolute humidity.
                    Console.WriteLine($"Heat index: {WeatherHelper.CalculateHeatIndex(tempValue, humValue).DegreesCelsius:0.#}\u00B0C");
                    Console.WriteLine($"Dew point: {WeatherHelper.CalculateDewPoint(tempValue, humValue).DegreesCelsius:0.#}\u00B0C");
                    Console.WriteLine();

                    Thread.Sleep(1000);
                }
            }
        }
Esempio n. 6
0
        static async Task Main(string[] args)
        {
            try
            {
                //
                // Parse options
                //

                Options = new AppOptions();

                Options.Parse(args);

                if (Options.Exit)
                {
                    return;
                }

                //
                // Open Device
                //

                using (var device = await Si7021.Open())
                {
                    if (null == device)
                    {
                        throw new ApplicationException($"Unable to open sensor. Please ensure that no other applications are using this device.");
                    }

                    //
                    // Dump device info
                    //

                    Log.WriteLineRaw($"Model: {device.Model}");
                    Log.WriteLineRaw($"Serial Number: {device.SerialNumber}");
                    Log.WriteLineRaw($"Firmware Rev: {device.FirmwareRevision}");

                    //
                    // Init module client
                    //

                    if (Options.UseEdge)
                    {
                        Init().Wait();
                    }

                    //
                    // Launch background thread to obtain readings
                    //


                    var background = Task.Run(async() =>
                    {
                        while (true)
                        {
                            device.Update();

                            var message = new MessageBody();
                            message.Ambient.Temperature = device.Temperature;
                            message.Ambient.Humidity    = device.Humidity;
                            message.TimeCreated         = DateTime.Now;

                            string dataBuffer = JsonConvert.SerializeObject(message);
                            var eventMessage  = new Message(Encoding.UTF8.GetBytes(dataBuffer));
                            Log.WriteLineRaw($"SendEvent: [{dataBuffer}]");

                            if (Options.UseEdge)
                            {
                                await ioTHubModuleClient.SendEventAsync("temperatureOutput", eventMessage);
                            }

                            await Task.Delay(1000);
                        }
                    });

                    //
                    // Wait until the app unloads or is cancelled
                    //

                    var cts = new CancellationTokenSource();
                    AssemblyLoadContext.Default.Unloading += (ctx) => cts.Cancel();
                    Console.CancelKeyPress += (sender, cpe) => cts.Cancel();
                    WhenCancelled(cts.Token).Wait();
                }
            }
            catch (Exception ex)
            {
                Log.WriteLineException(ex);
            }
        }
 public void Dispose()
 {
     _si7021.Heater = false;
     _si7021.Dispose();
     _si7021 = null;
 }