Orange Pi Lite + DHT22

Először is telepíteni kell a WiringOP csomagot.

git clone https://github.com/zhaolei/WiringOP.git -b h3
cd WiringOP
chmod +x ./build
sudo ./build

“gpio readall” parancs kimenete

Orange Pi Lite lábkiosztások

Drótozás:

Orange Pi LiteDHT22
7DATA
GNDGND
5VVCC

Program:

#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

#define MAX_TIMINGS 85
#define DHT_PIN 7
int data[5] = { 0, 0, 0, 0, 0 };

void read_dht_data()
{
    uint8_t laststate    = HIGH;
    uint8_t counter        = 0;
    uint8_t j            = 0, i;

    data[0] = data[1] = data[2] = data[3] = data[4] = 0;

    /* pull pin down for 18 milliseconds */
    pinMode( DHT_PIN, OUTPUT );
    digitalWrite( DHT_PIN, LOW );
    delay( 18 );

    /* prepare to read the pin */
    pinMode( DHT_PIN, INPUT );

    /* detect change and read data */
    for ( i = 0; i < MAX_TIMINGS; i++ )
    {
        counter = 0;
        while ( digitalRead( DHT_PIN ) == laststate )
        {
            counter++;
            delayMicroseconds( 1 );
            if ( counter == 255 )
            {
                break;
            }
        }
        laststate = digitalRead( DHT_PIN );

        if ( counter == 255 )
            break;

        /* ignore first 3 transitions */
        if ( (i >= 4) && (i % 2 == 0) )
        {
            /* shove each bit into the storage bytes */
            data[j / 8] <<= 1;
            if ( counter > 16 )
                data[j / 8] |= 1;
            j++;
        }
    }

    /*
     * check we read 40 bits (8bit x 5 ) + verify checksum in the last byte
     * print it out if data is good
     */

    if ( (j >= 40) &&
         (data[4] == ( (data[0] + data[1] + data[2] + data[3]) & 0xFF) ) )
    {
        float h = (float)((data[0] << 8) + data[1]) / 10;
        if ( h > 100 )
        {
            h = data[0];    // for DHT11
        }
        float c = (float)(((data[2] & 0x7F) << 8) + data[3]) / 10;
        if ( c > 125 )
        {
            c = data[2];    // for DHT11
        }
        if ( data[2] & 0x80 )
        {
            c = -c;
        }
        printf( "Para = %.1f %% Homerseklet = %.1f *C \n", h, c );
    }
    else  {
       printf( "Hibas adat !!!\n" );
    }
}

int main( void )
{

    wiringPiSetup();
    read_dht_data();
    return(0);
}

Ezt a programot be kell másolni egy dht.c nevezetű és kiterjesztésű fájlba. Majd le kell fordítani.

cc -Wall -o dht dht.c -lwiringPi

Majd pedig jöhet a futtatás.

sudo ./dht

Program kimenete.

Forrás:

http://www.piprojects.xyz/temperature-humidity-sensor-orange-pi/

This entry was posted in Orange Pi and tagged , , , , , , , , , , . Bookmark the permalink.

3 Responses to Orange Pi Lite + DHT22

  1. tage says:

    Hali! Köszi a post-ot! Kipróbáltam, úgy néz ki küldi az adatokat a szenzor. Egyetlen probléma, hogy páratartalom és hőmérséklet is 0.0. Találkoztál ilyen jelenséggel?

  2. balazs says:

    Szia! Igen abban az esetben amikor az érzékelő rossz volt. Vagy amikor elkötöttem a lábakat. Ha van otthon egy arduinod akkor azon kipróbálnám az érzékelőt.Így kizárnád az érzékelő hibát. https://create.arduino.cc/projecthub/attari/temperature-monitoring-with-dht22-arduino-15b013

  3. tage says:

    Köszi! Valamiféle időzítési probléma lehetett a soros adatok olvasásakor. Átállítottam a MAX_TIMINGS-ot 185-re 85-ről, és megy rendesen. Annyi, hogy én Orange PI Zero-t használok, és lehet valami eltérés az órajelben (ha jól láttam nem erre a hardverre lett megírva a könyvtár).

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

Ez a weboldal az Akismet szolgáltatását használja a spam kiszűrésére. Tudjunk meg többet arról, hogyan dolgozzák fel a hozzászólásunk adatait..