RASPBERRY PI 3 VE DHT 11 NEM VE ISI SENSÖRÜ BAĞLANTISI VE PROGRAMLAMASI NASIL YAPILIR
Merhaba,
Bu yazı Raspberry Pi 3 Model B ile DHT 11 Nem ve Isı Sensörü'nün RPI ye bağlantılarının yapılması ve programlanması konusunda hazırladığımız projenin adım adım işlem yazısıdır.
Bu projeyi kendileri gerçeklemek isteyenler için kısa bir bilgilendirme yazısı ile başlayacağım.
Bildiğiniz üzere RPI arayüz cihazlarına ihtiyaç duyan bir cihazdır. Yani HDMI bağlantısı olan bir TV, USB girişli klavye ve mouse a ihtiyaç duyar. Ancak bunların hepsinin ethernet kablosu yardımıyla bir laptop/pc üzerinden yapmak mümkündür. Biz bu projemizde Microsoft Windows işletim sistemli bir bilgisayar kullandık.
NOOBS kurulumu yapılmış bir RPI yi kapalı vaziyetteyken bilgisayarınıza bağlayın.
Denetim Masası > Ağ ve Paylaşım Merkezi dizinine gidin. Orada bilgisayarınızın internet bağlantısını göreceksiniz. İnternet bağlantısının üzerine tıkladığınızda gelen pencereden özelliklere tıklayın. Gelen ekranda üstteki sekmelerden Paylaşım isimli olanı seçin ve ilk kutuyu tikleyin. Size hangi bağlantıyla paylaşım yapmak istediğinizi seçmenize izin veren bir kutu açılacak. Buradan Ethernet'i seçin. Ardından RPI'ye güç kablosunu takın ve açılmasına izin verin. RPI açıldığı zaman, internet bağlantınızın altında Tanımlanamayan Ağ ismiyle oluşan bir bağlantısı daha göreceksiniz. Sağdaki Ethernet yazısına tıklayın ve açılan pencereden tekrar özellikler seçeneğine tıklayın. Yeni açılan pencerede İnternet Protokolü Sürüm 4 isimli bir yazı göreceksiniz. Ona bir kez tıklayıp, özelliklere tıklayın. Benim bilgisayarımda verilen ip aşağıdaki görselde de görüldüğü üzere 192.168.137.1 sizde farklı bir ip gelebilir. Ancak bu aradığımız ip'i değil ama bu ip yardımıyla RPI'nin özel ip'sini bulacağız.



Şimdi bir komut istemi açıyoruz ve bu komut istemine şu komutu giriyoruz;
ping 192.168.137.1 (sizin için farklıysa o ip'yi girin)
Bu şekilde RPI ile ilk iletişimimiz başladı. Ping işlemi bittikten sonra şu komutu girerek RPI'nin verdiği cevap sayesinde RPI nin özel ip adresini bulmuş olacağız;
arp -a
Aşağıdaki ekran görüntüsünde pinglediğimiz ip adresine gelen cevaplar bulunmaktadır.

Aradığımız ip adresi pinglediğimiz adres gibi başlamalı ancak son sayının değişik olması gerekmektedir. Bu görselde iki örnek görüyorsunuz. 255 ile biten adres gateway olduğu için onu değil 192.168.137.12 adresini seçiyoruz. Gateway olduğunu Physical Address başlığı altındaki ff-ff dizisinden anlayabilirsiniz.
Evet artık RPI bilgisayarımıza bağlı ve nasıl ulaşacağımızı biliyoruz. PuTTY isimli SSH bağlantı uygulamasını indiriyoruz. Bu uygulama aracılığı ile RPI'nin komut istemine bağlanacağız ve grafik arayüze ulaşmak için gerekli komutları gireceğiz.

Yukarıdaki görselde olduğu gibi Host Name kısmını aldığımız ip ile dolduruyoruz. Open a tıkladığımızda RPI ile ilk görüşme sağlanmış olacak. (İlk bağlantı olduğundan güvenlik uyarıları alabilirsiniz.)

Bağlantı başladığında size "login as :" gibi bir istek gelecek. Default olarak verilmiş kullanıcı ile giriş yapacağız. Kullanıcı adı : pi şifresi ise : raspberry
Meraklanmayın Linux tabanlı sistemlerde şifre girişlerinde önizleme gösterilmez hiçbir şey yazmıyorsunuz gibi gözükecektir :)
Girişinizi yaptığınızda karşınıza bu konsol gelecektir. Tebrikler artık RPI ile bağlantınızı yaptınız.
Bu projede biz konsol ekranından devam ettik ama dilerseniz grafik arayüze erişmek de mümkün.
Kısa bir bilgilendirme yazısı ile onu da açıklayalım. Bu işlem için VNC Server kullanacağız. O nedenle RealVNC'in VNC Viewer programınızı bilgisayarınıza kurun ve RPI konsoluna şu komutları sırayla yazın ;
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install tightvncserver
VNC Serverımız RPI mize kuruldu. Artık tek bir komutla VNC Server'ı başlatabiliriz.
vncserver :1
Bilgisayarımıza indirdiğimiz VNC Viewer programını başlatalım ve sol üst köşedeki File sekmesinden yani bir bağlantı oluşturalım. Açılan pencerede VNC Server yazan yere öğrendiğimiz özel ip adresini (yani 192.168.137.12) girelim tek bir ayrıntı unutulmamalıdır, ip adresinin sonuna portumuzu (1) eklemeliyiz. Yani VNC Server kısmına girilecek adres şuna benzemelidir ;
192.168.137.12:1
Bağlantıyı başlatınca RPI'nin masaüstü ekranınıza ulaşacaksınız. Tebrikler.
Şimdi projeye devam edersek, konsol ekranına ulaştığınızda şu komutları girerek RPI'nin güncel olmasını sağlayalım ;
sudo apt-get update
sudo apt-get upgrade
Bu işlemler tamamlandığında indirilecek bir kaç şey daha var ;
Biz programlamamızı C dilinde yapacağımız için C derleyicisi (gcc)
sudo apt-get install gcc
Ve sensörü bağlamak için wiringPi yazılımı.
sudo apt-get install git-core
cd
git clone git ://git.drogon.net/wiringPi
Bunlar da tamamlandığında geriye sadece sensörü RPI'ye bağlamak ve programı yazmak kalıyor.
Sensör üzerinde + out - yazılarını göreceksiniz ( Biz DHT 11 'in 3 pinli olanını kullandık.)
+ enerji girişi , - topraklama ve out da veriyi sembolize ediyor. + pinini RPI'nin 2. pinine
- pinini RPI'nin 6. pinine ve out pinini de RPI'nin 7.pinine kablolar yardımıyla bağlayalım.
Sıra şimdi kodlamada.
Kodumuz ;
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define MAXTIMINGS 85
#define DHTPIN 7
int dht11_dat[5] = { 0, 0, 0, 0, 0 };
void read_dht11_dat()
{
uint8_t laststate = HIGH;
uint8_t counter = 0;
uint8_t j = 0, i;
float f;
dht11_dat[0] = dht11_dat[1] = dht11_dat[2] = dht11_dat[3] = dht11_dat[4] = 0;
pinMode( DHTPIN, OUTPUT );
digitalWrite( DHTPIN, LOW );
delay( 18 );
digitalWrite( DHTPIN, HIGH );
delayMicroseconds( 40 );
pinMode( DHTPIN, INPUT );
for ( i = 0; i < MAXTIMINGS; i++ )
{
counter = 0;
while ( digitalRead( DHTPIN ) == laststate )
{
counter++;
delayMicroseconds( 1 );
if ( counter == 255 )
{
break;
}
}
laststate = digitalRead( DHTPIN );
if ( counter == 255 )
break;
if ( (i >= 4) && (i % 2 == 0) )
{
dht11_dat[j / 8] <<= 1;
if ( counter > 16 )
dht11_dat[j / 8] |= 1;
j++;
}
}
if ( (j >= 40) &&
(dht11_dat[4] == ( (dht11_dat[0] + dht11_dat[1] + dht11_dat[2] + dht11_dat[3]) & 0xFF) ) )
{
f = dht11_dat[2] * 9. / 5. + 32;
printf( "Nem = %d.%d %% Sicaklik = %d.%d C (%.1f F)\n",
dht11_dat[0], dht11_dat[1], dht11_dat[2], dht11_dat[3], f );
}else {
printf( "Veri kaliteli değil, atlaniyor.\n" );
}
}
int main( void )
{
printf( "Raspberry Pi DHT 11 Sensor Driver Programi\n" );
if ( wiringPiSetup() == -1 )
exit( 1 );
while ( 1 )
{
read_dht11_dat();
delay( 1000 );
}
return(0);
}
Şimdi SSH ekranımızda şu komutla bir C dosyası yaratıp içini dolduruyoruz ;
nano dhtdriver.c
Meraklanmayın Linux tabanlı sistemlerde şifre girişlerinde önizleme gösterilmez hiçbir şey yazmıyorsunuz gibi gözükecektir :)
Girişinizi yaptığınızda karşınıza bu konsol gelecektir. Tebrikler artık RPI ile bağlantınızı yaptınız.
Bu projede biz konsol ekranından devam ettik ama dilerseniz grafik arayüze erişmek de mümkün.
Kısa bir bilgilendirme yazısı ile onu da açıklayalım. Bu işlem için VNC Server kullanacağız. O nedenle RealVNC'in VNC Viewer programınızı bilgisayarınıza kurun ve RPI konsoluna şu komutları sırayla yazın ;
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install tightvncserver
VNC Serverımız RPI mize kuruldu. Artık tek bir komutla VNC Server'ı başlatabiliriz.
vncserver :1
Bilgisayarımıza indirdiğimiz VNC Viewer programını başlatalım ve sol üst köşedeki File sekmesinden yani bir bağlantı oluşturalım. Açılan pencerede VNC Server yazan yere öğrendiğimiz özel ip adresini (yani 192.168.137.12) girelim tek bir ayrıntı unutulmamalıdır, ip adresinin sonuna portumuzu (1) eklemeliyiz. Yani VNC Server kısmına girilecek adres şuna benzemelidir ;
192.168.137.12:1
Bağlantıyı başlatınca RPI'nin masaüstü ekranınıza ulaşacaksınız. Tebrikler.
Şimdi projeye devam edersek, konsol ekranına ulaştığınızda şu komutları girerek RPI'nin güncel olmasını sağlayalım ;
sudo apt-get update
sudo apt-get upgrade
Bu işlemler tamamlandığında indirilecek bir kaç şey daha var ;
Biz programlamamızı C dilinde yapacağımız için C derleyicisi (gcc)
sudo apt-get install gcc
Ve sensörü bağlamak için wiringPi yazılımı.
sudo apt-get install git-core
cd
git clone git ://git.drogon.net/wiringPi
Bunlar da tamamlandığında geriye sadece sensörü RPI'ye bağlamak ve programı yazmak kalıyor.
Sensör üzerinde + out - yazılarını göreceksiniz ( Biz DHT 11 'in 3 pinli olanını kullandık.)
+ enerji girişi , - topraklama ve out da veriyi sembolize ediyor. + pinini RPI'nin 2. pinine
- pinini RPI'nin 6. pinine ve out pinini de RPI'nin 7.pinine kablolar yardımıyla bağlayalım.
Sıra şimdi kodlamada.
Kodumuz ;
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define MAXTIMINGS 85
#define DHTPIN 7
int dht11_dat[5] = { 0, 0, 0, 0, 0 };
void read_dht11_dat()
{
uint8_t laststate = HIGH;
uint8_t counter = 0;
uint8_t j = 0, i;
float f;
dht11_dat[0] = dht11_dat[1] = dht11_dat[2] = dht11_dat[3] = dht11_dat[4] = 0;
pinMode( DHTPIN, OUTPUT );
digitalWrite( DHTPIN, LOW );
delay( 18 );
digitalWrite( DHTPIN, HIGH );
delayMicroseconds( 40 );
pinMode( DHTPIN, INPUT );
for ( i = 0; i < MAXTIMINGS; i++ )
{
counter = 0;
while ( digitalRead( DHTPIN ) == laststate )
{
counter++;
delayMicroseconds( 1 );
if ( counter == 255 )
{
break;
}
}
laststate = digitalRead( DHTPIN );
if ( counter == 255 )
break;
if ( (i >= 4) && (i % 2 == 0) )
{
dht11_dat[j / 8] <<= 1;
if ( counter > 16 )
dht11_dat[j / 8] |= 1;
j++;
}
}
if ( (j >= 40) &&
(dht11_dat[4] == ( (dht11_dat[0] + dht11_dat[1] + dht11_dat[2] + dht11_dat[3]) & 0xFF) ) )
{
f = dht11_dat[2] * 9. / 5. + 32;
printf( "Nem = %d.%d %% Sicaklik = %d.%d C (%.1f F)\n",
dht11_dat[0], dht11_dat[1], dht11_dat[2], dht11_dat[3], f );
}else {
printf( "Veri kaliteli değil, atlaniyor.\n" );
}
}
int main( void )
{
printf( "Raspberry Pi DHT 11 Sensor Driver Programi\n" );
if ( wiringPiSetup() == -1 )
exit( 1 );
while ( 1 )
{
read_dht11_dat();
delay( 1000 );
}
return(0);
}
Şimdi SSH ekranımızda şu komutla bir C dosyası yaratıp içini dolduruyoruz ;
nano dhtdriver.c

Kodumu içine yazdıktan sonra Ctrl O yaparak kaydet komutu veriyoruz, ardından Enter'a bastığımızda dosyamız kaydedildi. Ctrl X yaparak dosyadan çıkıyoruz.

Şimdi dosyamızı derleyeceğiz ;
gcc -o dhtdriver dhtdriver.c -lwiringPi -lwiringPiDev

Artık her şey hazır. Tek bir komut ile sensör driverını çalıştıracağız ve ölçümler başlayacak.
sudo ./dhtdriver


Projemiz tamamlandı. Okuduğunuz için teşekkürler.
Proje Ekibi
--------------
Melek Uzun (Grup Lideri) http://melekzn.blogspot.com.tr
Burak Kandil http.//burakandil.blogspot.com.tr
Bülent Akpınar http.//bulentakpinar.blogspot.com.tr
Berkay Laçin http://berkaylacinnn.blogspot.com.tr
Taner Şener http://tanersener35.blogspot.com.tr
Yorumlar
Yorum Gönder