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 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ükleme işlemleri için komut satırını kullanacağız.
İlk önce güncellemeleri yükleyelim.
Daha sonra Python ile seri haberleşme için gerekli olan "pyserial" kütüphanesini indirelim.
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.
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 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 pyserial dokümanını incelemek gerekiyor. Birkaç kod yapısını inceleyelim.
Gpio metotları
İ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.
Orange Pi ürünleri için yazılı ve görsel dökümanlar hazırlanmaktadır. Tamamlanan dökümanlara "Dökümanlar" sayfasından ulaşabilirsiniz.