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:
Ha 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
A fordítás után megtaláljuk a programunkat, ezután el is indíthatjuk.
sudo ./DHT11
A 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.
Ezutá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:
Remélem mindenkinek segítettem a modul tesztelésében, aki Bananapi használatra adta a fejét, és sikeresen fogja tesztelni a szenzort.