2016-04-28 15 views

Antwort

0
static class DHT22 
{ 
    private const int intGpioData = 18; 
    private static GpioPin gpioData; 

    public static void Start() 
    { 
     //Init GPIO And Capture Data Every 2000ms 
     GpioController gpioController = GpioController.GetDefault(); 
     gpioData = gpioController.OpenPin(intGpioData); 
     gpioData.SetDriveMode(GpioPinDriveMode.InputPullUp); 
     new Timer(new TimerCallback((obj) => { GetData(); }), null, 2000, 2000); 
    } 

    private static void GetData() 
    { 
     byte[] data = new byte[40]; 
     gpioData.SetDriveMode(GpioPinDriveMode.Output); 
     gpioData.Write(GpioPinValue.Low); 
     Task.Delay(1).Wait(); 
     gpioData.SetDriveMode(GpioPinDriveMode.InputPullUp); 

     //Record Data 
     while (gpioData.Read() == GpioPinValue.High) ; 
     while (gpioData.Read() == GpioPinValue.Low) ; 
     while (gpioData.Read() == GpioPinValue.High) ; 
     byte low; 
     for (int i = 0; i < 40; i++) 
     { 
      low = 0; 
      data[i] = 0; 
      while (gpioData.Read() == GpioPinValue.Low && low <= byte.MaxValue) 
        low++; 
      while (gpioData.Read() == GpioPinValue.High && data[i] <= byte.MaxValue) 
        data[i]++; 
     } 

     //Analyze Data 
     byte humiH = 0; 
     byte humiL = 0; 
     byte tempH = 0; 
     byte tempL = 0; 
     byte sum = 0; 
     for (short i = 7; i >= 0; i--) 
     { 
      byte bit = data[7 - i] >= 11 ? (byte)1 : (byte)0; 
      humiH += (byte)(bit << i); 
     } 
     for (short i = 7; i >= 0; i--) 
     { 
      byte bit = data[15 - i] >= 11 ? (byte)1 : (byte)0; 
      humiL += (byte)(bit << i); 
     } 
     for (short i = 7; i >= 0; i--) 
     { 
      byte bit = data[23 - i] >= 11 ? (byte)1 : (byte)0; 
      tempH += (byte)(bit << i); 
     } 
     for (short i = 7; i >= 0; i--) 
     { 
      byte bit = data[31 - i] >= 11 ? (byte)1 : (byte)0; 
      tempL += (byte)(bit << i); 
     } 
     for (short i = 7; i >= 0; i--) 
     { 
      byte bit = data[39 - i] >= 11 ? (byte)1 : (byte)0; 
      sum += (byte)(bit << i); 
     } 

     //Verify Data 
     if ((byte)(humiH + humiL + tempH + tempL) == sum) 
     { 
      double humidity = (double)(humiH * 256 + humiL)/10; 
      double temperature = (double)(tempH * 256 + tempL)/10; 
      Debug.WriteLine(humidity + "% " + temperature + "°C"); 
     } 
    } 
} 
+2

Während dieser Code die Frage beantworten kann, würde die Bereitstellung eines zusätzlichen Kontexts, der angibt, wie und/oder warum er das Problem löst, den langfristigen Wert der Antwort verbessern. – kayess

0

, wenn Sie auf die Registerkarte Tutorials gehen wird es Ihnen einige Beispiel-Code und Verdrahtung zeigen eine LED-Beleuchtung. Ich hoffe, dies beantwortet Ihre Frage.

CodeMaster5678

+0

Willkommen bei Stack Overflow! Dies liefert keine SO-Antwort auf die Frage. – zhon

0

Wenn Sie C++ verwenden, hier ist ein Beispiel. https://github.com/Microsoft/Windows-iotcore-samples/tree/develop/Samples/GpioOneWire

Wenn Sie bei C# bleiben möchten, funktioniert dies auch. Ich habe das heute mit 2 dht11 Sensoren benutzt.

Dies ist Github Link: https://github.com/porrey/Dht

Nuget Paket: https://www.nuget.org/packages/Dht/

Wenn Sie sind komfortabel mit C++, dann verwenden. Wenn nicht, empfehle ich das Nuget-Paket, nur weil ich überprüft habe, dass es heute funktioniert. Die dht11-Sensoren scheinen eine große Varianz zu haben. Ich habe einen 3 Grad Unterschied auf zwei Sensoren.

Verwandte Themen