NodeJS Röle Kontrolü
11 Mayıs 2017Neler lazım?
- Tabii öncelikle elimizde herhangi bir Raspberry Pi olmalı (zero da olur).
- Röle ya da röle devresi (burada dörtlü röle devresi kullanıyoruz)
- Dişi - dişi jumper kablolar (GND ve PWR için birer tane ve her kontrol edilecek pin için bir tane)
Raspberry Pi
Pinout dediğimiz diagram üzerinden kontrol etmeyi hedeflediğimiz numaraları öğreniyoruz.
Örnek olarak sağ tarafta Raspberry Pi3'ün tam pinout diagramını veriyorum. Buna göre en alttaki 3 pini kullanmayı hedefliyorum, bunlar 16-20-21 olarak numaralandırılıyor (aslında fiziksel olarak 36-38-40 numaralı ama tabii ki fiziksel olarak kaçıncı olduğunun bizim için bir önemi yok).
Bu arada Raspberry üzerine işletim sistemi kurmadan işlem yapamayız. Bunun için çok güzel yerli-yabancı kaynaklar mevcut, örneğin Raspberry Pi Türkiye distribitörü Samm teknolojinin sitesi : http://www.samm.com/tr/blog/raspberry-pi-3-ilk-kurulumu.html
Röle Devresi
Bir röleyi direk Raspberry Pi pinlerine bağlamak biraz tehlikeli. Bu yüzden kendi devremizi yapmak yerine bu örnekte hazır bir röle seti kullanıyoruz. Raspberry Pi üzerinde hazır 5v çıkışı bulunduğu için ikinci adresim robotistan.com üzerinden 5V röle modülünü seçiyorum. Ben 4 röleli seti seçtim, aynı setin üzerinde farklı sayılarda röle barındıran versiyonları da var.
Jumper Kablolar
Raspberry Pi pinleri de röle devremizin pinleri de erkek, bu yüzden iki ucu dişi jumper kablolar alalım. Yine robotistan üzerinden ben şunları aldım. Bu kablolar malesef çok kaliteli değil, bazıları çalışmayabiliyor. 40 tanede 1 karşılaşmış olsam da bir düzenek çalışmadığında ilk olarak kabloyu değiştirip tekrar denemek mantıklı olabilir.
Parçaları temin ettiysek yazılım kısmına gelebiliriz. Raspi (bundan sonra kısa olarak raspi yazıcam) için raspbian işletim sistemimiz kurulu ve işlemlere başlayabiliriz.
Öncelikle yapmadıysak bir update ve upgrade zamanı.
sudo apt-get update
sudo apt-get upgrade
Sonrasında ihtiyacımız olan paketleri krumaya başlayalım. Raspi pinlerini kolay kontrol edebilmek adına güzel bir kütüphane yazılmış. Adı wiring-pi. C ve C++ için yazılmış bir kütüphane olsa da birçok dil için paketlenerek kullanıma sunuluyor. Biz nodejs ile pinleri kontrol etmek için önce wiring-pi ardından da nodejs için wiring-pi kuracağız.
Wiring-pi kurmak için şu adımları izledim:
sudo apt-get install git-core // eğer işletim sisteminde git kurulu değilse
git clone git://git.drogon.net/wiringPi // projeyi raspi üzerine klonluyoruz
cd ~/wiringPi // yeni oluşan klasöre giriyoruz
./build // klasörde wiring-pi ı derliyoruz
İşlem bitince kurulum başarılı mı diye kontrol etmek için aşağıdaki komutu yazıp bir sonuç almayı (wiring-pi versiyonu dönmeli) umuyoruz :
gpio -v
Şimdi sıra nodejs için wiring-pi kurmakta.
Peki raspi üzerinde node ya da nodejs kurulu mu? Bunu test etmek kolay, yine komut satırında node versiyonunu sorgulamamız yeterli.
node -v
Eğer bir sonuç dönmediyse bir de nodejs deneyelim,
nodejs -v
Bu komuttan da sonuç dönmediyse kurulum yapmamız gerekiyor.
Kurulum oldukça basit;
nodesource adresinden sağlanan apt kaynağını raspi ye ekleyelim :
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
ardından nodejs yi kurmak için:
sudo apt-get install nodejs
Sorun yoksa devam edelim. Şimdi sırada node için derlenmiş wiring-pi yüklemede. Bunun için yönetici hakları ile aşağıdaki komutu çalıştıralım
sudo npm install wiring-pi
Artık kod yazabilir miyiz? Çok iyi olur! Herşey hazır gibi duruyor. Yeni bir dosya açalım, isterseniz terminalde nano ile isterseniz vim ile... Uzantısı .js olsun, adı da ports olsun mesela. Ben nano kullanıyorum,
nano ports.js
Dosyamızın ilk satırında wiring-pi kütüphanesini dahil ederek başlayalım,
var wpi = require("wiring-pi");
Böylece wiring-pi a ait tüm komutları wpi. diyerek çağırabiliriz. İlk komutumuz portları kullanıma açmak için setup komutu,
wpi.wiringPiSetupGpio();
Sonrasında belirlediğimiz üç pinimizi (16,20,21) output olarak tanıtıyoruz:
wpi.pinMode(16,wpi.OUTPUT);
wpi.pinMode(20,wpi.OUTPUT);
wpi.pinMode(21,wpi.OUTPUT);
Ve son olarak pin leri açmak için komutlarımızı yazabiliriz:
wpi.digitalWrite(16,1);
wpi.digitalWrite(20,1);
wpi.digitalWrite(21,1);
Bundan sonra kapatmak için aynı komutu sonuna 0 gelecek şekilde yazarak kapatma işlemi yapabiliriz. digitalWrite komutunun aldığı iki değerden ilki pin numarası ikincisi ise pin'in olmasını istediğimiz durumu (0 = kapalı, 1 = açık).
Artık biraz kablolama yapabiliriz.