27 Haziran 2018 Çarşamba

ORANGE PI CHMOD VE DOSYA İZİNLERİ

Chmod - Dosya İzinleri ve C dosyası oluşturma

Chmod komutu, dosya ve dizin izinlerini değiştirmek için kullanılır. Linux ve diğer Unix işletim sistemlerinde her bir dosyanın, dosyaya kimlerin erişebileceği ve nasıl erişebileceklerini tanımlayan bir dizi kural vardır. Bu kurallara dayanarak izinleri "change mod" kelimelerinden türetilen chmod komutu ile ayarlarız.

chmod [izinler] [dosya_adı]

Chmod komutunu kullanmadan önce dosya erişimi ile alakalı birkaç konuyu bilmeliyiz.

Genel olarak 3 tür kullanıcı sınıfı vardır. Tüm kullanıcılar için ise "all" diyebiliriz. 
  • Dosyanın sahibi olan kullanıcı -> user - u
  • Dosyanın tanımlı sahip grubu -> group - g
  • Geri kalan herkes -> other - o
  • Tüm kullanıcılar için  -> all - a
Daha sonra bu kullanıcı türlerinden her birinin dosya veya dizine 3 farklı erişimi vardır.
  • Read -> Dosya içeriğine bakma - r
  • Write -> Dosya içeriğini değiştirme - w
  • Execute -> Dosyayı bir program gibi çalıştırma - x
Bu izinleri birbirine atarken "+", "-", ve "=" sembolleri ile atama yaparız. Bunu örneklerle açıklayalım.
  • "+" -> Belirtilen dosya sınıfları için belirtilen dosya izinlerinin etkinleştirilmesini sağlar. u+x demek diğer izinlere dokunmadan çalıştırma iznini etkinleştiriyoruz demektir.
  • "-" ->Belirtilen dosya sınıfları için belirtilen dosya izinlerinin devre dışı olmasını sağlar. u-x demek diğer izinlere dokunmadan çalıştırma iznini devre dışı bırakıyoruz demektir.
  • "=" Burada belirtilen kullanıcı için belirtilen izni etkinleştirir diğer izinleri ise devre dışı bırakır. u=x demek user kullanıcısı için çalıştırma iznini aktifleştirir ve okuma ve yazma iznini devre dışı bırakıyor demektir. Burada "=" sembolü kullanırsak belirtilen izinler dışındaki izinlerin devre dışı bırakılacağına dikkat edin.

İzinleri iki şekilde gösterebiliriz..

1-) Alfanümerik karakterlerle
Yukarıda belirttiğim harf şeklindeki karakterleri kullanarak gösterebiliriz. Örneğin;

  • a+rwx->tüm kullanıcılara  tüm izinleri verdiğini
                           
  •  a+rx ->tüm kullanıcılara okuma ve çalıştırma iznini verdiğini 
                         
  • u-x -> user kullanıcısı için çalıştırma iznini iptal ettiğini 
                           

  • o=r ->diğer kullanıcısı  için okumanın etkinleştirildiğini ve yazma ile çalıştırma izinin yasaklandığını gösterir.
                           


2-) Sekizlik tabandaki sayılarla

Burada r=4 , w=2 , x=1 değerine gelir ve izin atarken bu değerler kullanılır. Burada 3 basamak birden kullanılır ve ilk basamak user, ikinci basamak group, üçüncü basamak ise other kullanıcıları için izinleri belirtir. Bir kullanıcı için tüm izinleri vermek için  4+2+1=7 'den  dolayı 7' yi kullanırız. Yukarıdaki örneklerin aynısını bir de bu şekilde gösterelim ve daha iyi anlamaya çalışalım. Tabi


  • 777 -> tüm kullanıcılar için tüm izinleri aktif ettiğini 
  • +555 ->tüm kullanıcılara okuma ve çalıştırma iznini verdiğini 
                       
  • -100 ->user kullanıcısı için çalıştırma iznini iptal ettiğini
                       

  • +004 >diğer kullanıcısı  için okumanın etkinleştirildiğini ve yazma ile çalıştırma izinin yasaklandığını gösterir.
Burada bir şeye dikkat çekmek istiyorum. "+" ve "-" sembollerini kullandığımızda sadece belirtilen izin kadar ekleme veya çıkarma yapıyor. "-100" dediğimizde bu demek oluyor ki user kullanıcısı için çalıştırma iznini iptal et diğer izinlere dokunma, group kullanıcısı için hiçbir izne dokunma ve aynı şekilde other kullanıcısı içinde hiçbir izne dokunma anlamına geliyor. Hemen  bir örnekle buna bakalım.
  • +164 -> user kullanıcısı için çalıştırma iznini etkinleştir diğer izinlere dokunma("+" sembolü olduğu için verilen izinleri etkinleştirip geri kalan izinlere dokunmuyoruz), group kullanıcısı için 4+2'den okuma ve yazma iznini etkinleştir geri kalan izne dokunma ve son olarak da other kullanıcısı için yazma iznini etkinleştir geri kalan izinlere dokunma demek oluyor.
                      

  • 164 -> Bu kullanım direk atamadır. "=" sembolü ile işlevleri benzerdir. Bu ifade user kullanıcısı için çalıştırma iznini etkinleştirip okuma ve yazma iznini iptal ediyor, group kullanıcısı için yazma ve çalıştırma iznini etkinleştirip yazma iznini iptal ediyor ve son olarak da other kullanıcısı için okuma iznini etkinleştirip yazma ve çalıştırma iznini iptal ediyor.
                      


Linux' da varsayılan izinler bir dosya için 666, bir dizin için ise 777' dir. Fakat "umask" var ise bu izinler maskelenebilir.

Örnekler

Hiç bir izni olmaya file1, file2, file3 dosyaları üzerinden birkaç örnek yapalım.

  • chmod  +x file1 =>file1 dosyası için tüm kullanıcılara çalıştırma izni verecek. Diğer izinlere dokunulmayacak.
  • chmod 656 file2 =>file2 dosyası için user kullanıcısının 4(read)+2(write)=6' dan okuma ve yazma izni olacak fakat çalıştırma izni olmayacak, group kullanıcısının 4(read)+1(execute) =5' den okuma ve çalıştırma izni olacak fakat yazma izni olmayacak,  other kullanıcısının 4(read)+2(write)=6' dan okuma ve yazma izni olacak fakat çalıştırma izni olmayacak.

  • chmod u+rx file3 => file 3 dosyası için user kullanıcısına okuma ve çalıştırma izni verilecek. Diğer izinlere dokunulmayacak

ls -l ile dosyaları izinle birlikte listelediğimizde, "-rw-r-xrw- 1 admin admin 0 Jun 26 14:31 file2" şeklinde gözükür.
  • Burada ilk baştaki bölüm dosya mı dizin mi olduğunu belirtir. Eğer dosya ise "-", dizin ise "d" olur.
  • Daha sonraki kısımlar sırasıyla user, group ve other kullanıcıları için "rwx(okuma,yazma,çalıştırma)" izinleridir. Etkinleştirilmemiş herhangi bir izin için "-" işareti konulur. user kısmına bakacak olursak "rw-" demek okuma ve yazma ve çalıştırma izni yok demektir.
  •  Daha sonraki "1" bağlantı sayısını gösterir.
  • Sonraki "admin admin" kısmı dosya sahibini ve bağlı olduğu grubu gösterir.
  • Bir sonraki  "0" dosya boyutunu gösterir.
  • "Jun 26 14:31" kısmı son değiştirilme tarihini gösterir.
chmod  -R 755 dizin/   Komutu dizin altındaki bütün dosyalarının izinlerini ayarlar.



chmod --reference =file2 file1 komutu file2' nin izinlerini file1 için de ayarlar.


Umask

Sistemin dosya modunu  oluşturma maskesinin değeri döndürür veya bir değer ayarlar. Linux , Unix benzeri işletim sistemlerinde yeni dosyalar varsayılan izinlerle oluşturulur. Yukarıda dosya için 666 demiştim. Umask ile yeni dosya oluşturulurken  maske izinleri uygulayarak bu dosyanın izinleri kısıtlanabilir.

Umask komutu  bu maskeyi ayarlamak için veya o anki değerini göstermek için kullanılır.

Umask varsayılan değeri 0002' dir. Burada ilk baştaki 0 bizim için anlamsızdır. Sonraki basamaklar ise sırasıyla u,g,o kullanıcılarını temsil eder.

Bu demek oluyor ki bir dosya oluşturulduğunda varsayılan izni 666 demiştik. Fakat 002' lik bir maske uygulandığına göre, yani kısıtlama olduğuna göre 666-002 = 664' lük bir izne sahip olacaktır. Bunu alfanümerik karakterlerle gösterirsek "rw-rw-r--" olur.

Umask

Umask -S

Umask 022 -> bir maske değeri ayarlanır ve dosyalar bu maskedeki izinler kısıtlanarak oluşturulur.



Burada varsayılan umask değerinin 0002 olduğunu gördük. Daha sonra umask değerini 0022' ye ayarladık. Her iki durumda da oluşturduğumuz dosyalara bakarsak  maske işlemi rahatça anlaşılıyor.

Umask değerini daha spesifik şekilde ayarlayabiliriz. Örneğin

umask u=rw, go=  komutunu yazarsak bu demek oluyor ki yeni oluşturduğumuz dosyada user için okuma ve yazma izinleri olsun, diğer kullanıcılarda ise hiçbir izin olmasın demek oluyor. 


umask -S komutundan yeni oluşturulacak dosyada  hangi izinlerin olacağına bakabilirsiniz. Aşağıdaki resme bakarak daha detaylı görebilirsiniz.

                           


C kütüphanesi kurulumu ve C dosyası oluşturma


Bizim c kütüphanesini kurmak için build dosyasını çalıştırmamız gerekir fakat yukarıdaki fotoğrafa baktığımızda build dosyasının çalıştırma izni yok. Bu yüzden build dosyasına çalıştırma izni vermemiz gerekiyor.

chmod +x ./build veya chmod +x build diyerek çalıştırma izni veririz.

WiringOP kütüphanesini kurduk ve artık bir c dosyası oluşturup kodumuzu yazıp çalıştırmak istiyoruz. Bunun için touch komutu veya nano komutunu kullanarak yeni bir dosya oluşturmamız lazım. Burada da izin konusunu bilmek gerekiyor. Şimdi aşağıda birkaç farklı şekilde c dosyası oluşturduğumuzda ne gibi durumlarla karşılaşırız ona bakalım.


  • touch komutu ile bir c dosyası oluşturalım ve daha sonrasında yeni oluşturduğumuz dosyanın izinlerine bakalım. Bu izinler varsayılan izinler olacaktır. Yukarıda anlattığım umask konusuna bakarak bu durumu kendimiz de ayarlayabiliriz. İzinlere baktıktan sonra eğer yoksa çalıştırma izni verelim.


  • Bu sefer nano komutu ile bir c dosyası oluşturalım ve aynı şekilde bu dosyanın izinlerine bakalım. Burada izinlere baktığımızda görüyoruz ki dosya sahibi admin. Ayrıca user ve group kullanıcıları için okuma yazma izni etkinleştirilmiş durumda.


  • Bu sefer yine nano komutu ile bir dosya oluşturulacak fakat sudo ile yani root yetkisi ile oluşturacağız bu dosyayı. Burada da göreceğiz ki dosya sahibi root. Ayrıca okuma izni tüm kullanıcılar için etkin fakat yazma izni sadece root kullanıcısı için etkin. Yani siz dosyayı sudo nano dosya_adı yerine nano dosya_adı komutu ile açar ve bu dosyaya bir şeyler yazamazsınız. Yani dosyayı değiştirmeye iznini yoktur. Aşağıdaki fotoğrafa bakarak verilen hatayı görebiliriz.





Okuduğunuz için teşekkür ederim. Aklınıza takılan bir soru veya karşılaştığınız bir sorun olduğunda yorumlarda belirtebilirsiniz. Burada eksik olarak anlattığımı düşündüğünüz veya sizlerin gerekli olarak gördüğünüz bilgileri yine yorumlarda yazarsanız, bundan herkesin faydalanmasını sağlamış olursunuz. Herkese iyi çalışmalar.








22 Haziran 2018 Cuma

ORANGE PI C PROGRAM INTERRUPT VE TRAFIK IŞIĞI UYGULAMASI

Orange pi İnterrupt(Kesme) ve Trafik Işığı Uygulaması

Daha önceki yazılarımızda C ile blink uygulaması ve buton ile led kontrolü üzerine bir uygulama yaptık. Blink uygulaması ile basit bir şekilde kod yapısına baktık ve bir gpio portuna dijital olarak bir değer verdik. Buton ile kontrol ederken ise bir gpio portundan dijital bir değer okuduk ve bu değeri koşullandırarak başka bir gpio portuna lojik bir değer atadık.

Bu yazımızda C programlamada interrupt(kesme) kavramını işleyeceğiz  ve şuana kadar öğrendiklerimizin yanında interrupt işlemi  kullanarak trafik ışığı uygulaması yapacağız. Bu uygulamada kesmeyi, yayaların bastığı buton ile trafik ışığının araçlar için kırmızı olması için kullanacağız. Ayrıca kod yapısında da bir değişikliğe gidip main fonksiyonu dışında fonksiyonlar oluşturacağız. Bu da kodun daha kolay anlaşılmasını sağlayacak.

İnterrupt nasıl uygulanır?

wiringPiISR(pin , edge type , void(*function(void))

Bu ifade main bloğunda wiringPiSetup() satırından hemen sonra tanımlanır.Bu ifade de "pin" bizim kesmeyi takip edeceğimizi pin no ' yu gösterir, "edge type"ise  INT_EDGE_FALLING , INT_EDGE_RISING , INT_EDGE_BOTH olabilir ve bu ifadeler sırasıyla kenar düşümünde, kenar yükselirken, her iki kenar değişiminde kesme oluşturması anlamına gelir. Bu kesmeler oluştuğunda programın bir şeyler yürütmesi için yapılacakların olduğu bir kesme fonksiyonuna ihtiyaç vardır. "Void" kısmına kesme fonksiyonunu yazarız.

wiringPiISR(1, INT_EDGE_RISING ,&kesme ); gibi bir kesme tanımlanırsa 

void kesme(){
printf("Kesme gerçekleşti");

}

gibi bir fonksiyon tanımı olabilir.

Kesmeler ile ilgili daha detaylı bilgi için  http://wiringpi.com/reference/priority-interrupts-and-threads/ sitesini ziyaret edebilir veya wiringOP kütüphanesini kurduğumuzda oluşan wiringOP/examples dizine girip oradaki isr.c örnek programını inceleyebilirsiniz.



Şimdi kodumuza bakalım. Burada programı çalıştırdığımızda kod  main bloğundan işlenmeye başlar. Burada gpio 7. pinden alınan değer  her yükselen kenar olduğunda , yani butona her bastığımızda bir kesme oluşturması için wiringPiISR(7, INT_EDGE_RISING ,&myInterrupt0) kodunu yazdık. Daha sonra KIRMIZI , YESIL  ve SARI ismini verdiğimiz pinleri çıkış olarak ayarladık. Sonrasında ise sonsuz bir for döngüsünde yesil() ve kırmızı() adlı fonksiyonlarını çağırdık.

yesil() fonksiyonunda yeşil led yanıyor ve bu işlemden sonra 5 sn bekleme oluyor. Yani 5 saniyeliğine herhangi bir işlem yapılmıyor ve  yeşil led yanık kalıyor. Daha sonra burada if ile bir şart döngüsü var. Bu eğer kesme gelmiş ve kesme fonksiyonuna  gidilmiş, yeşil led sönüp kırmızı led yanmış ise kesmeden geldikten sonra tekrar sarı yanmasına gerek kalmaması için yapılmış bir şart döngüsüdür. Eğer kesme gelmemişse 1 sn sarı yanıp daha sonra yeşil ve sarı sönecek ve  daha sonra bu fonksiyondan çıkacaktır.

kırmızı() fonksiyonunda ise kırmızı led 5 sn boyunca  yanar. Daha sonra 1 sn kırmızı led ve  sarı led yanar. Sonrasında kırmızı ve sarı led söner ve fonksiyondan çıkılır.

Böylece 5 sn yeşil led ve bu sürenin bitiminde 1 saniye yeşil ve sarı led birlikte yanar. Sonrasında 5 sn kırmızı led ve bu sürenin bitiminde  1 saniye kırmızı ve sarı led  birlikte yanar. Böyle bir döngüde trafik ışığı işlevi görür. Eğer bir yaya butona basarsa kesme gelir ve trafik ışığı araçlar için  yeşilden kırmızıya döner.


Sorun: Burada çözemediğim bir sorun var. Bu konuda geri dönüşünüze  bekliyorum. Kesme işlemi olduğunda programın ana akışı duruyor ve kesme fonksiyonundaki işlemler yapılıyor. Kesme işlemindeki işlemler yapıldıktan sonra kesme fonksiyonundan çıkılıyor ve nerede kalındıysa oradan devam ediyor.
Burada sıkıntı şu. Diyelim ki yeşil led yandı ve 2 saniye sonra biz butona bastık. Burada kesme fonksiyonundaki işlemler olan yeşil ledin sönmesi ve kırmızı ledin yanması oldu. Bu işlemler olduktan sonra kod kaldığı yerden devam eder. Yani 5 saniyelik gecikmenin 2 saniyesi geçtiğinde sen kesmeye girdiğine göre kesme fonksiyonunda çıktığında geri kalan 3 saniye bekleme devam edecek. Bu yüzden kesme fonksiyonunda yanan kırmızı led 3 saniye boyunca yanık kalacak. Daha sonra yesil() fonksiyonundan çıkılacak. Kırmızı() fonksiyonuna geçilecek ve burada kırmızı led 5 sn boyunca açık kalacak. Kırmızı led toplamda 8 sn açık kalacak.  Yani kesme geldiğinden kırmızı led gerekenden fazla süre açık kalacak. Bu konu hakkındaki düşüncelerinizi orangepisersa@gmail.com' a atabilir veya yorumlara yazabilirsiniz.



Okuduğunuz için teşekkür ederim. Aklınıza takılan bir soru veya karşılaştığınız bir sorun olduğunda yorumlarda belirtebilirsiniz. Burada eksik olarak anlattığımı düşündüğünüz veya sizlerin gerekli olarak gördüğünüz bilgileri yine yorumlarda yazarsanız, bundan herkesin faydalanmasını sağlamış olursunuz. Herkese iyi çalışmalar.

21 Haziran 2018 Perşembe

ORANGE PI C++ BUTTON İLE LED KONTROLÜ

Orange Pi C++ Switch(Anahtar) ve Button(Buton) ile Led Kontrolü

Bu yazımızda hem switch hem de button ile bir anahtarlama yapacağız. Bir önceki yazımızda slide switch kullanımını görmüştük. Bu nedenle ilk baştan slide switch ile bir led kontrol devresi yapacağız. Daha sonrasında button un nasıl çalıştığından bahsedip button ile led kontrol devresi yapacağız.

Bu yazıda anlatacağım ilk uygulama için bir slide switch ve bir led kullanacağız. Slide switch in nasıl kullanıldığını ve led bağlarken neden dirence gerek duyduğumuzu daha önceki yazılarda görmüştük.


Devre çiziminde gördüğünüz gibi ledin artı ucunu direnç ile birlikte Orange pi üzerinde çıkış olarak ayarladığımız gpio 1. pine, eksi ucunu da toprağa bağladık. Switch in dıştaki bir bacağına 3.3 V diğer dış bacağına da GND pinlerini bağladık. Şimdi kodlara bakalım.


Koddaki işleyişe bakacak olursak;

  • 1. gpio pinine LED ismi veriyoruz, 7. gpio pinine BUTTON ismini veriyoruz.
  • LED pinini çıkış, BUTTON pinini giriş olarak ayarlıyoruz.
  • Eğer button açık konumda olursa led yanar , button kapalı konumda olursa lede 0(sıfır) lojik değeri gider yani sönük olur.

Kodumuzu bu şekilde yazdıktan sonra yazdığımız kodu;

sudo gcc -o proje_adı proje_adı.c -lwiringPi -lpthread ile derliyoruz,

sudo ./proje_adı diyerek çalıştırıyoruz.


Gördüğünüz gibi slide switch ile ledi aç kapa yapabiliyoruz. Şimdi aynı işlemi button ile yapacağız. Kodda bir değişiklik yapmayacağız. Çünkü buttona bastığımızda giriş pininden HIGH algılandığında yapılacak işlem  ile slide switch i on yaptığımızda giriş pininden HIGH algılandığında yapılacak işlem aynıdır. Bu yüzden kodda bir değişiklik yapmıyoruz. Sadece bağlantıları değiştireceğiz. Bağlantılara geçmeden önce bilmemiz gerekenlere bakalım.

Uygulamamızda 2 bacaklı button kullanacağız.





İlk olarak Pull-up ve Pull-down direnç ne anlama geliyor buna bakalım. Anlam olarak pull-up yukarı çekmek,  pull-down ise aşağı çekmek anlamına geliyor. Pull-up ve pull-down dirençler genel olarak mikrodenetleyicilerde veya  entegrelerde lojik değerler (0-1) arasındaki geçişi düzgün bir biçimde sağlamak ve kararsız durumları gidermek amacı ile kullanılır. Pull-up direnci Vcc tarafında , pull-down direnci ise GND tarafında kullanılır. Tabi bu dirençlerin kullanımı sizin buton veya switch konumunu nasıl anlamlandırdığınıza bağlı. Örneğin butona basılmamış iken mikrodenetleyiciye sıfır(0) gitsin istiyorsanız bir pull-down direnci kullanmalısınız ve devre şeklinizi ona göre ayarlamalısınız.


Dirençlerin neden gerekli olduğunu bir örnek ile açıklayacak olursak, örneğin pull-down direnci kullanmamız gerekiyor ama biz kullanmadık. Bu durumda butona basılmamışken veya anahtar açık konumda iken mikrodenetleyici pini direk toprağa bağlı olduğu için sıkıntı yok. Fakat butona bastığımızda VCC-GND arası bir kısa devre oluşacağından mikrodenetleyici pini kararsız değerler algılar. Normalde bir(1) algılaması gerekirken buton konumu aynı kaldığı halde sıfır(0) da algıyabilir bir(1) de.

Eğer bir  pull-down direnci kullanırsak butona basılmadığında pin pull-down direnci üzerinden bağlanır ve  pin sıfır(0) değerini algılar, butona basıldığında ise pin Vcc ile bağlı bağlanmış olur ve pin bir(1) değerini gösterir.

Daha önceden dirençleri ledlerle kullanıp akımı sınırladık, slide switch ile kullanıp hem ara konumlardaki kararsızlıkta mikrodenetleyicimizin olası bir zarar görme durumunu engelledik, button ile de direnç kullanarak(pull-up veya pull-down)  mikrodenetleyicinin 1' den 0' a veya 0'dan 1'e geçme durumundaki kararsızlığını engelledik.


Butonun bir ucunu VCC' ye bir ucunu da direnç ile birlikte GND' ye bağlıyoruz. Ayırıca direnç ile butonun bağlı olan ucunu Orange pi' de input olarak ayarladığımız pine bağlıyoruz.

Kodlar bu yazıda ilk anlattığım uygulama ile aynı. Bir değişiklik yapmıyoruz. Butonu gpio 7. pine ledi ise gpio 1. pine bağlıyoruz.



Daha sonra,

sudo gcc -o proje_adı proje_adı.c -lwiringPi -lpthread ile derliyoruz,

sudo ./proje_adı diyerek çalıştırıyoruz.



Okuduğunuz için teşekkür ederim. Aklınıza takılan bir soru veya karşılaştığınız bir sorun olduğunda yorumlarda belirtebilirsiniz. Burada eksik olarak anlattığımı düşündüğünüz veya sizlerin gerekli olarak gördüğünüz bilgileri yine yorumlarda yazarsanız, bundan herkesin faydalanmasını sağlamış olursunuz. Herkese iyi çalışmalar.

20 Haziran 2018 Çarşamba

ORANGE PI C++ PIN KONTROLU

C++  Komut satırından Pin Kontrolü

Bu yazımızda Orange Pi' de WiringOP kütüphanesini kullanarak giriş pin değerlerini okuyacağız ve  çıkış olarak ayarladığımız pinlere ise değer vereceğiz. 

Orange pi pinlerini analog giriş olarak kullanmak için MCP3208 gibi bir entegreye ihtiyacımız var. Diğer türlü Orange pi pinlerinden analog değer okuyamıyoruz. MCP3208 ile ilgili de ilerleye zamanlarda bir yazı paylaşacağım.

Slide switch
Bir sonraki yazımızda  inceleyeceğimiz buton ile led kontrolü uygulamasında  kullanacağımız slide switch e bakalım ve switch konumunu okuyalım.

Slide swich pin bacak bağlantıları


Anahtarın 3 bacağını yukarıdaki gibi bağladıktan sonra nasıl  bir konumda olacağına aşağıdaki resimlerden bakalım.

ON Durumu

OFF Durumu




ON durumunda iken gördüğünüz gibi Vcc' nin önünde iki yol var. Üst yolu kullanarak yoluna devam eder ve inputa(Orange pi giriş pini) bağlanır. Burada giriş pini HIGH yani 1 lojik değerini gösterir. Direnç üzerindeki gerilime bakacak olursanız da sıfırı gösterecektir.

OFF durumunda ise Vcc direnç üzerinden geçerek GND' ye ulaşır. Dolayısıyla input pini 0 lojik değerini gösterir. Direnç üzerindeki gerilime bakacak olursanız 3.3 V değerini göreceksiniz.

Peki burada direnç kullanmasak olur mu? Bu örnekte direnç kullanmasak da aynı sonucu alırdık fakat mikrodenetleyicinin switch ara konumda iken zarar görme ihitmaline karşılık burada yaklaşık 10 kohm  değerinde bir direnç kullanıyoruz.

Komut Satırından Pin Kontrolü

Komut satırında yazdığımız komutlarla birlikte bir C dosyası oluşturmadan led yakabilir veya buton, switch konumuna bakabilirsiniz.

gpio mode pin_no(wpi) output/input  => Belirtilen pini giriş veya çıkış pini yapar.

gpio read pin_no(wpi) => Belirtilen pinin lojik değerini okur.

gpio write pin_no(wpi) 0/1 => Belirtilen pine lojik bir değer verir.

Şimdi öğrendiklerimize örnekler üzerinden bakalım. Örneğim gpio 1 pinini(12. fiziksel pin) lede bağlayalım, gpio 7 pinini(7. fiziksel pin) switch bağlayalım. Led pinini çıkış , switch pinini de giriş yapalım.

gpio mode 1 output

gpio mode 7 input

Ledi yakmak istiyorsak;

gpio write 1 1 => led yanar

Switch konumunu öğrenmek istiyorsak;

gpio read 1 komutlarını yazarız.

Size wiringOP kütüphanesini ilk kurduğumuzda bir komuttan bahsetmiştim, gpio readall. Pinler üzerinde bir takım değişiklikler yaptıysanız , örneğin pini giriş olarak ayarladınızveya bir pini çıkış olarak ayarladınız daha sonra  ledi bağladınız ve o pine 1 atadınız fakat led yanmadı. O pinin son durumunu görmek için gpio readall komutunu kullanarak o an pinlerin durumunu görebiliriz.



Burada butonumuz ON konumunda  olsun ve 4. gpio portunu da 1 yapalım. Görüldüğü gibi 7. pinin giriş 1'inci ,  2.  ve 5. pinlerin çıkış olduğunu görebiliyoruz ve aynı zamanda 4. ve 7. pinlerdeki değerini 1 , 1. ve 5. pinlerdeki değerlerin 0 olduğunu görebiliyoruz.


Okuduğunuz için teşekkür ederim. Aklınıza takılan bir soru veya karşılaştığınız bir sorun olduğunda yorumlarda belirtebilirsiniz. Burada eksik olarak anlattığımı düşündüğünüz veya sizlerin gerekli olarak gördüğünüz bilgileri yine yorumlarda yazarsanız, bundan herkesin faydalanmasını sağlamış olursunuz. Herkese iyi çalışmalar.



19 Haziran 2018 Salı

ORANGE PI C++ PROGRAMLAMA

Orange Pi C++ Programlama

Bu tarz mini bilgisayarlar için en bilindik C++ kütüphanesi WiringPi' dir.  Bu kütüphaneyi yükleyerek pinleri kullanabiliriz. Ancak WiringPi Orange pi üzerinde tam anlamıysa çalışmaz. Bu yüzden bu kütüphanenin Orange pi' ye uyarlanmış olan halini kullanacağız. Buna da WiringOP kütüphanesi demişler. https://github.com/zhaolei/WiringOP linkinden WiringOP kütüphanesi kodlarına göz atabilirsiniz. Şimdi Orange pi' ye bu kütüphanenin nasıl kurulduğunu bakalım.

sudo git clone https://github.com/zhaolei/WiringOP.git -b h3 komutu ile dizini depodan çekelim.(Orange pi' ye indirelim.) 

WiringOP adlı bir klasör oluşturulmuş olacak. Bu klasörün için girip yüklemeyi başlatmamız için ilk önce yükleme dosyasını çalıştırma iznimizin olması lazım. Daha sonra yükleme işlemi başlatarak WiringOP kütüphanesini yüklemiş oluyoruz.

cd WiringOP

sudo chmod +x  ./build

sudo  ./build


Yükleme tamamlandığında gpio readall komutu ile pin detaylarını görebiliriz.





Görüldüğü üzere pinlerin birden fazla ismi var. Örneğin 7. fiziksel pin aynı zamanda 6. BCM pini ve 7.wPi oluyor. Biz kod içinde pin tanıtırken wPi üzerinden işlem yaparız.

Blink

Yazılımda ekrana "Merhaba Dünya" yazdırmanın elektronikteki karşılığı led yaktırmaktır. Bu yüzden geleneği devam ettirelim ve blink uygulaması yani ledin belli bir süre açık belli bir süre kapalı olduğu ve bunun sürekli devam ettiği uygulama ile başlangıç yapalım.

Burada biraz ledlerden bahsetmek istiyorum. Ledler hobi elektroniğinde sıkça kullanılan parçalardan biri ve ledler dirençlerle birlikte kullanılıyor. Bunun nedeni ise ledlerin çalışma aralıkları. Ledlerin renkten renge farklılık göstermekle beraber bir gerilimi vardır ve ortalama 10-30 mA arası bir akımda çalışabilmektedirler. Özellikle 25-30 mA aralığında  çoğu ledin  yüksek bir ışık verebilmesine rağmen ömrü düşecektir. Bu yüzden ledlerin ideal çalışma aralıkları aşağıdaki gibidir.

  • kırmızı 2 V 20 mA 
  • sarı 2 V 20 mA
  • yeşil 3 V 20 mA
  • mavi beyaz 2.2 V 30 mA
Şimdi gelelim direnç hesabına. Örneğin ben 5 V besleme ile yeşil bir led besleyeceğim. 

Direnç= (Besleme gerilimi- Led gerilimi) / Led üzerinden geçmesi gereken ideal akım

R = 5 V-3 V/20 mA = 100 ohm 

Güç = 5 V*20 mA = 0.10 watt 

Yani 100 ohm 0.10 watt bir direnç kullanabiliriz.






Kodumuza baktığımızda wiringPi 0 pinini kullan diyor fakat böyle bir pin yok. Bu yüzden biz wPi 1 numaralı pini yani 12. fiziksel pini kullanıyoruz.

Kodu inceleyecek olursak wPi 1 nolu pine Led ismi veriliyor ve bu pin çıkış olarak ayarlanıyor daha  sonra ekrana " Raspberry Pi blink " yazısı yazdırılıyor ve sonrasında asıl iş olan ledin bir yanıp bir sönmesi işlemi kodlarla ayarlanıyor. Led 500 ms yanık kalıyor 500 ms ise sönük kalıyor ve bu sonsuz döngü içinden tekrarlanıyor.


Devreyi de yukarıdaki şekilde kurduğumuza göre artık kodu derleyip çalıştırmamız gerek. Derleme için gcc derleyicisini kullanıyoruz. 

sudo gcc -o blink blink.c  -lwiringPi  -lpthread  komutu ile derliyoruz. Burada komutu kopyalamak yerine tekrardan elle yazmanızı öneririm. Bazen kopyala yapıştır yaptığımda her şey aynı olmasına rağmen hata alıyorum.

sudo ./blink  komutu ile kodumuzu çalıştırıyoruz.




Okuduğunuz için teşekkür ederim. Aklınıza takılan bir soru veya karşılaştığınız bir sorun olduğunda yorumlarda belirtebilirsiniz. Burada eksik olarak anlattığımı düşündüğünüz veya sizlerin gerekli olarak gördüğünüz bilgileri yine yorumlarda yazarsanız, bundan herkesin faydalanmasını sağlamış olursunuz. Herkese iyi çalışmalar.

Kaynakça:

18 Haziran 2018 Pazartesi

ORANGE PI YAYGIN OLARAK KULLANILAN KOMUTLAR

Orange Pi Yaygın Olarak Kullanılan Terminal Komutları

ls: Temel işlevi dizinde bulunan dosyaları listeler.


ls -a: Gizli dosya hariç tüm dosyaları listeler.


ls -F : Dosyalar ve alt dizinleri listeler.



ls -R : Geçerli dizinden başlayarak dizin zincirlerini listeler.



ls -l : Dosya ve dizini , büyüklüğü, değiştirilme tarih ve saatini, dosya ve klasör adını, dosyanın sahibini ve izinlerini listeler.


ls -lS : ls  -l' den farklı olarak dosya boyutunun büyüklüğüne göre sıralayıp listeler.


ls -lt : ls -l' den farklı olarak tarih sıralamasına göre listeler.





ls / : Root dizinini listeler.



ls .. : Bir üst dizini listeler.



pwd : Geçerli dizini gösterir.




mkdir : Yeni bir dizin oluşturur. Bir komutla birden fazla dizin de oluşturabilirsiniz.







mkdir -p : Alt alta dizin de oluşturabilirsiniz.





touch : Bu komut ile dosya oluşturabilirsiniz.




nano : Nano editörü ile dosya oluşturabilirsiniz.






rmdir : Boş dizini siler.




rm -r : Dizindeki dosyayı , alt dizinleri  ve dizinleri siler.



rm : Bir dizindeki dosyayı siler. 




ps : Hesabınızda çalışan aktif işlemleri listeler.



kill -9 porecess(pid) :  Hesabınızda çalışan aktif işlemleri  sonlandırır.



mv eski_isim yeni_isim : Dosya ismini değiştirir.




cat : Dosya içeriğini gösterir.




cp : Dosyayı kopyalar.


cd dizin : Hedef dizine geçer.

cd ..  : Bir üst dizine geçer.

cd - : Bir önceki dizine geri geçer.

cd  : En üst dizine geçer.



find  -name  "deneme" : İsmi deneme olan dizini bulur.





find -name "*dene*" : İsmi içinde dene kelimesi geçen dizini bulur.




history : Son kullanılan komutları gösterir.

history 40 : Son 40 komutu gösterir.




date : İşletim sistemi saat ve tarih bilgilerini gösterir. 



df -h : Disk kullanımını gösterir.



uptime : Orange pi' nin en son açtığınızdan beri  ne kadar süredir açık olduğunu gösterir.



sudo run-parts  /etc/update-motd.d/ : Başlangıç ekranını gösterir.



komut --help : Komut kullanımı hakkında bilgiler verir.

man komut : Komut ile alakalı olan yardımcı dokümanı açar. 



Okuduğunuz için teşekkür ederim. Aklınıza takılan bir soru veya karşılaştığınız bir sorun olduğunda yorumlarda belirtin. Burada eksik olarak anlattığım ama sizlerin gerekli olarak gördüğünüz bilgileri yine yorumlarda yazarsanız, bundan herkesin faydalanmasını sağlamış olursunuz. Herkese iyi çalışmalar.


Kaynakça:

  • https://computerservices.temple.edu/linux-commands
  • https://www.tecmint.com/15-basic-ls-command-examples-in-linux/
  • http://elektroyazilim.org/linux-dosya-klasor-islemleri-ve-komutlari/




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