OrangePi C ve Python İle LED Yakmak

Tek kart bilgisayarların iyice yaygınlaşması ve kullanım açısından oldukça verimli oldukları için tercih edilen geliştirme kartlarından biri olan OrangePi ile ilk adımlarından biri olan GPIO ile LED yakıyoruz. Karta doğrudan erişim sağlıyorsanız direk kodlama ve kütüphane kısmına geçebilirsiniz fakat karta fiziksel bir ekrandan erişim sağlayamıyorsanız, “OrangePi’ a Bağlanma” başlığıını dikkatle okumanızı tavsiye ediyorum. Bunun yanında Python ve C dilinin çalışması için kurulum ve ayarlamaları yapıyoruz. Fakat en başında ise kartımıza bağlantı işlemlerine göz atacağız. Sayfanın en alt kısmına doğru, terimler ve bazı işlevlerin açıklaması eklendı.

OrangePi Hazır Hale Getirme

Kartımız yeni aldığımız farz ederek rehberimize başlıyorum. Kartımızı kullanmak için öncelikle bir adet güç kablosu, bir adet işletim sistemi kurulmuş sd-kart ve bir adet internet yada veri bağlantısını sağlayacak kabloya ihtiyacımız var örnek olarak; ethernet kablosu, wi-fi adaptörü, USB-TO-TTL kablosu kullanbiliriz. Modeme olan uzaklığımdan dolayı ben bağlantılarımı Wi-Fi adaptörü ile sağladım, siz durumunuz ve istediğize göre hareket edebilirsiniz. Bunun yanında bu yöntemler dışında doğrudan kartınızı bir ekrana, klavyeye ve fareye bağlayabilirsiniz. Ben kartımda işletim sistemi olarak “Armbian” kullandım, uyumluluk ve kullanış açısından sizlere de öneriyorum. Bunun yanında alternatif olarak OrangePi için hazırlanmış Raspian OS‘ da kullanabilirsiniz.

Kullandığım Kartın Fiziksel Hali

orangepi, OrangePi C ve Python İle LED Yakmak

OrangePi 'a Bağlanma

Yukarıda belirtiğim gibi, ben wi-fi adaptörü aracılığı ile kartıma bağlantıları sağladım. Bağlantı için kartın modem yada sanal modem tarafından hangi IP adresini aldığını tespit etmemiz gerekiyor, bunun için;

Bazı Programlarda Kullandığım Kartın Aldığı Farklı IP Adresleri Sizi Şaşırtmasın, Farklı Zamanlarda Yaptığım İçin Farklılık Gösterdi.

Doğrudan Karttan Kontrol Ederek

Kartımız üzerinden kontrol etmek için, terminale erişmemiz gerekiyor. Terminali açmak için “CTRL+ALT+T” kombinasyonunu kullanabilirsiniz, yada doğrudan açabilirsiniz. Terminal ekranı karşımıza gelince, eğer wi-fi üzerinden bağlantı kurmuşsak “iwconfig” eğer ethernet üzerinden kablolu bağlantı kurmuşsak “ifconfig” komutunu yazıp gelen ekranda modem tarafından atanan IP adresimizi öğreniyoruz.

orangepi, OrangePi C ve Python İle LED Yakmak

Modem Arayüzü Aracılığı İle

Bir çok modemin arayüz adresi “192.168.1.1” olarak atanmıştır, fakat sizin modeminizin modeline göre bu giriş adresi değişiklik gösterebilir. Doğru adresi bulmak için modeminizin arka tarafında bulunan etiketi okuyabilirsiniz ya da bağlantı kurduğunuz cihazın bağlantı ayarlarında “Varsayılan Ağ Geçidi” kısmından da ulaşabilirsiniz. Bunun yanında giriş yapmak için arayüz kullanıcı adı ve şifresi gerekecektir, bu iki bilgi genelde “admin” “admin” olarak hazır gelmektedir fakat bunu da kontrol etmekte fayda olacaktır. Bazı modemlerin arayüze girememe problemini çözmek için, modemi tekrardan başlatabilirsiniz yada doğrudan fabrika ayalarına dönebilirsiniz, fakat unutmayın bunun sonucunda tekrara servis sağlayıcısı tarafından size verilen bilgileri girmeniz gerekecektir.

orangepi, OrangePi C ve Python İle LED Yakmak

Farklı Bir Cihazdan IP Mesafe Taraması Yaparak

Modem arayüzü ya da doğrudan kartımızdan görüntü alma şansınız yoksa, bu yöntemi kullanabilirsiniz. Herhangi bir ağ tarama programı işiniz görecektir. Ben bu esnada “net-scan” isimli yazılımı kullanarak kartımın aldığı IP adresini buldum.

orangepi, OrangePi C ve Python İle LED Yakmak

PuTTY İle

PuTTYSSH/Telnet yapısı kullanarak uzaktaki ya da aynı ağdaki suncunuza/makinenize bağlanmak için kullanılan açık kaynak kodlu, basit arayüze sahip bir yazılımdır. Kartımızın almış olduğu IP adresini tespit ettikten sonra, PuTTY aracılığı ile ilk bağlantımızı sağlayacağız. IP adresini doğru yazdığınıza ve varsayılan olarak gelen 22 portunu kullandığınza emin olun, aksi taktirde bağlantı kuramazsınız.

orangepi, OrangePi C ve Python İle LED Yakmak

Bağlantılarınız ve giriş bilgileriniz doğru ise “Open” butonundan sonra sizi karşılayacak olan ekran bu şekilde bir hata mesajıdır. Güvenlik önlemi olarak çıkan bu mesaja “Evet” diyerek sorunsuz bir şekilde devam edebilirsiniz. İlerleyen yazılarımızda bu hata mesajını almamak için, “parmak izi”  önbellekleme yapacağız, bunun yanında “puttygen” ile doğrudan bağlantılar kuracağız.

orangepi, OrangePi C ve Python İle LED Yakmak

PuTTY aracılığı ile karşımıza gelen terminalde kartımızın giriş bilgilerini girmemiz gerekecek. Ben root hesabını kulladığım için “root” olarak giriş yapıyorum ve şifreyide önceden belirlediğim için belirlediğim şifreyle giriyorum.Şifreniz yazarken boşluk olarak gözüksede, merak etmeyin yazıyorsunuz! Türkçe klavye ve Türkçe harfler içieren şifrenizi girerken doğru yazdığınızdan emin olun. Sizler belirlediğiniz kullanıcı hesabı ile giriş yapabilirsiniz, eğer herhangi bir kullanıcı oluşturmadıysanız, sizde “root” hesabını kullanabilirsiniz. Sürümden sürüme değişiklik gösterse de, genel olarak ilk root şifreleri; “root” , “toor” , “1234” olarak gelmektedir. Bunun yanında eğer ne yaptığınızın farkında değilseniz root hesabına giriş yaptıksan sonra, yeni bir kullanıcı oluşturmakta fayda olacaktır. Root hesabının yüksek erişim kapasitesi ile kartınızda bilmediğiniz, problemlere ve sorunlara yol açabilirsiniz.

orangepi, OrangePi C ve Python İle LED Yakmak

Şifreyi girdikten sonra;

orangepi, OrangePi C ve Python İle LED Yakmak

PuTTY ile başarılı bir şekilde bağlantımızı kurduk.

Windows CMD (Komut İstemi) İle

Windows ile birlikte gelen yerleşik SSH özelliği ile doğrudan SSH bağlantısı kurabilirsiniz. “SSH” komutu ile kullanabileceğiz parametreler ve bilgiler karşınıza çıkacaktır. Bağlantı için kullanmanız gereken kod ise; “ssh [email protected]_ip_adresi” gerekli yerleri kendi kartıma göre doldurduğumda “ssh [email protected]” ortaya çıkmış oldu. 

orangepi, OrangePi C ve Python İle LED Yakmak

Enter ile gönderdiğimiz kodumuzun sonucunda bizleri giriş ekranı karşılamış olacak. Kullanıcı adını önceden belirttiğimiz için sadece şifre girmemizi isteyecek, önceden belirlediğimiz şifre ile girişimizi başarılı ile gerçekleştirmiş olduk. Bazı kartl ve işletim sistemlerinde doğrudan bir kullanıcı hesabı ve şifresi oluşturmayabiliyor fakat ilk SSH bağlantısında sizlere bu kullanıcıyı oluşturmaya şans tanıyor.

orangepi, OrangePi C ve Python İle LED Yakmak

Kütüphane Yüklemeleri ve Güncellemeler

Neredeyse her yerde karşımıza çıkan kütüphaneler yani kod grupları bu projede GPIO işlemleri için gerekli. Python ve C için ayrı kütüphanelerin olduğunu belirtmek isterim, siz hangisini arzu ederseniz kullanabilirsiniz. Önerim her iki kütüphaneye de sahip ve hakim olmanızdır. Python’un olmadığı yeri C ile C’nin olmadığı yeri Python ile kapatacağınızı unutmayın.
sudo apt-get update && sudo apt-get
Bu satırımız ile kartımızı güncelliyoruz.
sudo apt-get install git git-core
Bu satırımızda ise sıkça kullanacağımız “git” betiğini ediniyoruzi çoğu sistemde kurulu olarak geliyor. Kısacası GitHub’tan veri çekmek için kullanacağız.

C Kütüphanesi

OrangePi Mini Modeli için:
git clone https://github.com/orangepi-xunlong/WiringOP -b orangepimini
Diğer OrangePi Modelleri için:
git clone https://github.com/orangepi-xunlong/WiringOP -b orangepi
C kütüphanesini indirdikten sonra kurulum işlemlerine geçiyoruz.İnen dizinin içine gelen dosyayı yolunu açıyoruz:
cd WiringOP
Kur betiğine yetki veriyoruz:
chmod +x ./build
Kurulum betiğini çalıştırıyoruz:
sudo ./build
Buraya kadar bir hata almadıysak , pinleri kontrol ediyoruz. Herhangi bir hata ile karşılaşmanız durumunda lütfen yorum kısmından yada, iletişim yoluyla bizlere ulaşın;
gpio readall
 
orangepi, OrangePi C ve Python İle LED Yakmak

C Kodumuz

Kodumuzu herhangi yazı modülünde yazabiliriz yada hazır olarak kullanabiliriz ben bu kod için nano kullandım.
nano blink.c
Bu betik ile “nano.c” isminde bir dosya oluşturduk. Karşımıza gelen komut ekranına kodumuzu yazıyoruz.
#include
int main (void)
{
wiringPiSetup () ;
pinMode (0, OUTPUT) ;
for (;;)
{
digitalWrite (0, HIGH) ; delay (500);
digitalWrite (9, LOW) ; delay (500);
digitalWrite (0, HIGH) ; delay (500);
digitalWrite (9, LOW) ; delay (500);
}
return 0 ;
}
Yazdığımız pencereyi “CTRL+X” devamında “y” İle Kaydediyoruz.Kodumuzu compile etmek için;
gcc -Wall -o blink blinkk.c -lwiringPi -lpthread
Test etmek için;
sudo ./blink
orangepi, OrangePi C ve Python İle LED Yakmak

Başarılı bir şekilde ilk kodumuzu compile ettik ve çalıştırdık.

Python Kütüphanesi

Python; genel amaçlı, nesneye yönelik, kolay okunabilir ve anlaşılabilen bir programlama dilidir. OrangePi ile birlikte kullanım alanı çok geniştir. Python’ı kullanarak ister görevler oluşturun ister Orange pi pinlerini kontrol edin ister algoritmalar oluşturup işlemler yapın. C diline ne kadar hakim olursanız olun Ptyhon’u OrangePi kullanırken es geçemezsiniz.

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

Dosya yolumuzu açıyoruz;

cd orangepi_PC_gpio_pyH3

Kurulumu yapıyoruz;

sudo python setup.py install

Bu betiğin çalışmaması durumunda CHMOD ile izin vermeyi deneyin, yüksek ihtimalle sorun çözülecektir. Bunun yanında bu kodda Python3 kullanılmıştır.

Python Kodumuz

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

gpio.init()

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

while True:
gpio.output(led, gpio.HIGH)
sleep(1)
gpio.output(led,gpio.LOW)
sleep(1)

Devre Şeması ve GPIO Pinleri

Kullandığınız kart modeline göre GPIO Pinleri farklılık gösterebilir bu yüzden, kartınızın dökümantasyonu mutlaka inceleyin, aşağıda OrangePi PC için şema ve pin dağılımını paylaştım.

orangepi, OrangePi C ve Python İle LED Yakmak
orangepi, OrangePi C ve Python İle LED Yakmak

Potansiyel Hatalar

[email protected]:~/WiringOP/examples$ gcc -o blink blink.c -lwiringPi
//usr/local/lib/libwiringPi.so: undefined reference to `pthread_join'
//usr/local/lib/libwiringPi.so: undefined reference to `pthread_create'
//usr/local/lib/libwiringPi.so: undefined reference to `pthread_cancel'
collect2: error: ld returned 1 exit status

Gibi bir hata alırsanız “gcc” yani compile etme kodunuza “-lpthread” betiğini eklemeyi deneyin yada doğru yazdığınızdan emin olun.

Python ile ilgili problemler genelde yanlış versiyon kurmaktan kaynaklanız ayrıcai aynı and iki farklı versiyonun olması karışıklık ve çakışmalara neden olacaktır. Bu yüzden tek bir versiyonda kalmanızda fayda var.

Terimler ve Sayfa Sözlüğü

GCC: Gnu C Compiler tarafından üretilmiş açık kaynak kodlu, ücretsiz bir compile etme betiğidir, C ve C++ ile yazılmış bir çok programın temelinde vardır.

GPIO: Genel amaçlı giriş ve çıkış pinleridir. 

Sanal Modem: Fiziksel bir modeminiz yoksa, ethernet kablosu aracılığı ile doğrudan kartınızı bilgisayara bağlayabilirsiniz. Ya da sanal wi-fi ağı kurarak bağlanabilirsiniz, iki koşulda da işlemleri sorunsuz şekilde halledebilirsiniz. İnternet bağlantısı yoksa sadece güncellemeleri ve gerekli kütüphaneleri indiremezsiniz.

Net-Scan: Herhangi bir ağ tarama programı kullanabilirsiniz. Ücretsiz ve güvenilir bir kaynaktan indirdiğinize emin olun.

Telnet: TCP/IP protokollerinden biridir. Türkçeye iletişim ağı olarak çevirebiliriz. Şifreleme olmadan text bazında iletişim kurduğu için genelde uzak mesafeler için pek tercih edilmez. Günümüzde sadece aynı ağ üzerinde sunucu çiftliklerinde kullanılır. Varsayılan port olarak 23’ü kullanır.

Root: Bir çok yerde karşımıza çıkan “root” kelimesi aslında kök dizine erişebilen anlamına gelmektedir. Yani bütün yetkilere sahip kullanıcı hesabı. 

SSH Bağlantısı: SSH Telnet gibi hazırlanmış şifreli bağlatı için kullanılan protokoldür. Varsayılan olarak 22. port’u kullanır. İletişimin şifreli olarak ilerlemesinden dolayı oldukça tercih edilir ve günümüzde en çok kullanılan iletişim prokollerinden biri olmuştur. İlk başlarda Telnet’in alternatifi olarak çıksada. Şuan oldukça kullanılan bir iletişim protokülüdür.