Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Windows 10 IoT Raspberry Pi 2: DHT22/AM2302

I just wanted to start making experience with the DHT22/AM2302 (a temperature and humidity sensor), but I have no idea how to initialize and get the data of it ... I tried to use GpioPin:

gpioController = GpioController.GetDefault();
if(gpioController == null)
{
    Debug.WriteLine("GpioController Initialization failed.");
    return;
}
sensorPin = gpioController.OpenPin(7); //Exception throws here
sensorPin.SetDriveMode(GpioPinDriveMode.Input);
Debug.WriteLine(sensorPin.Read());

but get the exception: "A resource required for this operation is disabled."

After that I took a look at the library for the unixoids and found this:

https://github.com/technion/lol_dht22/blob/master/dht22.c

But I have no idea how to realize that in VCSharp using Windows 10, anyone an idea or experience?

Thank you very much in advance!

UPDATE:

I got the hint, that there is not GPIO-Pin 7 and this is true, so I re-tried it, but the GPIO-Output seems to be just HIGH or LOW ... So I have to use the I2C or the SPI ... According to this Project, I decided to try it out with SPI: http://microsoft.hackster.io/windowsiot/temperature-sensor-sample and making steps forward ... The difficulty now is to translate the above linked C-Library to the C-Sharp-SDK to receive the right data ...

private async void InitSPI()
{
    try
    {
        var settings = new SpiConnectionSettings(SPI_CHIP_SELECT_LINE);
        settings.ClockFrequency = 500000;
        settings.Mode = SpiMode.Mode0;

        string spiAqs = SpiDevice.GetDeviceSelector(SPI_CONTROLLER_NAME);
        var deviceInfo = await DeviceInformation.FindAllAsync(spiAqs);
        SpiDisplay = await SpiDevice.FromIdAsync(deviceInfo[0].Id, settings);
    }
    catch(Exception ex)
    {
        Debug.WriteLine("SPI Initialization failed: " + ex.Message);
    }
}

This works not so well, to be clear: It works just once on starting up the raspberry pi2, then starting / remote debugging the application, but after exiting the application and re-start them, the SPI Initialization fails.

And now Im working on reading the data from the pin and will show some Code in a future update. Any comments, answers and or advices are still welcome.

like image 946
Tobias Raphael Dieckmann Avatar asked Nov 09 '22 14:11

Tobias Raphael Dieckmann


1 Answers

DHT22 requires very precise timing. Although Raspberry PI/Windows 10 IoT core is extremely fast, since it's an operating system where other things need to happen unless you write some sort of low-level driver (not C#) you won't be able to generate the timings necessary to communicate with a DHT22.

What I do is use a cheap Arduino Mini Pro for about $5 with the sole purpose to generate and send the correct timings between the microcontroller and the Raspberry Pi, then setup some sort of communication channel between the Arduino Mini Pro (I2C, Serial) to pull the data from the Arduino.

like image 142
Kevin Avatar answered Dec 10 '22 03:12

Kevin