Orange Pi + DHT22 датчик температуры и влажности

Orange Pi + DHT22 датчик температуры и влажности


Отключаем питание Orange Pi и подключаем датчик следующим образом.

DOUT к PIN 7 (GPCLK)
GND к PIN 6 (GND)
VCC к PIN 1 (VCC-3.3V)




Чтобы получить данные с датчика нам нужна библиотека WiringOP, которая поможет получить доступ к выводам GPIO на Orange Pi. 

Как установить WiringOP описанно здесь.

В домашней папке и создадим файл с именем dht.c.

cd
nano dht.c
С содержанием:

#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;
}
float f = c * 1.8f + 32;
printf( "Humidity = %.1f %% Temperature = %.1f *C (%.1f *F)\n", h, c, f );
}
else {
printf( "Data not good, skip\n" );
}
}

int main( void )
{
printf( "DHT22 temperature/humidity test\n" );

if ( wiringPiSetup() == -1 )
exit( 1 );

while ( 1 )
{
read_dht_data();
delay( 2000 ); /* wait 2 seconds before next read */
}
return(0);
}

Сохраняем код Ctrl + O, закрываем фаил Ctrl + X и скомпилируем командой:

gcc -o dht dht.c -lwiringPi -lpthread
Для запуска выполнить командну:
sudo ./dht


Результат должен быть таким:

Комментарии

Популярные сообщения из этого блога

Перенос Armbian на SSD

Установка Home Assistants на Orange pi

Радиореле 220В 433МГц c кодировкой сигнала eV1527