private MCP3008SensorData ReadLightStatusInRoom() { var MCP3008SensorData = new MCP3008SensorData(); try { if (mcp3008 == null) { Debug.WriteLine("Light Sensor data is not ready"); MCP3008SensorData.lightStatus = "N/A"; return(MCP3008SensorData); } // The new light state, assume it's just right to start. eState newState = eState.JustRight; // Read from the ADC chip the current values of the two pots and the photo cell. MCP3008SensorData.lowPotReadVal = mcp3008.ReadADC(LowPotentiometerADCChannel); MCP3008SensorData.highPotReadVal = mcp3008.ReadADC(HighPotentiometerADCChannel); MCP3008SensorData.cdsReadVal = mcp3008.ReadADC(CDSADCChannel); // convert the ADC readings to voltages to make them more friendly. MCP3008SensorData.lowPotVoltage = mcp3008.ADCToVoltage(MCP3008SensorData.lowPotReadVal); MCP3008SensorData.highPotVoltage = mcp3008.ADCToVoltage(MCP3008SensorData.highPotReadVal); MCP3008SensorData.cdsVoltage = mcp3008.ADCToVoltage(MCP3008SensorData.cdsReadVal); // Let us know what was read in. Debug.WriteLine(String.Format("Read values {0}, {1}, {2} ", MCP3008SensorData.lowPotReadVal, MCP3008SensorData.highPotReadVal, MCP3008SensorData.cdsReadVal)); Debug.WriteLine(String.Format("Voltages {0}, {1}, {2} ", MCP3008SensorData.lowPotVoltage, MCP3008SensorData.highPotVoltage, MCP3008SensorData.cdsVoltage)); // Compute the new state by first checking if the light level is too low if (MCP3008SensorData.cdsVoltage < MCP3008SensorData.lowPotVoltage) { newState = eState.TooDark; } // And now check if it too high. if (MCP3008SensorData.cdsVoltage > MCP3008SensorData.highPotVoltage) { newState = eState.TooBright; } // Use another method to determine what to do with the state. MCP3008SensorData.lightStatus = CheckForStateValue(newState); return(MCP3008SensorData); } catch (Exception) { MCP3008SensorData.lightStatus = "N/A"; return(MCP3008SensorData); } }
public async void Run(IBackgroundTaskInstance taskInstance) { // Using BackgroundTaskDeferral // as described in http://aka.ms/backgroundtaskdeferral BackgroundTaskDeferral deferral = taskInstance.GetDeferral(); bmpsensor = new BMP280(); await bmpsensor.Initialize(); mcp3008 = new MCP3008(ReferenceVoltage); mcp3008.Initialize(); InitGPIO(); bmpSensorData = new BMP280SensorData(); adcSensorData = new MCP3008SensorData(); string roomstatus = String.Empty; while (true) { Debug.WriteLine("Reading taken at " + DateTime.UtcNow); #region Read pressure and temperature data from sensor bmpSensorData.Temperature = await bmpsensor.ReadTemperature(); bmpSensorData.Pressure = await bmpsensor.ReadPreasure(); Debug.WriteLine(bmpSensorData.Temperature + " deg C"); Debug.WriteLine(bmpSensorData.Pressure + " Pa"); Debug.WriteLine(bmpSensorData.Pressure / 100000 + " Bar"); Debug.WriteLine(bmpSensorData.Pressure / 100 + " milliBar"); #endregion #region Reading Lighting Information from Sensor adcSensorData = ReadLightStatusInRoom(); Debug.WriteLine("Light Status in Room: " + adcSensorData.lightStatus); #endregion #region Read the motion sensor // If sensor pin is high, then motion was detected if (pir.Read() == GpioPinValue.High) { // turn on the LED led.Write(GpioPinValue.Low); Debug.WriteLine("Motion detected - Room is occupied"); roomstatus = "Occupied"; } else { // turn off the LED led.Write(GpioPinValue.High); Debug.WriteLine("No motion detected - Room is vacant"); roomstatus = "Vacant"; } #endregion await SendDeviceToCloudMessageAsync(roomstatus, bmpSensorData, adcSensorData); await Task.Delay(10000); } // Once the asynchronous method(s) are done, close the deferral. // deferral.Complete(); }
private async Task SendDeviceToCloudMessageAsync(string status, BMP280SensorData BMP280SensorData, MCP3008SensorData MCP3008SensorData) { ConferenceRoomDataPoint conferenceRoomDataPoint = new ConferenceRoomDataPoint() { DeviceId = deviceName, Time = DateTime.UtcNow.ToString("o"), RoomTemp = BMP280SensorData.Temperature.ToString(), RoomPressure = BMP280SensorData.Pressure.ToString(), RoomAlt = BMP280SensorData.Altitude.ToString(), LightStatus = MCP3008SensorData.lightStatus, LightCDSValue = MCP3008SensorData.cdsReadVal.ToString(), LightCDSVoltageValue = MCP3008SensorData.cdsVoltage.ToString(), RoomStatus = status }; if (status == "Occupied") { conferenceRoomDataPoint.Color = "Red"; } else { conferenceRoomDataPoint.Color = "Green"; } var jsonString = JsonConvert.SerializeObject(conferenceRoomDataPoint); //var jsonStringInBytes = new Message(Encoding.ASCII.GetBytes(jsonString)); await AzureIoTHub.SendDeviceToCloudMessageAsync(jsonString); Debug.WriteLine("{0} > Sending message: {1}", DateTime.UtcNow, jsonString); }