Professional Documents
Culture Documents
İÇİNDEKİLER
1. Giriş............................................................................................................................ 2
5. Sonuç.......................................................................................................................... 21
7. Kaynakça .................................................................................................................... 24
PUANLAMA
TOPLAM 100
*Tablo rapor puanlamasını içermektedir, her bir bölümden alınabilecek en yüksek not belirtilmiştir.
Şekiller ve Tablolar
Şekil 2. Projede kullanılan Sense Hat emülatörünün projeme uyarlanmış hali ............ 10
Şekil 8. Visual Studio Code IDE üzerinden yapılan uygulama gösterim_1 ................. 15
Şekil 9. Visual Studio Code IDE üzerinden yapılan uygulama gösterim_2 ................. 15
1. GİRİŞ
Vize ara raporunda, yapacağım IoT projesi için kişinin sağlık durumunu kontrol etmek
amacıyla bir Raspberry Pi cihazına bağlı sensörler ile bu verilerin alınması hedeflenmiştim.
Alınan bu veriler önce Raspberry Pi cihazı üstünde bulunan bir MicroSD karta depolanacaktı
ve ardından yine Raspberry Pi cihazının üstündeki wifi modülü ile bir bulut sunucusu ortamına
aktarılıp burada depo edilecekti. Kişinin sağlık durumunu gösteren bu veriler üzerinde
herhangi bir anomali durumunda ise Raspberry Pi cihazı bu durumu tespit ederek kişinin cep
telefonuna önceden yüklediğimiz mobil uygulama sayesinde bu anomali durumu hastaya
bildirim (Notification) olarak iletilecekti.
Proje kapsamında fiziksel bir mikroişlemci cihazı ve buna bağlı olarak çalışan fiziksel bir
cihaz kullanılmamıştır. Tüm bu işlemler simüle edilerek gerçekleştirilmiştir. Projemiz, fiziksel
bir ortam da gerçekleştirilmemiş bile olsa, sanal makine üzerine kurulmuş bir Raspberry Pi
işletim sistemi üzerinde çalışan ve fiziksel sensörlerin yerine geçerek sensör verileri
oluşturabilecek bir emülatörümüz bulunmaktadır. Bu emülatörümüzün ismi Sense Hat’tır.
Raspberry Pi işletim sistemimiz bir sanal makine üzerinde kurulu olduğunu söylemiştik ve
dolayısıyla Sense Hat emülatörümüzün üzerinde bulunan sensörler ile oluşan veriler
bilgisayarın Ethernet kartına sahip olması nedeniyle uzak sunucuya veri gönderebilme
imkanına sahiptir. Projemizde Sense Hat emülatörümüz üzerinde oluşturduğumuz
sensörlerden gelen veriler, iotHook bulut sunucuna aktarılarak burada depo edilmektedir.
Sonrasında IotHook sunucunda depo edilen veriler üzerinde 60 saniyede bir kontroller
yaparak, verilerdeki anomali durumunu tespit etmeye çalışan ve bir sunucu görevi gören
masaüstü uygulaması devreye girmektedir. Bu masaüstü uygulaması anomali durumu tespit
ettiğinde, bu durumunu bir mobil uygulama sayesinde hastanın cep telefonuna bildiri olarak
göndermektedir.
Raspberry Pi için optimize edilmiş Debian tabanlı bir işletim sistemidir. Raspberry
yalnızca Raspberry Pi mikroişlemcisi ile çalışacak şekilde tasarlanmıştır. Buradaki amaç
Raspberry Pi kullanılarak yapılan projelerde diğer piyasadaki işletim sistemleri yerine Raspian
işletim sisteminin tercih edilebilmesi sağlamaktır. Bu sebepten ötürü işletim sisteminde her
özellik bunu sağlamak için ayarlanmıştır ve Raspian işletim sistemi Raspberry Pi ile tam
uyumlu çalışarak mikroişlemcinin daha uyarlanabilir ve esnek hale gelmesini sağlamıştır. Bu
işletim sistemi üzerinden Raspberry Pi cihazları yönetmek için gerekli yazılımlar hazır olarak
mevcuttur Şekil 1 de Raspian işletim sistemine ait bir masaüstü ekranı gösterilmektedir. [1]
Vize raporumda bahsettiğim yapıyı kurabilmek için programlama dili olarak Python dili
tercih edilmiştir. Python, nesne yönelimli, yorumlamalı, birimsel (modüler) ve etkileşimli
yüksek seviyeli bir programlama dilidir [2]. Girintilere dayalı basit sözdizimi, dilin
öğrenilmesini ve akılda kalmasını kolaylaştırır. Bu durum Python’a söz diziminin ayrıntıları ile
vakit kaybetmeye gerek kalmadan programlama yapılabilme kabiliyeti kazandırır. Python
1980'lerin sonunda ABC programlama diline alternatif olarak tasarlanmıştır. Python 2.0, ilk kez
2000 yılında yayınlandı. Python 2 versiyonun resmi geliştirilme süreci, dilin son sürümü olan
Python 2.7.x serisi versiyonların ardından 1 Ocak 2020 itibarıyla resmi olarak sona erdi. Python
2.x geliştirilme desteğinin sona ermesinin ardından, Python dilinin 3.5.x ve sonraki
sürümlerinin geliştirilmesi devam etmektedir. Modüler yapısı, sınıf dizgesini (sistem) ve her
türlü veri alanı girişini destekler. Hemen hemen her türlü platformda çalışabilir. (Unix, Linux,
Mac, Windows, Amiga, Symbian). Python ile sistem programlama, kullanıcı arabirimi
programlama, ağ programlama, web programlama, uygulama ve veritabanı yazılımı
programlama gibi birçok alanda yazılım geliştirebilirsiniz [2]. Özellikle bu durumu projemizde
Python’u kullanma sebeplerimizden biri olarak gösterebiliriz. Python, büyük yazılımların hızlı
bir şekilde prototiplerinin üretilmesi ve denenmesi gerektiği durumlarda da C ya da C++ gibi
dillere tercih edilir. Bu nedenle projemde programlama dili olarak Python tercih edilmiştir.
ÖNEMLİ! Vize raporunda verilerin analizini ve anomali olması durumunda veriyi bulut
sunucusun dan çekip uygulamaya bildirim (Notification) olarak gönderecek yapının Raspberry
Pi işletim sistemi üzerindeki IDE’ler kullanılarak, Python programlama dili ile kodlanacak
şekilde tasarlandığını söylemiştim. Fakat yapı kurulurken verileri bulut sunucusun dan çekip
uygulamaya bildirim (Notification) olarak gönderecek yapı, Windows 10 işletim sistemi
üzerine Visual Studio Code İDE’si kurularak Python programlama dili kodlanarak yapılmıştır.
Buradaki değimin özel bir sebebi bulunmamaktadır. Bu yapı vize raporunda bahsedilen şekilde
yapılabilirdi. Windows Platform üzerinde programlama yapmak ve çalışmak nispeten tercih
ettiğim bir ortam olduğu için ve aynı zamanda elde ettiğim sonuç da değişmeyeceği için bu
şekilde uygulanmıştır.
2.3. IDE
IDE veya Tümleşik Geliştirme Ortamı, programcıların bilgisayar programı yazarken hızlı
ve rahat bir şekilde yazılım geliştirmelerine imkân sağlayan ve aynı zamanda kullandığı farklı
programlama dillerini birleştirmelerini sağlayan bir yazılım türüdür. IDE'ler, yazılım yazma
ortak etkinliklerini tek bir uygulamada birleştirerek programcı üretkenliğini artırır. IDE’ler
kaynak kodunu düzenleme, çalıştırılabilir dosyaları oluşturma ve hata ayıklama gibi özellikleri
size en hızlı şekilde sunmaktadır [3]. Tümleşik geliştirme ortamlarında olması gerekli en temel
özellikler:
• Yazılımın derlenmesi, bağlanması, çalışmaya tümüyle hazır hale gelmesi ve daha birçok
ek işi otomatik olarak yapabilmek amacıyla küçük inşa araçları.
ÖNEMLİ! Raporumu oluştururken sağladığı birçok avantajdan dolayı IDE olarak Visual
studo code kullanmaya karar vermiştim fakat Raspberry Pi işletim sistemi üzerine Visual Studio
Code’un Debian tabanlı işletim sistemleri için üretilmiş versiyonunu kurmaya çalıştığımda
başarılı olamadım. Bunun nedenini araştırdığımda ise Visual Studio Code’un i386 mimarili
işletim sistemlerine kurulamadığını farkettim. Bu sebepten ötürü projemde Visual Studio Code
yerine farklı bir IDE seçmek zorunda kaldım. Visual Studio Code’un yerine seçtiğim İDE
Geany ‘dir.
Geany, Scintilla ve GTK+ tabanlı bir tümleşik geliştirme ortamı ve hafif bir metin
düzenleme yazılımıdır. Son derece işlevsel ve hafif olan Geany İDE açık kaynak bir yazılımdır.
Pek çok işletim sisteminde çalışabilen Geany'nin desteklediği diller arasında C, D, Java,
JavaScript, PHP, HTML, CSS, Python, Perl, Pascal gibi diller vardır. Geany İDE’yi
çalışmamda tercih etme sebebim Rasperry Pi işletim sistemi üzerinde çalışabilecek en
fonksiyonel İDE’lerin başında geldiği için ve aynı zamanda Python programlama dilini de
desteklediği için projemde kullanılacaktır.
ÖNEMLİ! Vize raporumda, verilerin analizini ve anomali olması durumunda veriyi bulut
sunucusun dan çekip uygulamaya bildirim (Notification) olarak gönderecek yapının Raspberry
Pi işletim sistemi üzerindeki olan IDE’ler kullanılarak yapılacağından bahsettim. Fakat bu
durum programlama dili başlığı altında bahsettiğim üzere Windows 10 işletim sistemi üzerine
Visual Studio Code İDE’si kurularak yapılmıştır. Çalışmam da ayrıca Raspberry Pi işletim
sistemi üzerindeki Geany İDE’si de kullanılmıştır. Geany İDE, Sense Hat emülatöründeki
sensörleden oluşan verilerin iotHook bulut sunucuna aktarılmasını sağlayan yapının Python
programlama dili ile kurulabilmesi için gerek olan geliştirme ortamını sağlamak için
kullanılmıştır.
iotHook internete bağlı nesneler (IoT) arasında veri transferi yapan web servis ağı
projesidir. Iothook ile Arduino, Raspberry Pi, Android, iOS, Windows Phone, Web Site,
Banana Pi, Orange Pi, Beaglebone, ARM, Pic, Windows, Mac OS X, ve Linux tabanlı
sistemleri birbirine bağlanır. IotHook tüm cihazlarınız arasında kesintisiz veri aktarımı yapan,
internete bağlı nesnelerin kolayca ulaşabileceği iletişim protokollerini destekler. Projemizde
bulut servisi olarak iotHook ‘u seçme nedenimiz şunlardır [5];
• IotHook ücretsizdir,
• IotHook hızlıdır,
2.5. Emülatör-Simülatör
Projemiz kapsamındaki Emülatör kısmıda tam olarak vize raporumuzda yazdığımız gibi
gerçekleşmiştir. Projede fiziksel bir sensör yapısı kurulmadan nabız verisi, sıcaklık verisi ve
kan basıncı verisi emülatörler üzerinden oluşturulacaktır. Fiziksel sensörlerden veri oluşturmak
yerine emülatör vasıtasıyla oluşturacağımız bu veriler için kullanacağımız emülatör adı Sense
hat’dır. Sense hat Raspberry Pi işletim sistemi üzerine kurulacaktır. Sense hat emülatörü
üzerindeki barların isimleri ve değerleri çalışmamızda sunduğumuz sensörlerin isimleri ve
değerleri ile değiştirilecektir. Emülatör üzerindeki barlarda oynama yaptıkça oluşan değerler
iotHook bulut sunucusuna kaydedilecektir. Sense hat emülatörünün projemizde seçme
nedenimiz ise pek çok güzel fikri hızla hayata geçirebilmenizi sağlayan bir Python
kütüphanesine sahip olmasıdır.
Örnek çıktı:
{'device': 17, 'field_1': '6', 'field_2': '3.49', 'field_3': None, 'field_4': None, 'field_5': None,
'field_6': None, 'field_7': None, 'field_8': None, 'id': 502491, 'pub_date': '2019-08-
31T01:07:29.438160', 'remote_address': '88.242.135.167&python-
requests/2.18.4&HTTP/1.1'}
3. PROJE ÇIKTILARI
Bu bölümde gerçekleştirdiğimiz IoT projesinin aşamaları adım adım ekran görüntüleri ile
anlatılmıştır. İlk olarak projede fiziksel bir sensör yapısı kurulmadan nabız verisi, sıcaklık verisi
ve kan basıncı verisi emülatörler üzerinden oluşturulmuştur (şekil 2). Sense hat Raspberry Pi
işletim sistemi üzerine kurulmuştur. Sense hat emülatörü üzerindeki barların isimleri ve
değerleri çalışmamızda sunduğumuz sensörlerin isimleri ve değerleri ile değiştirilmiştir.
Emülatör üzerindeki barlarda oynama yaptıkça oluşan değerler iotHook bulut sunucusuna
kaydedilmektedir. Projemin ilk aşaması olarak Sense Hat emülatöründeki bu değişiklikler
yapılmıştır.
Aşağıdaki Şekil 5’te ise Sense Hat emülatöründen iotHook bulut sunucuna gönderilen
verileri alanlara ayrılmış şekilde görebilmekteyiz.
Projemizin son aşamasında ise hastanın telefonuna bildiri göndermek için OneSignal
push servisi platformu kullanılmıştır. OneSignal’in sundupu http post metotu kullanarak
OneSignal sistemine kayıt yaptırmış olan hastaya uyarı gönderilir. Android studio ile
oluşturduğumuz application sayesinde hastanın OneSignal sistemine kaydolması
sağlanmaktadır. Şekil 10 da bu uygulamaya gelen uyarının gösterimi mevcuttur.
Emülatör üzerindeki barlarda oynama yaptıkça oluşan değerler Geany İDE platformunda
Python dili ile yazdığımız kod sayesinde iotHook bulut sunucusuna aktarılıp kaydedilmektedir.
Geany İDE üzerinden oluşturduğumuz Python kodunun tamamı aşağıdadır.
import json
import datetime
import time
import requests
import pprint
from sense_emu import SenseHat
sense = SenseHat()
print (sense.temp)
print (sense.humidity)
print (sense.pressure)
pprint.pprint(datetime.datetime.now())
data = {
'api_key' : 'b479a1b78a078b07b846d5ef',
'field_1' : round(temp,2),
'field_2' : round(blood_pressure,2),
'field_3' : round(pulse,2),
}
response =
requests.request('POST','https://iothook.com/api/update',
params=data, headers= {'Content-Type':'application/json'})
pprint.pprint(response.text)
temp = sense.temp
pulse = sense.humidity
blood_pressure = sense.pressure
pprint.pprint(datetime.datetime.now())
data = {
'api_key' : 'b479a1b78a078b07b846d5ef',
'field_1' : round(temp,2),
'field_2' : round(blood_pressure,2),
'field_3' : round(pulse,2),
Son olarak aşağıdaki kod parçası sayesinde iotHook‘un bize sunduğu HTTP POST
metotu ile yukarıdaki koda sayesinde Sense Hat barlarından aldığımız değerleri iotHook’un
sistemine gönderebiliyoruz.
response = requests.request('POST','https://iothook.com/api/update',
params=data, headers= {'Content-Type':'application/json'})
pprint.pprint(response.text)
Visual Studio Code İDE’si üzerinde Python programlama dilini kullanarak, verilerin
analizini yaparak, anomali olması durumunda veriyi bulut sunucusun dan çekip uygulamaya
bildirim olarak gönderecek kod aşağıdadır. İlk kod parçasında Device Read Api Key kısmı
içinde api_key = 77794982845c03ec3d3d14e9 kullanıldığı görüyoruz. Bu api_key iotHook’tan
veri çekilebilmesi amacıyla kullanılmıştır. Kodun devamından ise iotHook’un http get
methoduna kullanarak iotHook sunucuna gönderdiğimiz son 10 değeri response.json() kodu ile
alarak resp_arr array tipinde bir local değişkene atandığını görüyoruz. Daha sonra bu değişken
içerisinde iterasyon yapılıp her bir değişken için ilgili keyleri kullanarak son 10 değerleri her
bir değişken için farklı arraylere atılır. Bu işlem sleepy methodu sayesinde
(time.sleep(60)) 60 sn bir yapılmaktadır.
api_key = "77794982845c03ec3d3d14e9"
result_count = 10
response = requests.request('GET','https://iothook.com/api/device/?api_key
={}&results={}'.format(api_key,result_count),
headers= {'Content-Type':'application/json'})
resp_arr = response.json()
body_temperatures = []
blood_pressures = []
pulses = []
for resp in resp_arr:
#print(resp)
body_temperatures.append(float(resp["field_1"]))
blood_pressures.append(float(resp["field_2"]))
pulses.append(float(resp["field_3"]))
anomaly_check(body_temperatures, 38, 35, "Vücut sıcaklığı")
#anomaly_check(blood_pressures, 220, 0, "Kan basıncı")
#anomaly_check(pulses, 140, 60, "Nabız")
error_count = error_count + 1
time.sleep(60)
one_signal_api_key = "ODMzZmMyMjItMzIyNi00NzkzLWFhNTAtYjhlODAxZmU3YmI3"
one_signal_app_id = "30f80ec9-e1b6-4c31-9ffb-5b88971db213"
def send_notification(message):
header = { "Content-Type": "application/json; charset=utf-8",
"Authorization": "Basic {}".format(one_signal_api_key)}
package com.example.iot_project_notification;
import android.app.Application;
import com.onesignal.OneSignal;
@Override
public void onCreate() {
super.onCreate();
OneSignal.setLogLevel(OneSignal.LOG_LEVEL.VERBOSE,
OneSignal.LOG_LEVEL.NONE);
// OneSignal Initialization
OneSignal.initWithContext(this);
OneSignal.setAppId(ONESIGNAL_APP_ID);
}
5. SONUÇ
Nesnelerin interneti dersi proje konusu kapsamında 19. numaralı konu olan kişisel sağlık
verilerinin takip edilmesini sağlayacak bir yapının kurulması istenilmiştir. Ders kapsamında
anlatılan ve IoT projelerinde olması gereken ve beklenen en temel özellikler projede bir
mikroişlemci veya mikrodenetleyicinin olmasıdır. Ayrıca bu mikroişlemci veya
mikrodenetleyiciye bağlı olarak çalışan sensörler ve bu sensörlerin ürettiği verilerin bulut
sunucuna aktarılması, son olarak ise bu mikroişlemci veya mikro denetleyicinin herhangi bir
anomali olması durumunda bu durumu hastaya bir mobil uygulama yardımıyla bildirilmesi
istenilmektedir. Projemde sensörler olarak ise nabız, kandaki oksijen-şeker miktarı, kan basıncı,
ivme-dönü ölçer ile düşme kontrolü vb. algılayıcıların kullanılması beklenmiştir. Projemi
tasarlarken öncelikle bir IoT projesinin olmazsa olmazı olacak bütün gereksinimlerin
karşılanmasına tam olarak itina gösterilmiştir.
Projem eğer fiziksel bir ortamda gerçekleşseydi sensörleri denetleyen, verilerin analizini
yapan bir mikroişlemci olarak Raspberry Pi kullanılacaktı. Raspberry Pi’nin üzerinde bir wifi
modülü ve MikroSD kart bulunacaktı ve bu sayede Raspberry Pi’nin diğer cihazlarla veya
bileşenlerle iletişim kurabilmesi sağlanacaktı. Bunun yanında projemiz yine eğer fiziksel olarak
gerçekleştirilseydi anlık olarak kalp atış hızını ve nabzı ölçebilmek için Sparkfun nabız sensörü,
vücut sıcaklığı ölçebilmek için DS18b20 sensörü, kan basıncı sensörü olarak ise MPX5700
kullanılacaktı. Fakat projemi simüle edilerek gerçekleştirdim.
Projemiz simüle edilerek gerçekleştiği için tüm bu sensörler Raspberry Pi iletim sistemi
üzerine kurulan Sense Hat emülatörü üzerinde ayarlanmıştır. Projede bulut sunucusu olarak
iotHook bulut sunucusu kullanılmıştır ve Sense Hat emülatöründen gelen tüm veriler bu bulut
sunucusuna kaydedilmiştir. Sense Hat emülatörü üzerindeki sensörlerden oluşan veriler
Rasperry Pi işletim sistemi üzerindeki Geany IDE platformu üzerinde Python ile kodladığımız
kodlar sayesinde iotHook sunucuna gönderilmektedir. Verilerin iotHook sunucundan çekildiği
ve analizinin yapıldığı işlem ise Visual Studio Code İDE’si üzerinde Python programlama dilini
kullanarak yapılmıştır. Yine anomali durumundaki uyarılarda bu kod sayesinde
gerçekleşmektedir.
Bu bölümde bir projenin IoT projesi olarak sayılabilmesi açısından sahip olması gereken
5 temel değer oluşturma katmanlarının bizim projemizde sağlanıp sağlanamadığı konusu
irdelenmiştir.
Projemizde, 5. Katman (sayısal servisler) olarak kullanıcıya sunulması gereken bir mobil
uygulama servisi mevcuttur. 4. Katman olarak kullanıcılardan elde edilecek verileri analiz
ederek herhangi bir anomali durumunda kullanıcının uyarılmasını sağlayan bir masaüstü
uygulaması da mevcuttur. Bunun yanında IoT projesinde olması gereken katman 1’de ele alınan
kullanıcıya yarar sağlayacak bir yapının kurulma zorunluluğuda, projemin bireylerin sağlık
aktivitelerini sürekli olarak takip eden bir yapı olması neticesiyle bu katmandaki beklentiler de
tam olarak karşılanmıştır. Katman 2’deki belirtilen ve bir IoT projesinde olması gereken anlık
veri toplayabilen sensörlerin olması zorunluluğu da Sense Hat emülatörü üzerinde oluşturulan
sıcaklık sensörü, nabız sensörü, kan basıncı sensörü ile karşılanmıştır. Son olarak ise katman 3
olarak geçen ve IoT projesindeki tüm cihazların birbiri ile sürekli olarak iletişim halinde kalma
gerekliliği, projem simüle bir ortamda gerçekleşmesi vesilesiyle bilgisayarlara kurulu olan
sanal makine üzerinde çalışan sistemler ve masaüstü uygulamaları bilgisayarın Ethernet kartı
sayesinde, hasta uyarı sisteminin kurulu olduğu telefonlarında yine akıllı telefonlar olması
vesilesiyle 3G, 4G veya wifi teknolojileri sayesinde bu katmandaki tüm beklentilerde
karşılanmıştır.
Sonuç olarak, projemiz IoT projelerinde olması gereken bu 5 katmandaki tüm beklentileri
ve olması gereken IoT bileşenlerini karşılamaktadır. Projemiz farklı ortamlarda bulunan birçok
makinenin birbiri ile iletişim kurabilmesi, verilerin depolandığı bir yapının olması ve
gerektiğinde bu sistemlerin yine bir insanın müdahalesine gerek kalmadan veriler üzerinde
işlem ve analiz yapabilmesi gibi birçok eylemi otonom şekilde gerçekleştirebilmesinden dolayı
tam olarak bir IoT projesi olarak değerlendirilmektedir.
7. KAYNAKÇA