Bananapi és DHT11

A DHT11 hőmérséklet és páratartalom mérő szenzort már Arduino-val teszteltem, méghozzá az elsők között. Ezért is gondoltam, hogy a Bananapi-s GPIO programozást is ezzel kezdem. A bekötése itt sem túl bonyolult. Továbbá találtam egy kiváló leírást a bekötésre és egy C programot a szenzoradatok kiolvasására.

Az én leírásomban is az ezen az oldalon talált képek egy részét használom szemléltetésre.

A bekötési vázlat:

bananapi_dht11_pullupHa a kapcsolás összeállításával készen vagyunk, akkor kövessük a következő lépéseket.

1.) Hozzunk létre egy mappát amiben a programunkat fogjuk tárolni

sudo su
mkdir "xyz"
cd "xyz"

2.) Hozzuk létre a C fájlt.

nano DHT11.c

3.) Másoljuk be a következő kódot:

#include <wiringPi.h>  
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>  
#define MAX_TIME 85
#define DHT11PIN 7
int dht11_val[5]={0,0,0,0,0};
void dht11_read_val()
{
  uint8_t lststate=HIGH;
  uint8_t counter=0;
  uint8_t j=0,i;
  for(i=0;i<5;i++)
     dht11_val[i]=0;
  pinMode(DHT11PIN,OUTPUT);
  digitalWrite(DHT11PIN,LOW);
  delay(18);
  digitalWrite(DHT11PIN,HIGH);
  delayMicroseconds(40);
  pinMode(DHT11PIN,INPUT);
  for(i=0;i<MAX_TIME;i++)   
  {
  counter=0; 
  while(digitalRead(DHT11PIN)==lststate)
  {
  counter++;delayMicroseconds(1);       
  if(counter==255)         
  break;     
  }     
  lststate=digitalRead(DHT11PIN);     
  if(counter==255)        
  break;     
  // top 3 transistions are ignored     
   if((i>=4)&&(i%2==0))
     {
      dht11_val[j/8]<<=1;       
      if(counter>16)
        dht11_val[j/8]|=1;
      j++;
    }
  }
  // verify cheksum and print the verified data
  if((j>=40)&&(dht11_val[4]==((dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])& 0xFF)))
  {
    printf("Humidity = %d.%d %% Temperature = %d.%d °C\n",dht11_val[0],dht11_val[1],dht11_val[2],dht11_val[3]);
  }
  else
    printf("Invalid Data!!\n");
}
int main(void)
{
  printf("Interfacing Temperature and Humidity Sensor (DHT11) With Banana Pi\n");
  if(wiringPiSetup()==-1)
    exit(1);
  while(1)
  {
     dht11_read_val();
     delay(3000);
  }
  return 0;
}

Ha ezzel megvagyunk akkor nincs is más dolgunk mint elmenteni a programot és befordítani.

sudo gcc -Wall -o DHT11 DHT11.c -lwiringPi -lpthread

ford

A fordítás után megtaláljuk a programunkat, ezután el is indíthatjuk.

sudo ./DHT11

adatokA képen láthatjuk, hogy az ellenállás méretével kell egy kicsit kisérletezni, mert nem mindig kapunk pontos szenzoradatokat. Ha a 4,7 Kohm-os ellenállás nem lenne elég akkor cseréljük ki egy 10-esre.

Nos ha ezt befejeztük és minden klappol, akkor nézzük, hogy működik mindez pythonban.

Első lépésként töltsük le ezt a library-t.

Letöltés

Ha ezzel megvagyunk akkor csomagoljuk ki, és helyezzük el egy olyan mappába ahonnan használni akarjuk majd.

dht_libEzután én kissebb változtatásokat eszközöltem, mert a szenzor DATA lábát átkötöttem a GPIO1-re. Ezért a “dht11_example.py” fájlt a következőképpen módosítottam.

import RPi.GPIO as GPIO
import dht11
import time
import datetime

# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()

# read data using pin GPIO7
instance = dht11.DHT11(pin = 18)

while True:
	result = instance.read()
	if result.is_valid():
		print("Last valid input: " + str(datetime.datetime.now()))
		print("Temperature: %d C" % result.temperature)
		print("Humidity: %d %%" % result.humidity)
    		
	time.sleep(1)

Ezután nincs más dolgunk mint lefuttatni a “dht11_example.py” fájlt.

sudo python libraries/DHT11/dht11_example.py

És viola:

dht_py

Remélem mindenkinek segítettem a modul tesztelésében, aki Bananapi használatra adta a fejét, és sikeresen fogja tesztelni a szenzort.

 

(Statisztika: 9 megtekintés)

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

Az email címet nem tesszük közzé.