Raspberry Pi Netbeans ile İşlemciden ve DS18B20 den Sıcaklık Okuma By Umut Kazanç Posted on 29 Mayıs 2017 7 min read 0 0 1,930 Paylaş ! Facebook Paylaş ! Twitter Paylaş ! Google+ Paylaş ! Reddit Paylaş ! Pinterest Paylaş ! Linkedin Paylaş ! Tumblr Merhaba Arkadaşlar; Bu yazımda sizlere C ile İşlemciden ve DS18B20 den Sıcaklık Okuma nasıl yapılır onu anlatacağım. Uygulamamızı netbeans ile yapacağım için daha önceden yazdığım netbeans ile ilgili konu başlığına göz atabilirsiniz. NetBeans IDE Kurulumu ve wiringPi ile Raspberry Pi de Program yazmak Uygulamada kullanacağımız DS18B20 nin ROM koduna nasıl bakılır onunla ilgini konu başlığına göz atabilirsiniz. Apache Web Server ve DS18B20 ile Temperature Monitor Yukarıdaki konu başlıklarını inceledikten sonra gelelim uygulamamızı hazırlamaya. İlk önce netbeans ile yeni proje oluşturup Pi mizi seçiyoruz. Daha sonra include ve değişkenleri hazırlıyoruz. Burada DStempfile daki 28 ile başlayan kodu siz değiştirip kendi DS nizin kodunu yazacaksınız. (yukarıdaki konu başlığından bakabilirsiniz) #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <unistd.h> #include <string.h> char CPUtempfile[] = {“/sys/class/thermal/thermal_zone0/temp”}; char DStempfile[] = {“/sys/devices/w1_bus_master1/28-041502394cff/w1_slave”}; uint16_t CPUTemp=0; uint16_t DSTemp=0; char *ptr1; uint16_t GetCPUTemp(); uint16_t GetDSTemp(); Yukarıda gördüğünüz gibi GetCPUTemp ve GetDSTemp olarak 2 fonksiyondan bahsediliyor. 2 ayrı sıcaklık ölçümü için ayrı fonksiyonlar yazdım. Okuma işlemlerinde dikkat ettiyseniz direkt dosya okuyup içindeki değeri pars ediyoruz. Fonksiyonları aşağıda inceleyebilirsiniz. uint16_t GetCPUTemp() { FILE *fp; char filebuffer[100]; if((fp=fopen(CPUtempfile,”r”)) == NULL) { printf(“Dosya açma hatası!\n(%s) Bulunamadı …\n”,CPUtempfile); exit(EXIT_FAILURE); } fread(filebuffer, sizeof(filebuffer), 1, fp); fclose(fp); return atoi(filebuffer); } uint16_t GetDSTemp() { FILE *fp; char filebuffer[100]; if((fp=fopen(DStempfile,”r”)) == NULL) { printf(“Dosya açma hatası!\n(%s) Bulunamadı …\n”,DStempfile); exit(EXIT_FAILURE); } fread(filebuffer, sizeof(filebuffer), 1, fp); fclose(fp); ptr1 = strstr(filebuffer, “t=”); ptr1 = ptr1 + 2; return atoi(ptr1); } Şimdi gelelim main kısmına, burada ise kullanıcı konsoldan programı açtığında ölçümleri değişkene atıp oradan da printf ile ekrana yazdırıp programımızı kapattıracağız. DS18B20 için okuma sırasında çevirme süresi yaklaşık ~750ms olduğu için kullanıcıya bekleyin gibi bir mesaj çıkartılabilir. int main(int argc, char** argv) { printf(“CPU ve DS18B20 Sicaklik Gostergesi\r\n”); printf(“———————————-\r\n”); printf(“Okunuyor…\r\n”); CPUTemp = GetCPUTemp(); DSTemp = GetDSTemp(); printf(“Islemci Sicaklik -> %5.3f°C\r\n”,(float) CPUTemp / 1000); printf(“DS18B20 Sicaklik -> %5.3f°C\r\n”,(float) DSTemp / 1000); printf(“———————————-\r\n”); return (EXIT_SUCCESS); } Programı derleyip netbeans üzerinden çalıştıralım. Netbeans üzerinden çalıştığını görmek için alt bölümde çıktı sekmesinde programın derlenip çalışma işlemlerini görebilirsiniz. Program bize çıktıları verip kapanacaktır. Görüldüğü gibi program bize 2 sıcaklık değerini verip kapanmıştır. Bu işlemi uzaktan konsol ile yapmak istiyorsanız yani netbens ile değil putty ile bağlanıp manüel çalıştırmak istiyorsanız, programın gönderildiği klasörü bilmemiz gerekiyor. Bunun için derleme sırasında programın nereye gönderildiğini çıktı ekranında görebilirsiniz. Raspberry Pi nin içinde nereye atıldığını resimde görebilirsiniz. “.netbens/” ile başlayan klasöre atmaktadır. Derlenmiş dosyanın bulunduğu tam yol aşağıdaki gibidir. /home/pi/.netbeans/remote/192.168.2.225/………/temp/dist/Debug/GNU-Linux Putty ile pi bağlantısını açıp bu klasöre giriyoruz Şimdi proje dosyamıza verdiğimiz isim ile konsoldan çalıştırabiliriz. ./temp Bir sonraki uygulamada görüşmek üzere, Kolay Gelsin…