예제 #1
0
        private async void _periodicTimer_Tick(object sender, object e)
        {
            Bmp180SensorData sensorData = null;

            // Read and format Sensor data
            try
            {
                sensorData = await _bmp180.GetSensorDataAsync(Bmp180AccuracyMode.UltraHighResolution);

                Temperature = sensorData.Temperature;
                Pressure    = sensorData.Pressure;
                Altitude    = sensorData.Altitude;
                LastUpdated = DateTime.UtcNow.ToString();
            }
            catch (Exception)
            {
                LastUpdated = "Sensor Error! Can't get values from sensor.";
            }

            if (sensorData != null)
            {
                // reference: https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-csharp-csharp-getstarted#create-a-simulated-device-app
                // send to IoT Hub
                SendDeviceToCloudMessagesAsync(sensorData);
            }
        }
예제 #2
0
        public async Task <Bmp180SensorData> GetSensorDataAsync(Bmp180AccuracyMode oss)
        {
            // Create the return object.
            var sensorData = new Bmp180SensorData();

            // Read the Uncompestated values from the sensor.
            var tData = await ReadUncompenstatedTemperature();

            var pData = await ReadUncompenstatedPressure(oss);

            // Keep raw data for debug
            sensorData.UncompenstatedTemperature = tData;
            sensorData.UncompenstatedPressure    = pData;

            var ut = (tData[0] << 8) + tData[1];
            var up = (pData[0] * 256.0) + pData[1] + (pData[2] / 256.0);

            // Calculate real values
            var b5 = calculateB5(ut);

            var t = (b5 + 8) >> 4;

            sensorData.Temperature = t / 10.0;

            var s = sensorData.Temperature - 25.0;
            var x = (x2 * Math.Pow(s, 2)) + (x1 * s) + x0;
            var y = (y2 * Math.Pow(s, 2)) + (y1 * s) + y0;
            var z = (up - x) / y;

            sensorData.Pressure = (p2 * Math.Pow(z, 2)) + (p1 * z) + p0;

            sensorData.Altitude = 44330 * (1 - Math.Pow(sensorData.Pressure / 1013.25, 1 / 5.255));

            return(sensorData);
        }
예제 #3
0
 private async void SendDeviceToCloudMessagesAsync(Bmp180SensorData sensorData)
 {
     var messageString = JsonConvert.SerializeObject(new WeatherDTO
     {
         // bestAccuracyLocationName
         dateTime    = LastUpdated,
         temperature = sensorData.Temperature,
         pressure    = sensorData.Pressure,
         altitude    = sensorData.Altitude,
         latitude    = LocationManager.currentlocation.Position.Latitude,
         longitude   = LocationManager.currentlocation.Position.Longitude,
     });
     var message = new Microsoft.Azure.Devices.Client.Message(Encoding.ASCII.GetBytes(messageString));
     await deviceClient.SendEventAsync(message);
 }