Raspberry Pi’nin beyni ve omurgası sayılan BCM2835‘in P1 portu 26 pine sahip. P1, BCM2835’in bazı pinlerine erişmemizi sağlayan bir port. 26 pinin 8 tanesi Genel Amaçlı Giriş Çıkış için programlanırken (GPIO), biri donanımsal PWM çıkışı olmak üzere I2C, SPI ve UART gibi birçok güzel porta sahip. P1’de, ayrıca 3.3v ve 5v luk besleme uçları da var

Pi’nin B modeli ayrıca bir konnektör lehimleyebilirceğiniz 4 pinli ayrı bir GPIO portuna da sahip. Bu portun adı P5. P5’i kullanmak isterseniz  2mm’lik 2×4’erkek header konnektör bağlayıp 4 GPIO pini daha elde edebilirsiniz. Detaylı bilgi için buraya bakabilirsiniz.

Yukarıda bahsettiğim I2C, SPI ve UART çalışma modları değiştirilerek ilgili pinler GPIO olarak da kullanılabiliyor. Bu durumda toplam 8 + 2 + 5 + 2  + 4 = 21 bitlik bir giriş çıkış portuna sahibiz demektir.

WiringPi

WiringPi, birçok dolaylı GPIO kontrol projesine de temel teşkil etmiş durumda. Bu özelliğini C’de kodlanmış olmasına bağlıyorum. Buradan programlama dillerine göre yapılmış bir performans sınamasına ulaşabilirsiniz. Sayfada göreceğiniz gibi C ile kodlanmış olan WiringPi kütüphanesi ile port’un on/off frekansı 7MHz’in üzerine çıkabilmiş.

WiringPi.GPIO komut satırı aracı

WiringPi’nin asıl bahsetmek istediğim kısmı beraberinde gelen gpio adındaki komut satırı aracı. Bu komut ile Pi’nin portlarını komut satırından kolayca kontrol edebilirsiniz. İleride bu komutu web sayfasından shell komutu aracılığı ile kullanmaktan da bahsedeceğim.

wiringPi’yi kurmak için aşağıdaki komutları sırasıyla uygulayın:

sudo apt-get install git-core
 
sudo apt-get update 
sudo apt-get upgrade
git clone git://git.drogon.net/wiringPi

 

 
cd wiringPi
git pull origin
 
cd wiringPi
./build

Kurulumu tamamladıktan sonra WiringPi ile gelen gpio komut satırı aracını test etmek için şu komutu verin.

 
sudo gpio -v

V parametresi Pi’niz hakkında bilgi kısa bir bilgi görüntüleyecek.

WiringPi GPOI hakkında bilmek isteyebileceğiniz bir detay da şu; GPIO komut satırı aracı esasında wiringPi kütüphanesini kullanmıyor, hali hazırda zaten raspbian’a entegre edilmiş olan /sys/class/gpio/ arabirimi ile dosya sistemi üzerinden iletişime portları yönetmenizi sağlıyor. Bu nedenle hız gerektiren uygulamalar  için gpio komut satırı aracı çok yavaş kalabilir.

Tüm GPIO pinlerinin durum ve değerlerini görüntülemek için şu komutu verin:

 
sudo gpio readall

gpio’nun komut satırından kullanımına örnek vermek gerekirse, aşağıdaki 3 satırlık komut Raspberry Pi’nin 2. pine bağlı Led’i yakıp daha sonra da söndürmektedir. Led’in katotuna, 330 ohm’luk direnç ile GND’ye bağlıdır.

 
gpio mode 2 out
gpio write 2 1
gpio write 2 0

İl satırda 2. pin çıkış olarak ayarlanıyor ardından çıkışa 1 bilgisi gönderilerek led yakılıyor, 3. satırda da 0 bilgisi ile 2. led’in sönmesi sağlanıyor.

Raspbian Linux kullandığınızı varsayarak  aynı işlemi wiringPi ile gelen gpio aracını kullanmadan da gerçekleştirebilirsiniz. WiringPi GPIO’nun BCM2835 ile çekirdek seviyesinde iletişim kurmadığından yukarıda bahsetmiştim.  Şöyle:

 
echo "27" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio27/direction
echo "1" > /sys/class/gpio/gpio27/value
echo "0" > /sys/class/gpio/gpio27/value

Kısaca açıklamak gerekirse 2. pinin yönü (direction) çıkış (out) olarak ayarlanıyor ardından bu pine değer olarak sırasıyla 1 ve 0 bilgileri gönderiliyor. Bu yöntemi kullanmanızı tavsiye etmiyorum. Çünkü bu yöntemde kullanmak istediğiniz pin’e karşılık gelen BCM GPIO numarasını yazmanız gerekiyor. Pin’lerin BCM GPIO numaralarını aşağıdaki tablodan görebilirsiniz.

gpio1

BCM GPIO numaralandırması aslında Raspberry’nin beynini oluşturan BCM2835 işlemcisinin bacak numarasına karşılık geliyor. Port’ları BCM numarası ile adlandırmak ve yukarıdaki gibi /sys/class/gpio arabirimini kullanarak uygulama gerçekleştirmek pek iyi bir fikir değil.

Şöyleki; Ilerleyen zamanlarda işlemcinin veya Pi kartının tasarımı veya bacak bağlantılarının değişmesi çok olası. Bu durumda uygulamanızda kullandığımız portun BCM2835’in farklı bir karşılık gelmesi durumu var. Aslında gpio aracı tam da bu noktada araya giriyor ve  raspberry pin sıra numaraları ile bcm gpio’nun pin numaraları arasında bir bir nevi eşleştirme yapıyor. Yani biz ona pin 2 dediğimiz de o aslında BCM2835 çipinin 27 numaralı bacağını (GPIO27) kastettiğimizi anlıyor. İleride BCM2835’in bacakları veya Pi’nin tasarımı değiştiğinde wiringPi ile gelen gpio aracının güncellenen sürümü sayesinde program kodlarımızda ve uygulama devrenizde hiçbir değişiklik yapmadan yolunuza devam edebilirsiniz. Yani gpio aracı diğerine göre iyi bir yöntem.

WiringPi gpio aracı ile pwm, SPI, UART gibi Pi’nin izin verdiği hemen hemen tüm özellikleri kullanabilirsiniz.  Port’tan okuma yapmaya örnek vererek sonlandırmak istiyorum.

 
gpio read 2

Bu komut ile 2. pinin mevcut değerini okutup ekrana yazdırıyoruz.

Umarım faydalı olmuştur. Sorularınız olursa sayfanın sonuna yazabilirsiniz. Elimden geldiğince yanıtlamaya çalışırım.

Kaynak:
[0] http://wiringpi.com/
[1] http://wiringpi.com/download-and-install/
[2] http://codeandlife.com/2012/07/03/benchmarking-raspberry-pi-gpio-speed/
[3] http://www.raspberrypi-spy.co.uk/2012/09/raspberry-pi-p5-header/

1 YORUM

CEVAP VER