26 Haziran 2019 Çarşamba

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 giriş çıkış pinlerini konuştuk. Bu yazımızda Python dilini kullanarak Orange pi ile bir cihaz arasında nasıl haberleşme kuracağımız konusuna giriş yapacağız.

Uart(Evrensel Asenkron Alıcı-Verici); verici tarafta paralelden seriye dönüştürme işlemi yapan, alıcı tarafta ise seriden paralele dönüştürme işlemi yapan bir IC(entegre devre) çipidir. Yani Uart, işlemci ve seri iletişim portu arasında köprü görevi gören bir donanımdır.

Eski bilgisayarlarda Uart kullanılarak fare, yazıcı ile iletişim kurulurdu. Günümüzde ise GPS alıcıları, Bluetooth modülleri, GSM ve GPRS modemlerinde UART kullanılmaktadır.

Uart bir asenkron seri iletişim şeklidir ve asenkron seri iletişim demek verilerin harici bir saat sinyalinden destek almadan aktarılması anlamına gelir. Bu yüzden Uart haberleşmede; "Baud hızı", "Veri bitleri yığını(asıl verinin taşındığı kısım)" ve "Senkronizasyon bitleri" önemlidir. 

Uart ve veri iletimi ile ilgili daha fazla bilgi için diğer blog sayfamızda bulunan aşağıdaki yazıları inceleyebilirsiniz.



Orange Pi ve Uart

Orange pi kartında da diğer bilgisayar ve elektronik kartlar gibi Uart entegre devresi bulunuyor. Orange pi modellerinin herbirinde aynı sayıda giriş/çıkış pini bulunmuyor. Zero modelinde 26 + 3 pin var. 3 pin diğer 26 pinden ayrı bir şekilde ve Uart haberleşme için kullanılır. Bunun dışında 26 pin içinde de 2 çift Uart pini bulunuyor. Bununla birlikte Zero'da toplam 3 çift Uart haberleşme pini mevcut.


Çoğu Orange pi modelinde ise 40 + 3 pin bulunur. 3 pin ayrı bir şekilde Uart için ayrılmıştır. 40 pini içinde de 3 çift Uart pini bulunuyor. Bununla birlikte toplam 4 çift Uart haberleşme pini bulunuyor.


Yüklemeler ve Ayarlamalar

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 Python ile seri haberleşme için gerekli olan "pyserial" kütüphanesini indirelim.

sudo python -m pip install pyserial


Daha sonra "armbianEnv.txt" dosyasını açarak Uart pinlerini aktif ediyoruz. Biz burada 38. ve 40. pin olan Uart1 pinlerini aktif etmek istiyoruz. Bunun için "overlays=uart1" satırını ekliyoruz ve daha sonra cihazı reboot ediyoruz.

Cihaz tekrar açıldıktan sonra Uart1 yani ttyS1'in aktif olup olmadığına bakıyoruz.

dmesg | grep tty



Komut satırına "python" yazarak serial kütüphanesini kullanıyoruz ve test ediyoruz.



Tüm bu işlemlerden sonra seri haberleşme için gerekli bağlantıyı yapıyoruz. Biz burada Orange pi ile bilgisayarı haberleştirmeye çalıştıracağız. Bu yüzden bilgisayara bağlanmak için bir "usb to ttl" modülü kullanıyoruz. "usb to ttl" modülün ttl kısmındaki pinleri Orange pi'ye aşağıdaki gibi bağlıyoruz.



Bilgisayar-aygıt yönetici-bağlantı noktasından bağlandığımız portu öğreniyoruz. Bu port Orange pi'den gönderdiğimiz verileri görmek için ihtiyaç duyduğumuz seri haberleşme arayüzünü kullanırken işimize yarayacak.


Python ve Uart

Python ile seri haberleşme uygulaması yapmak için pyserial kütüphanesini indirmiştik. Bu kütüphanenin bize sağladığı kod yapılarını görmek için pyserialdokümanını incelemek gerekiyor. Birkaç kod yapısını inceleyelim.

Gpio metotları

  • serial.Serial() : Seri haberleşme parametrelerini tanımlarız. Örneklerimizde sadece Uart portu ve Baud hızını tanımlayacağız fakat burada diğer haberleşme parametreleri de tanımlanabilir. Bunlar için yazının başında verdiğim linkleri veya pyserial dokümanını inceleyebilirsiniz. Ayrıca bu fonksiyonu genelde bir isme atayarak, daha sonra bu fonksiyonu kullanacağımız yerlerde kolaylık sağlıyoruz.

  • flushInput() : Her okuma ve yazma öncesi input tamponunu temizler.

  • write() : Seri bağlantı ile karşı tarafa veri göndermemizi sağlar. Buraya girilecek verinin byte olması gerekir. Bu yüzden veri yapıları arası dönüştürme fonksiyonları kullanırız.

  • read() : Seri bağlantı ile karşı taraftan veri okumamızı sağlar. Buradan okunacak veri byte formatındadır. Bu yüzden veri yapıları arası dönüştürme fonksiyonları kullanırız.


Uart Haberleşme Örnekler

İlk örneğimizde temel bir veri okuma ve yazma işlemi yapalım. Bilgisayardan aldığımız bir karakteri Orange pi tarafında bizim belirlediğimiz karakter ile karşılaştıralım ve bilgisayara durum mesajı yollayalım.



Yukarıdaki örnekte görebileceğiniz gibi bilgisayardan aldığımız karakterleri Orange pi tarafında "y" ve "n" karakteri ile karşılaştırarak bir sonuca vardık ve bunu bilgisayara bildirdik. Seri haberleşmede yazma ve okuma komutlarının byte veri döndürmesi dolayısıyla veri tipleri arasında dönüştürme işlemi yaptık.

Burada bir soruya daha cevap vermek istiyoruz. Biz bu programı Orange pi üzerinde çalıştırdığımızda, bilgisayar tarafında bu verileri nasıl göreceğiz ve nasıl veri girişi yapacağız? Bu durumlar için bilgisayarınıza indirebileceğiniz seri haberleşme arayüzü programları var. Putty programı da bu programlardan biri. Fakat biz genelde Hercules programını kullanıyoruz. Orange pi tarafında port kısmına nasıl "/dev/ttyS1" yazıyorsak, bilgisayarda Hercules port kısmına da aygıt yöneticisinde gördüğümüz portu yazıyoruz. Diğer seri haberleşme arayüz programları için aşağıdaki yazıya göz atabilirsiniz. Aşağıdaki yazıda buna daha geniş bir kapsamda değinmiştik.

Örnek kodlara dönecek olursak yukarıdaki örnegi, veri tipi dönüştürmelerini aşağıdaki şekilde ayarlayıp da yapabilirdik.


Bir diger örneğimizde ise hem seri haberleştirmeyi kullanalım hem de gpio pin işlemlerini kullanalım.



Yukarıdaki örnekte, bilgisayardan aldığımız veriye göre Orange pi üzerindeki pinlere bağlı ledi kontrol ediyoruz.



Bir diğer örneğimizde ise bir kontrol otomasyon örneği yapalım. Orange pi'ye bağlı olan bir lamba ve klimayı kontrol eden bir sistem kuralım.




Yukarıdaki örnekte "lambayak", "klimaac" ve "tumsondur" gibi komutları kullanarak, bilgisayardan girdiğimiz komuta göre Orange pi üzerindeki sistemi kontol ediyoruz.

Buradaki örnek kodlara github üzerinden erişebilirsiniz.

Python Uart haberleşme 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 i2c-spi portlarından ve sensörlerin kullanımından bahsedeceğiz. Herkese iyi çalışmalar.

Ö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...