analog veri alabileceğniz en ucuz ve kolay bulunabilen sensörlerden bir tanesi lm35 dir. lm35 ile hassas uygulamalar yapmanın doğru olmayacağını hatırlatmakta fayda var.
arduino üzerinde analog giriş farklı portları kullanabilirsiniz. bu örnekte lm35 in Vout bacağı arduino nun A0 bacağına bağlanmıştır. burada hangi pinin kullanılacağı okunan sıcaklık degerinin hesaplanmasında önemlidir.
bu örneğimiz için Sicaklik = (500.0 * Vin)/1023 formulü bizim hesaplamızda işimize yarayacaktır.
lcd olarak standart 16×2 bir lcd kullanılmaktadır. devre kullanılan potansiyemetere ve direnç srasıyla lcd parlaklık ayarını yapmak ve lcd yi korumak için kullanılmaktadır.
uno r3 için kod :
int Vin; // Arduino A0 pinin kullanilacak degisken
float Sicaklik; // Sicakik degeri float olarak belirlenir
// include the library code:
#include <LiquidCrystal.h>
// LiquidCrystal kutuphanesi ile lcd icin kullanacagimiz pinleri set edelim.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// lcd nin satir ve sutun bilgisi
lcd.begin(16, 2);
// lcd nin 1. satirina ait bilgi mesaji
lcd.print("Sicaklik: ");
}
void loop() {
Vin = analogRead(0); // A0 pin değerinin okunması
Sicaklik = (500.0 * Vin)/1023; // A0 pininden okunan degerin sicaklik degerine cevrilmesi
// set the cursor to column 3, line 1
lcd.setCursor(3, 1);
// Sicaklik degerini yazirma
lcd.print("derece ");
lcd.print(Sicaklik);
}
circuits.io platformunu test etmk için bu uygulamayı circuits.io üzerinde yapmıştım. https://circuits.io/circuits/2424060-lm35-lcd-uno-r3/ adresinden devrenin çalışır haline ulaşabilirsiniz.
nesnelerin interneti uygulamalarının artması, uygulamalardan elde edilen verilerin kaydedileceği veri kayıt merkezi uygulamaları ihtiyaçlarınıda doğurmaktadır. bu verilerin yerelde tutulması kimi zaman imkansız, kimi zamanda veriye erişim ve inceleme gereksinimlerinden dolayı bir uygun değildir. yani nesnelerin interneti kavramı büyük veri ve bulut bilişim ile iç içe geçmiş durumdadır.
bu gereksinimin farkında olan bir çok şirket kullanıcılara parasız ve paralı seçenekler sunmaya başlamıştır. bunlardan bir taneside arkasında mathworksun olduğu thingspeak. thingspeak i diğerlerinden farklı kılan yanı matlab ile entegrasyonu. matlab ile veri işlemeye ve karışık hesaplamalarla sıklıkla uğraşan birisiyseniz gerçek dünyadan elde ettiğiniz verileri saklamak için ideal bir ortam konumunda.
örnek olarak iliniz içerisinde ayırdığınız bölgelerdeki hava sıcaklık, nem, rüzgar ile hava kirliği arasında bir ilişki konusunda bir araştırma yapıyorsanuz sahadaki internet erişimi olan sensörlerinizin verilerini bu platformda tutabilirsiniz.
hesabınızı oluşturduktan sonra My Channels linkine girerek New Channel diyerek yeni bir channel – yani bir veri tabanı – tablo oluşturuyoruz.
karşımıza çıkan ekran yandaki şekilde olacaktır.
burada yer alan alanlara ait açıklamalar kısaca aşagıdaki şekildedir.
Channel Name: kanal için kullanılacak isim.
Description: kanal için açıklama.
Field#: kanalda kaydedilebilecek 8 adet veri alanı mevcuttur. bu veri alanı için isim. kullanabilek için yandaki kutucuk seçilerek aktif edilmelidir..
Metadata: kanal datasının JSON, XML, veya CSV olup olmadığı bilgisi.
Tags: kanalı tanımlamak için kullanılacak anahtar kelimeler.
Latitude: kullanılacak sensör – kanal için enlem bilgisi
Longitude: kullanılacak sensör – kanal için boylam bilgisi.
Elevation: kullanılacak sensör – kanal için yükseklik bilgisi..
Make Public: verileri herkese açık hale getirmek.
URL: kanal hakkında bilgi içeren bir web sitesi var ise.
Video ID: kanal hakkında bilgi içeren bir youtube veya vimeo videosu var ise..
her kanal içine 8 tane anlık veri kaydedebiliyoruz. bu bir çok uygulama için yeterli olacaktır. formu doldurarak kaydettiğimizde thingspeak bize bir kanal oluşturacaktır.
oluşturulan her kanala ait bir idye sahip olacaktır. verilere erişmek için bu id bilgisi gerekmektedir.
kanalı oluştuduktan sonra My Channels görünümü aşagıdaki şekilde olacaktır.
burada bizim için önemli alanları inceleyelim.
private ve public viewde kendimizin görebileceği ve herkesin görebileceği verileri görebiliyruz. burada kanal id miz ve kanala ait temel bilgilerde yer almaktadır.
Chanel Setting kanalı oluşturken kullandığmız alanları yönetebileceğimiz kısımdır.
API Keys altında ise thingspeaka veri yazma ve okuma işlemi sırasında kullanacağımız keyler yer almaktadır. bu keyler birbirinden farklı olduğu için uygulmalar sırasında buna dikkat etmek gerekmektedir.
Data Import/Export altında ise kanal altında veri eklemenize ve veri almanıza yarayan tool mevcuttur.. Export ile CSV formatında alınan dosya yapısı aşagıdaki şekildedir.
raspberry pi üzerinde kullanılabilecek dağıtım sayısı günden güne artmaktadır. https://www.raspberrypi.org/downloads/ adreside yer alan en temel dağıtımların varsayılan yönetici kullanıcı adı şifreleri aşagıdaki gibidir. neyin ne zaman lazım olacağı belli olmuyor.
linuxte iç ve dış ip adresi değişimlerinin twitter hesabına gönderilmesi yazısında linux üzerinden nasıl twit atılabileceğin dair bir şeyler yazmıştık. aynı işlemi raspberry üzerinden yapmak isteyebiliriz. ancak o yazıda anlatılan kütüphane ruby aitti. bize python ve c fazlasıyla yetecektir. raspberry üzerine birde ruby bulaştırmaya gerek yok.
python için işimize yarayacak bir çok kütüphane var ancak tweepy tercihimiz olacak. raspianımızı python-tweepy ve bağımlı olan kütüphanleri yükleyelim.
pi@cicek /etc/apt/sources.list.d $ sudo apt-get install python-tweepy
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
python-oauth
Suggested packages:
python-tweepy-doc
The following NEW packages will be installed:
python-oauth python-tweepy
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 39,0 kB of archives.
After this operation, 331 kB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Get:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main python-oauth all 1.0.1-3 [14,2 kB]
Get:2 http://mirrordirector.raspbian.org/raspbian/ wheezy/main python-tweepy all 1.7.1-2+deb7u1 [24,8 kB]
Fetched 39,0 kB in 1s (32,8 kB/s)
Selecting previously unselected package python-oauth.
(Reading database ... 53951 files and directories currently installed.)
Unpacking python-oauth (from .../python-oauth_1.0.1-3_all.deb) ...
Selecting previously unselected package python-tweepy.
Unpacking python-tweepy (from .../python-tweepy_1.7.1-2+deb7u1_all.deb) ...
Setting up python-oauth (1.0.1-3) ...
Setting up python-tweepy (1.7.1-2+deb7u1) ...
kütüphanemiz şimdi raspberry üzerinde hazır ve kullanabiliriz. http://www.tweepy.org/ adresinden kütüphane hakkında detaylı bilgi alabilirsiniz.
eğer python-tweepy reponuzda yoksa pip ile kurabilirsiniz tabiki.
kurulum tamam tweepy adresinden kütüphanenin kullanıma kısaca baktıysanız basit bir örnek yapalım.. klasik olarak cpu nun sıcaklık değerini tweet olarak atalım.
twitter üzerinden https://apps.twitter.com/ gerekli ayarları önceden yapmış olmanız gerekmektedir. çünkü buradaki Consumer ve Access bilgiler gerekecek.
#!/usr/bin/env python
#gerekli kütüphaneleri import edelim
import os
import sys
import tweepy
#apps.twitter.com adresinden aldığımız consumer ve access bilgileri tanımlayalım
CONSUMER_KEY = 'size ait Consumer Key (API Key)'
CONSUMER_SECRET = 'size ait Consumer Secret (API Secret)'
ACCESS_KEY = 'size ait Access Token'
ACCESS_SECRET = 'size ait Access Token Secret'
#twitter ile doğrulama işlemleri gerçekleştirelim
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)
#meşhur sıcaklık verisini alıp işleyelim
cmd = '/opt/vc/bin/vcgencmd measure_temp'
line = os.popen(cmd).readline().strip()
temp = line.split('=')[1].split("'")[0]
#sıcaklık bilgisini tweet olarak gönderelim.
api.update_status(temp);
kodumuzu çalıştırdığımız da
ekran görüntüsündeki gibi başarılı şekilde twitimiz public olarak atılmış oldu.
mqtt için her geçen yeni bir client, kütüphane yayınlanmaya devam ediyor. bunlardan en kullanışlarından bir tanesi kesinlikle paho .
sitesinde an itibariye mqtt için C/C++, Java, Javascript, Python, Go ve C# .NET destekleri olduğu görülmekte.
paho nun python kütüphaneleri kullanarak basit bir örnek yapalım. öncelikle gerekli kütüphaleri raspberry üzerine yükleyelim.
pi@cicek ~ $ sudo pip install paho-mqtt
eğer sisteminiz üzerinde pip kurulu değilse tabiki öncelikle pip kurulumunu yapmanız gerekmektedir.
pi@cicek ~ $ sudo apt-get install python-pip
gerekli kurulumları yaptıktan sonra kodumuzu yazarak gerekli testleri yapabiliriz. bu örnekte lokal bir broker kullanmak yerine cloudmqtt.com üzerinde yer alan servisi kullanalım. böylelikle uygulamalarımızı diğer sistemlere entegrasyonu konusunda ufak bir atmış oluruz. cloudmqtt üzerinde bir hesap oluşturak yeni bir servis oluşturalım.
yukarıdaki gibi bize kullanıcı adı şifre v.b. verecektir. sitesinde yer alan şablona uygun olarak test kodumuzu yazalım.
yaptığımız iot uygulamalarını bir adım ileri taşımak ve standartlara uydurmak için cihazlar arasında kabul gören standartlardan bir tanesini kullanmakta fayda var.
bu konuda en büyük çalışmaları yapan ibm inde arkasında olduğu mqtt ve amqp, coap, lwm2m gibi bir kaç protokol daha mevcut.
siteleri incelenebilir. maalesef konu hakkında henüz çok fazla Türkçe doküman mevcut değil.
temel olarak yapılan uygulamalarda
– bilgilerin hızlı bir şekilde iletilebiliyor olması
– iletilen bilgilerin sorunsuz olarak iletiliyor olması
– iletimin güvenli bir şekilde olması
– iletimin performansının yüksek olması ve ölçeklendirilebilir olması
– basitleştirilmiş bir yönetim ve denetimin olması
– maliyetin düşük olması
– yazılım dili şartı olmaksızın geliştirilmeye açık olması
…
vb istenmektedir. bu istekleri karşılayacak bir veri iletim standartı geliştirilmesi zorunluluğundan dolayı mqtt ve benzeri protokoller ortaya çıkmıştır.
mqtt ile çalışmaya başlamadan önce bu kadar temel bilgi yeter.
mqtt de cihazlar doğrudan birbiri ile iletişim kurmak yerine broker olarak isimlendirilen bir sunucu ile irtibata geçer ve bu sunucu üzerinden iletim sağlarlar. bu sunucu ile iletim kuran cihazlar yaptığı işe göre publisher veya subscriber olarak isimlendirilirler. publisher veri sensörler gibi veri gönderen uç birimleri temsil ederken subscriber veri talebinde bulunan veya değer gönderen uç birimdir.
temel mantık bu şekildedir. işin mantığını pratik yaparak öğrenmeye devam edelim. mqtt standartı için yazılmış bir çok kütüphane vb mevcuttur. bunlardan kullanımı oldukça kolay olan mosquitto ile kod yazmadan bir kaç uygulama yapalım.
şimdi sıra windows için olan kuruluma geldi. şu anki en güncel sürüm olan mosquitto-1.4.2-install-win32.exe ı indirelim ve setup dosyasını çalıştıralım. kurulum sırasında aşagıdaki ekran görüntüsünde görüleceği üzere bağımlı olduğu bir kaç dosyalarıda bilgisayarımıza kurmamız gerekmektedir.
gerekli kurulumları yaptıktan sonra her üç sistemimiz üzerinde mosquitto, mosquitto_pub ve mosquitto_sub olarak çalıştırılabilir üç dosyamız olacak. herşey tamam kod yazmadan mosquitto nın nasıl çalıştığını test edelim.
ubuntu üzerinden brokerimizin çalıştığından emin olalım.
fcicek@ubuntu:~$ ps aux | grep mosquitto
mosquit+ 4792 0.0 0.0 14912 964 ? Ss 03:15 0:05 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
raspberry üzerinde cicek isimli bir kanal oluşturarak “test_mesaji_raspberry” şeklinde bir mesaj gönderelim.
bu yazıda ise donanımsal olarak bir değişiklik yapmadan video yayının nasıl yapacağımıza değinelim. bu şekilde bir ip kamera sahibi olmuş olacağız. gerekli düzenlemeleri yaparak eviniz – iş yeriniz için bir güvenlik kamerasına, çocuğunuz için bir çocuk kamerasına dönüştürebilirsiniz.
yayın yapmak için motion isimli yazılımı kullanacağız. video stream yayın bir çok uygulama ile benzer işlemi yapılabilir ancak raspberry kullanıcıları tarafında bu uygulama oldukça popüler ve kurulum ve konfigürasyonu benzerlerine göre oldukça kolay.
ilgili uygulamaya yükleyelim.
pi@cicek ~ $ sudo apt-get install motion
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
ffmpeg libpq5
Suggested packages:
postgresql-client
The following NEW packages will be installed:
ffmpeg libpq5 motion
0 upgraded, 3 newly installed, 0 to remove and 3 not upgraded.
Need to get 0 B/533 kB of archives.
After this operation, 1,461 kB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Preconfiguring packages ...
Selecting previously unselected package libpq5.
(Reading database ... 38800 files and directories currently installed.)
Unpacking libpq5 (from .../libpq5_9.1.16-0+deb7u2_armhf.deb) ...
Selecting previously unselected package motion.
Unpacking motion (from .../motion_3.2.12-3.4_armhf.deb) ...
Selecting previously unselected package ffmpeg.
Unpacking ffmpeg (from .../ffmpeg_6%3a0.8.17-1+rpi1_armhf.deb) ...
Processing triggers for man-db ...
Setting up libpq5 (9.1.16-0+deb7u2) ...
Setting up motion (3.2.12-3.4) ...
Adding group `motion' (GID 114) ...
Done.
Adding system user `motion' (UID 109) ...
Adding new user `motion' (UID 109) with group `motion' ...
Not creating home directory `/home/motion'.
Adding user `motion' to group `video' ...
Adding user motion to group video
Done.
[warn] Not starting motion daemon, disabled via /etc/default/motion ... (warning).
Setting up ffmpeg (6:0.8.17-1+rpi1) ...
ekran çıktısından görüldüğü gibi uygulama kuruldu ancak sunucu başlayamadı.
/etc/motion/motion.conf konfigürasyon dosyasında ben aşağıdaki şekilde gerekli değişiklikleri yaptım
pi@cicek ~ $ sudo nano /etc/motion/motion.conf
daemon on
setup_mode off
output_normal on
output_motion off
ffmpeg_cap_new on
ffmpeg_video_codec swf
target_dir /tmp/motion
webcam_port 8081
webcam_localhost off
control_port 8080
control_localhost off
yukarıdaki ayar ile sunucu modunu aktif ederek yayının localhost dışında alınabilmesi ve ayarlanabilmesi için gerekli konfügrasyon değişiklerini yapmış olduk. konfigürasyon dosyasının içine bakacak olursanız ilave bir dökümana ihtiyaç duymadan gerekli konfigürasyonu yapabilirisiniz.
şimdi ufak bir iki işlem daha yapamız lazım.daemon aktif olması için
pi@cicek ~ $ cat /etc/default/motion
# set to 'yes' to enable the motion daemon
start_motion_daemon=yes
olarak gerekli değişikliği yapalım.
pi@cicek ~ $ sudo chmod 777 /media
şimdi motion servisini yeniden başlatalım..
pi@cicek ~ $ sudo service motion restart
[ ok ] Restarting motion...[....] Stopping motion detection daemon: motion.
[ ok ] Starting motion detection daemon: motion.done.
sorunsuz olarak servis aktif oldu. şimdi gerekli testlerimiz yapalım.
yukarıda konfigürasyon sırasında parola korumasız olarak web üzerinden konfigürasyonuda aktif etmiştik. bir web tarayıcı açarak http://raspberryip:8080 yazarak gerekli testi gerçekleştirelim ve konfigürasyon servisinin düzgün şekilde çalıştığından emin olalım.
şimdi sıra esas amacımız olan görüntüyü alıp alamadığımızın testine geldi. vlc uygulamasını açarak http://raspberrypi-ipadresi:8081 adresini yazarak görüntümüzü bakalalım
raspberry pi üzerinde özel bir kamera için arayüz olsa da uygulamanızı ucuza getirmek istiyorsanız linux altında sorun çıkarmayan ucuz bir usb2 webcam işinizi görecektir.
ben eskilerden goldmaster v-52 diye uyduruk bir webcam buldum. ve onunla yapacağım uygulamaları…
öncelikle usb arayüzünü
pi@cicek ~ $ lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 1908:2310 GEMBIRD
ve sonrasında video arayüzünü kontrol edelim.
pi@cicek ~ $ ls -al /dev/video*
crw-rw---T 1 root video 81, 0 Jan 1 1970 /dev/video0
her şey yolunda görülüyor. şimdi video0 dan amacımızı uygun olarak veri toplayan ve bunu yayın yapan yazılımları raspberry üzerine kurmaya sıra geldi.
sadece anlık görüntüyü resim formatında kaydetmek istiyorsanız fswebcam uygulaması fazlasıyla işinizi görecektir.
pi@cicek ~ $ sudo apt-get install fswebcam
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
fswebcam
0 upgraded, 1 newly installed, 0 to remove and 3 not upgraded.
Need to get 0 B/52.3 kB of archives.
After this operation, 141 kB of additional disk space will be used.
Selecting previously unselected package fswebcam.
(Reading database ... 38843 files and directories currently installed.)
Unpacking fswebcam (from .../fswebcam_20110717-1_armhf.deb) ...
Processing triggers for man-db ...
Setting up fswebcam (20110717-1) ...
ilgili paketi kurduktan sonra bir örnek ile kameradan görüntü yakalayalım.
pi@cicek /var/www/wcam $ sudo fswebcam --no-title /var/www/wcam/test.jpg
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Error selecting input 0
VIDIOC_S_INPUT: Device or resource busy
yukarıda görüldüğü gibi bir hata aldık. bunun nedeni video0 in başka bir uygulama tarafından kullanıldığını gösteriyor. eğer kamera ile ilgili bir uygulama yapacaksanız mutlaka anlık kamera için bu kontrolleri ve cpu ve ram kullanım durumlarını kontrol ediniz. diğer uygulamayı kapattıktan sonra fswebcami yeniden çalıştıralım.
pi@cicek /var/www/wcam $ sudo fswebcam --no-title /var/www/wcam/test.jpg
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Clearing title.
Unable to load font 'sans': Could not find/open font
Disabling the the banner.
Writing JPEG image to '/var/www/wcam/test.jpg'.
font yüklenirken bir hata meydana geldi ancak test.jpg dosyamz web dizinimiz altında oluştu. web tarayıcı ile http://192.168.2.37/wcam/test.jpg adresine girerek gerekli kontrolleri yapalım. elde ettiğim görüntü aşağıdaki gibidir.
daha önceki örneklerimizde raspberry nin sistem özelliklerini okumayı ve bu verileri rrd veri tabanına kaydetmeyi ve izlemesi konusunda örnekler yapmıştık.
bu yöntemin uygun olmayacağı veya istenmeyeceği durumlar olabilir. böyle bir durum olduğunu düşünerek okuduğumuz cpu sıcaklık değerini bir veri tabanına (örneğimizde mysql olacak) kaydedelim ve dinamik bir arayüz ile veri tabanına kaydettiğimiz verileri kullanıcılarımız sunacağımız bir uygulama geliştirelim.
öncelikle veri tabanımızda hangi verilerin olacağını belirlemeli ve veritabanımızı oluşturmalıyız. raspberry pinin klasik dağıtımları üzerinde mysql, php, apache gibi sunucu yazılımları mevcut değil. bunları kurmanız gerektiğini unutmayınız. internette konu hakkında dokümanlar mevcut. uygun bir zamanda detaylı olarak onuda ekleyebiliriz. bunların olduğunu var sayarak esas konumuza dönelim.
bu örneğimizde tarih ve saat verisinin yanında sadece sıcaklık değerini tutmamız yeterli olacaktır.
sudo mysql -u root -p
CREATE DATABASE raspberry_sistem;
USE raspberry_sistem;
CREATE TABLE cpu_temp ( id INT NOT NULL AUTO_INCREMENT,
tarih DATE NOT NULL,
saat TIME NOT NULL,
sicaklik varchar(50),
PRIMARY KEY ( id ));
GRANT INSERT,SELECT ON raspberry_sistem.* TO 'raspberry'@'localhost' IDENTIFIED BY 'pi';
FLUSH PRIVILEGES;
artık veritabanımız hazır. sıra sıcaklık değeri okuyarak veri tabanına eklemeye geldi. ben örneğimi python kullanarak yapacağım. benim kullandığım python kütüphaneleri sizin raspberry üzerinde olmayabilir. kodun çalışması için eksik kütüphaneleri yüklemeniz gerekmektedir.
#sicaklik_cpu.py dosyasi
import time
import os
import fnmatch
import MySQLdb as mdb
import logging
import time
import datetime
#cpu sicaklik degerinin okunmasi
def cpu_sicaklik_oku():
res = os.popen('vcgencmd measure_temp').readline()
return(res.replace("temp=","").replace("'C\n",""))
#mysql veritabanina veri eklenmesi
def insertDB(cpu_sicaklik):
sql = "INSERT INTO cpu_temp (tarih, saat, sicaklik) VALUES ('%s', '%s', '%s' )" % (time.strftime("%Y-%m-%d"), time.strftime("%H:%M"), cpu_sicaklik)
try:
con = mdb.connect('localhost', 'raspberry', 'pi', 'raspberry_sistem');
cursor = con.cursor()
cursor.execute(sql)
con.commit()
con.close()
except mdb.Error, e:
logger.error(e)
#sicaklik okuma ve veritabanina yazma fonksiyonlarini calistiralim
cpu_sicaklik = float(cpu_sicaklik_oku())
print cpu_sicaklik
insertDB(cpu_sicaklik)
kodun oldukça sadece ve anlaşılır olduğunuz düşüyorum. temel olarak sıcaklık verisinin okunmasını ve bu verinin veri tabanına eklenmesini sağlayarak iki ayrı fonksiyon oluşturduk. ve bu fonksiyonları sırası ile çağırıyoruz.
sıcaklık değeri okundu ve ekrana yazıldı ve herhangi bir hata vermedi. kontrol için eklediğimiz kodu “print cpu_sicaklik” her şey tamam olduktan sonra kaldıracağız. veri tabanına gerekli veri girişi doğru şekilde yapıldığının kontrolünü de yapalım.
mysql> select * from cpu_temp;
Empty set (0.01 sec)
mysql> select * from cpu_temp;
+----+------------+----------+----------+
| id | tarih | saat | sicaklik |
+----+------------+----------+----------+
| 1 | 2015-07-19 | 22:35:00 | 54.1 |
+----+------------+----------+----------+
1 row in set (0.00 sec)
kodumuz sağlıklı olarak çalışıyor. şimdi bu işlemi otomatikleştirmek için crontab içine yerleştirelim.
5 dakika bir çalışacak şekilde gerekli ilavemizi de yaptıktan sonra sıra kullanıcı arayüzüne geldi. grafik çizimi için google chart servisini line chart kullanacağım. detaylı bilgiyi https://developers.google.com/chart/interactive/docs/gallery/linechart adresinden alınabilir.
bu servis sayesinde grafik kütüphaneleri ile fazla uğraşmayacağım ve işimi kolayca halledeceğim.
<!DOCTYPE html>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
google.load('visualization', '1', {'packages':['corechart']});
google.setOnLoadCallback(drawChart);
function drawChart() {
var json = $.ajax({
url: 'get_json.php',
dataType: 'json',
async: false
}).responseText;
var data = new google.visualization.DataTable(json);
var options = {
title: 'Raspberry CPU Sicaklik',
width: 600,
height: 400
};
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);
setInterval(drawChart, 500 );
}
</script>
<div id="chart_div" style="width: 600px; height: 400px;"></div>
yukarıdaki kodu index.html olarak kaydelim ve esas işi yapacak get_json.php php dosyamızı da oluşturalım
satırı yerine uygun kodu yazarak raspberrynin sıcaklık değerini rrd grafikleri üzerinden takip edebiliriz.
linux makinelerde cpu log dizin yapısından ufak farklılıklar olabilir ancak 2. yöntemle linux kullanan tüm cihazlarda cpu sıcaklık değeri öğrenebiliriz.