private Dht22 GetSensor() { GpioDriver driver = new RaspberryPi3Driver(); GpioController controller = new GpioController(PinNumberingScheme.Logical, driver); return(new Dht22(4, gpioController: controller)); }
public static void ReadSensor() { var blinky = false; GpioDriver driver = new RaspberryPi3Driver(); var controller = new GpioController(PinNumberingScheme.Logical, driver); controller.OpenPin(16, PinMode.Output); using (var dht = new Dht11(4, gpioController: controller)) { while (true) { var temperature = dht.Temperature; var humidity = dht.Humidity; if (dht.IsLastReadSuccessful) { Console.WriteLine($"Temperature: {temperature.DegreesCelsius} \u00B0C, Humidity: {humidity.Percent} %"); } if (!blinky) { controller.Write(16, PinValue.High); } else { controller.Write(16, PinValue.Low); } blinky = !blinky; Thread.Sleep(1000); } } }
static async Task SendEvents(ModuleClient moduleClient) { var count = 0; var blinky = false; GpioDriver driver = new RaspberryPi3Driver(); var controller = new GpioController(PinNumberingScheme.Logical, driver); controller.OpenPin(16, PinMode.Output); using (var dht = new Dht11(4, gpioController: controller)) { while (!cts.Token.IsCancellationRequested) { var temperature = dht.Temperature; var humidity = dht.Humidity; if (dht.IsLastReadSuccessful) { Console.WriteLine($"Temperature: {temperature.DegreesCelsius} \u00B0C, Humidity: {humidity.Percent} %"); var tempData = new MessageBody { Ambient = new Ambient { Temperature = temperature.DegreesCelsius, Humidity = Convert.ToInt32(humidity.Percent) }, TimeCreated = DateTime.UtcNow }; string dataBuffer = JsonConvert.SerializeObject(tempData); var eventMessage = new Message(Encoding.UTF8.GetBytes(dataBuffer)); eventMessage.Properties.Add("sequenceNumber", count.ToString()); eventMessage.Properties.Add("batchId", BatchId.ToString()); Console.WriteLine($"\t{DateTime.Now.ToLocalTime()}> Sending message: {count}, Body: [{dataBuffer}]"); await moduleClient.SendEventAsync("temperatureOutput", eventMessage); count++; } if (!blinky) { controller.Write(16, PinValue.High); } else { controller.Write(16, PinValue.Low); } blinky = !blinky; await Task.Delay(1000, cts.Token); } } }
/// <summary> /// Attempt to get the best applicable driver for the board the program is executing on. /// </summary> /// <returns>A driver that works with the board the program is executing on.</returns> private static GpioDriver GetBestDriverForBoardOnLinux() { RaspberryPi3LinuxDriver?internalDriver = RaspberryPi3Driver.CreateInternalRaspberryPi3LinuxDriver(out _); if (internalDriver is object) { return(new RaspberryPi3Driver(internalDriver)); } return(UnixDriver.Create()); }
/// <summary> /// Initialize /// </summary> public void Initialize(int busId = 0) { var settings = new SpiConnectionSettings(busId, CS); settings.ClockFrequency = 8000000; settings.DataBitLength = 8; settings.Mode = SpiMode.Mode0; sensor = new UnixSpiDevice(settings); driver = new RaspberryPi3Driver(); gpio = new GpioController(PinNumberingScheme.Logical, driver); gpio.OpenPin(CE, PinMode.Output); gpio.Write(CE, PinValue.High); gpio.OpenPin(IRQ, PinMode.Input); gpio.RegisterCallbackForPinValueChangedEvent(IRQ, PinEventTypes.Falling, Irq_ValueChangedDown); gpio.Write(CE, PinValue.Low); // reflect RX_DR interrupt, TX_DS interrupt not reflected, power up, receive mode WriteRegister(R_REGISTER, 0b_0011_1011); gpio.Write(CE, PinValue.High); Thread.Sleep(20); SetRxPayloadSize(packetSize); SetChannel(25); if (SetDataRate(DataRate.DR250Kbps)) { isPlusModel = true; } SetCRCLength(CRCLength.CRC8); SetPALevel(PALevel.PA_MAX); EnableAckPayload(); SetRetryPolicy(3, 15); MaskDataSent(false); MaskMaskDataReady(false); MaskMaxRetries(false); SetAutoAck(true); FlushTX(); FlushRX(); }