20 Haziran 2019 Perşembe

ORANGE PI PYTHON GPIO

ORANGE PI PYTHON GPIO


Python kurulum yazısında Orange pi'de Python konusuna giriş yapmıştık. Bu yazımızda Python dili ile Orange pi'deki giriş çıkış pinlerini(gpio) nasıl programlayacağımızı inceleyeceğiz.


Yüklemeler

Yükleme işlemleri için komut satırını kullanacağız.

İlk önce güncellemeleri yükleyelim.

sudo apt-get update && apt-get upgrade -y

Daha sonra gpio pinlerini Python ile kontrol etmek için gerekli olan kütüphaneyi indirelim.

Zero modelleri için;

sudo git clone https://github.com/nvl1109/orangepi_zero_gpio.git

Diğer modeller için;

sudo git clone https://github.com/duxingkei33/orangepi_PC_gpio_pyH3.git

Elimizdeki modele göre Python gpio kütüphanesi yükledikten sonra kurulum işlemine yapıyoruz.

cd orangepi_PC_gpio_pyH3

sudo python setup.py install



Yükleme işlemi bitti fakat Python gpio kodlarını, yapılarını anlamak için indirdiğimiz dizine giderek örnekleri inceleyelim.


Python Kütüphanesi İnceleme


"orangepi_PC_gpio_pyH3/examples" dizinine giderek, "blink_led.py" kodunu açıp çalıştıralım. Başlangıçta elinizde elektronik malzemeler olmasa bile, bizim gibi koda birkaç satır ekleyerek durumu terminal üzerinden görebilirsiniz. Buradaki asıl amaç yüklemelerin tam olduğunu ve kodun hata vermediğini test etmek.




Eğer program yukarıdaki gibi çalışıyorsa, artık kendi programımızı yazmak için gerekli kodları, pin diyagramını vs. öğrenebiliriz.

İlk çalıştırdığımız koda bir göz attığımızda init(), setcfg() gibi kodlar olduğunu görüyoruz. Lede bir değer atmak için gpio.output() kodunu görüyoruz. Şimdi indirdiğimiz kütüphane ile hangi yapıları ve kodları kullanabildiğimize bakalım.

Gpio metotları

  • init() : Modülün başlatılmasını sağlar. Program dosyasında her zaman ilk çağrılır.

  • getcfg() : Gpio'nun mevcut konfigürasyonunu okur.

  • setcfg() : Gpio durumunu(giriş/çıkış) ayarlar.

  • input() : Gpio'nun mevcut konumunu(0/1) okur.

  • output() : Gpio'nun konumunu ayarlar.

  • pullup() : Pull-up/pull-down durumunu ayarlar.

Yukarıdaki metotların kullanabileceği değerler :

  • LOW / HIGH : 0 /1

  • INPUT / OUTPUT : 0 / 1

  • PULLUP / PULLDOWN : 1 / 2

Python gpio kütüphanesi kullanırken gpio pinlerini tanımlarken iki farklı isimlendirme kullanabiliyoruz. Bu isimlendirmeleri "port" ve "connector" modülleri ile birlikte kullanabiliyoruz.

Port isimlendirmesi bizim daha aşina olduğumuz isimlendirme biçimi. Terminalden Python Shell'e girerek bu adlandırmanın nasıl olduğunu görebiliriz.

python

>>>from pyA20.gpio import port

>>>dir(port)


Port adı ile adlandırmada aşağıdaki pin diyagramını kullanabiliriz.


Yukarıdaki pin diyagramına bakarak istediğimiz pini programlayabiliriz. Örneğin;

from pyA20.gpio import port

gpio.setcfg(port.PA6, OUTPUT)

Yukarıdaki kod "PA6" pinini, yani 7.pini çıkış olarak ayarlar.

Connector isimlendirmesi için de Python Shell'e girerek bu adlandırmanın nasıl olduğunu görebiliriz.

>>>from pyA20.gpio import connector

>>>dir(connector)


Kullandığımız Python gpio kütüphanesi ilk olarak A-20 OlinuXino-Mino kartının yapısı düşünülerek yazılmıştır. Aşağıdaki resme bakabilirsiniz. Bu yüzden bağlayıcı(connector)(Pin grubu) adı ile adlandırma, o kartın yapısı düşünüldüğünde kolaylık sağlayabilir. Fakat Orange pi'de pinler tek grupta olduğu için bu adlandırmanın bizim açımızdan bir avantajı yok.



Port adı ile adlandırmada aşağıdaki pin diyagramını kullanabiliriz.



Orange pi'de tek grup gpio grubu olduğu için, eğer bu isimledirmeyi kullanmak istiyorsan bağlayıcı grup ismini sürekli "gpio1" olarak kullanmak gerekecek. Örneğin;

from pyA20.gpio import connector

gpio.setcfg(connector.gpio1p7, OUTPUT)
Yukarıda "gpio1" pin grubunu, "p7" ise 7.pin olduğunu ifade eder. Yukarıdaki kod 7. pini çıkış olarak ayarlar.


Python Gpio Programlama

Python'da gpio pinlerin kontrol etmemize olanak sağlayan metotları yukarıda açıkladık. Şimdi bunları örnek programlarla açıklayalım.

from time import sleep
from pyA20.gpio import gpio
from pyA20.gpio import port

#gpio islevlerini baslat.
gpio.init()

#gpio atamasi yap.
led = port.PA6
gpio.setcfg(led, gpio.OUTPUT)

#ledlerin durumunu ayarla(high/low)
while True:
        gpio.output(led, gpio.HIGH)
        sleep(1)
        gpio.output(led,gpio.LOW)
        sleep(1)

Yukarıda temel bir led programı var. Port numarası ile isimlendirme kullanılmış. Yukarıdaki programda, PA6 portuna bağlı led 1'er saniye aralıkla açık ve kapalı konumda oluyor.

Bağlantı şekli ise aşağıdaki gibidir.


from pyA20.gpio import gpio
from pyA20.gpio import port

gpio.init()


gpio.setcfg(port.PC4, gpio.OUTPUT)
gpio.setcfg(port.PC7, gpio.INPUT)

gpio.pullup(port.PC7, 0) #Pullup'ları temizler.
gpio.pullup(port.PC7, gpio.PULLDOWN) #PC7 pini için Pulldown'u aktif eder.

while True:
        if gpio.input(port.PC7) == 1:
         gpio.output(port.PC4, gpio.HIGH)
        else:
         gpio.output(port.PC4,gpio.LOW)

Yukarıda program ise buton kontrollü bir led programı. Butona bastığımızda led yanıyor. Burada "Pulldown" ve "input" metotlarını kullandık. Pin adlandırılmasında da yine port kütüphanesini kullandık.

Bağlantı şekli ise aşağıdaki gibidir. Neden pull-down drenci kullandığımızı burada açıklamıştık.



Python gpio ile ilgili işlemleri sizlere sade ve anlaşılır bir biçimde anlatmaya çalıştık. Gerek gördükçe görsellerle bunu destekledik. Yazıda anlaşılmayan veya yanlış olduğunu düşündüğünüz kısımları iletişim adreslerinden bizlere bildirebilir ve öğretici yazıların daha kaliteli olması için destek verebilirsiniz. Python ile alakalı sonraki yazılarda Python ile haberleşme portlarının ve sensörlerin kullanımından bahsedeceğiz. Herkese iyi çalışmalar.

Hiç yorum yok:

Yorum Gönder

Öne Çıkan Yayın

ORANGE PI PYTHON UART

ORANGE PI PYTHON UART Python kurulum  yazısında Orange pi'de Python konusuna giriş yapmıştık. Daha sonra  Python Gpio  yazısında gir...