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); } }
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); }
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); }