Facebook RSS Feed
 
Windows IoT: GPIO Kavramı ve Onboard LED Yakmak
Tarih: 14.12.2015, Platform: Windows 10 IoT Core, IDE: Visual Studio 2017, Level: 100

Mikrodenetleyiciler (ve dolayısıyla geliştirme kartları) dış dünya ile iletişimlerini pinleriyle sağlarlar. Pinler, tek başlarına ya da diğer pinlerle grup halinde çalışarak bir fonksiyonu gerçekleştirir. Örneğin, bir butona basıldığının anlaşılması ya da lambanın yakılması, ilgili pinin giriş ya da çıkış fonksiyonu almasıyla olur. Ya da USB portundan iletişim sağlanması da birkaç pinin bir araya gelerek, birlikte işlemesiyle gerçekleşir.

Örneğimizde GPIO (General Purpose Input / Output) kavramını kavrayıp, Raspberry Pi 2 üzerindeki pilot LED’i kontrol edeceğiz.

Öngereksinimler

- Windows 10 IoT Core ile çalışan bir Raspberry Pi 2
- Cihazınızla bilgisayarınız arasında ağ bağlantısı

Raspberry Pi 2 Üzerindeki Pinler

Örneğimizde popüler Raspberry Pi 2 kartını referans alacağız. Diğer kartlarda pin numaraları ve fonksiyonları farklı olsa da, temel mantık aynıdır. Kartı aşağıdaki gibi tuttuğunuzda, sağ tarafında kalan pinlerin fonksiyonları görseldeki gibi olur.

-

3.3V PWR ve 5V PWR pinleri, dışarıya elektrik vermek için kullanılır. Bu pinlerle çeşitli sensörlere ve ufak rölelere güç verebilirsiniz. Ancak, motor gibi güç gerektiren komponentleri buraya bağlamayın. GND pinleri, devreyi tamamlamak için kullanılan - güç pinleridir. Sisteminize bağladığınız hemen hemen tüm komponentlerin GND pinlerinin birbirine bağlanması gerekecektir. Reserved pinleri kullanım dışıdır. Geriye kalan pinler, GPIO olarak adlandırılır. (Header’ın 37. Pinindeki GPIO26 pini, uygulama içerisinde 26. pin olarak çağrılır.) GPIO pinlerinin bazıları, SPI / I2C gibi çeşitli iletişim protokollerini destekler. Bu pinler istenirse GPIO olarak, istenirse donanımsal özellikleri ile kullanılabilir.

Bu pinler, direkt olarak mikrodenetleyiciye bağlıdır. Yanlış bağlantı ve kısa devre durumlarında geliştirme kartınız zarar görebilir.

Proje Oluşturmak

Visual Studio’dan Visual C# > Windows > Universal > Blank App (Universal Windows) uygulaması oluşturun. Proje adına “IoTGPIO” verebilirsiniz.

Proje açıldığında, Solution Platforms seçeneğini x86’dan ARM’a getirin. Ardından, Solution Explorer’dan proje referanslarına Universal Windows > Extensions > Windows IoT Extensions for the UWP’yi ekleyin. Bu aşamadan sonra, IoT Core uygulaması geliştirmeye hazırsınız.

Uygulama Kodları

Uygulama kodlarımızı MainPage’in içerisine yazacağız. MainPage.xaml’ı açın ve F7 ile C# kodlarını yazacağımız MainPage.xaml.cs dosyasını açın.

Using statementlar arasına

using Windows.Devices.Gpio;

satırını ekleyin. Artık Giriş / Çıkış pinlerine erişebileceksiniz.

Ardından, global bir GPIO Pin oluşturun.

private static GpioPin pilotLED;

LED’e ulaşmak istediğinizde, pilotLED üzerinden işlem yapabileceksiniz.

Bir sonraki işlemimiz, giriş / çıkış pinlerini kontrol edecek GPIO Controller’ı oluşturmak. this.InitializeComponent(); metodunun altına, aşağıdaki kodları ekleyin.

var gpio = GpioController.GetDefault();
pilotLED = gpio.OpenPin(47);
pilotLED.SetDriveMode(GpioPinDriveMode.Output);

İlk satır, GPIO Controller’a erişimimizi sağlıyor. İkinci satırda pilotLED değişkenini Raspberry Pi 2’nin onboard LED’ine bağlı 47. pine bağlıyoruz. Son satırda ise, bu pinin çıkış amaçlı kullanılacağını, yani dışarıya elektrik vereceğini belirliyoruz.

Bu aşamadan sonra, saniyede bir LED’i yakıp söndürme komutlarımızı tetikleyecek bir timer oluşturacağız. Using statement’lara

using System.Threading;

satırını ekledikten sonra, globalde timer’ı oluşturalım.

Timer tmrPilot = new Timer(new TimerCallback(PilotTimerTick), null, 1000, 1000);

Bu timer, uygulama başladıktan 1 saniye itibariyle her saniye aşağıdaki kod bloğunu çalıştıracak:

private static void PilotTimerTick(object state)
{
    // LED Yanıyorsa
    if (pilotLED.Read() == GpioPinValue.High)
    {
        // LED'i söndür
        pilotLED.Write(GpioPinValue.Low);
    }
    // LED Yanmıyorsa
    else
    {
        // LED'i yak
        pilotLED.Write(GpioPinValue.High);
    }
}

GpioPin sınıfında Read metodu, pinin o anki değerini okur ve High ya da Low değerini döndürür. Write metodu ise High parametresini alırsa pine elektrik verir, Low değeriyle elektriği keser.

Mikrodenetleyici pinleri, çoğunlukla 3.3V 20mA çıkış ile sınırlıdırlar. Bu da bir pin ile en fazla 2 LED yakabilmeniz anlamına gelir. Daha yüksek güç gerektirecek cihazları bağlamanız mikrodenetleyiciye zarar vereceğinden, bu tür işler için transistör ve röle gibi komponentler kullanılması gerekmektedir.

Yukarıdaki kodlar ile uygulamayı tamamladıktan sonra, Remote Device üzerinde uygulamayı çalıştırabilirsiniz. Kısa süre sonra, geliştirme kartınızın pilot LED’inin yanıp söndüğünü göreceksiniz.

Uygulamanın tüm kodları aşağıdaki gibidir:

[C#] MainPage.xaml.cs

using Windows.UI.Xaml.Controls;
using System.Threading;
using Windows.Devices.Gpio;

namespace IoTGPIOTest
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();

            // Giriş / Çıkış denetleyicisini başlat
            var gpio = GpioController.GetDefault();

            // pilotLED'i 47. pine bağla
            pilotLED = gpio.OpenPin(47);

            // pilotLED'i çıkış moduna ayarla
            pilotLED.SetDriveMode(GpioPinDriveMode.Output);
        }

        private static GpioPin pilotLED;
        Timer tmrPilot = new Timer
            (new TimerCallback(PilotTimerTick), null, 1000, 1000);

        private static void PilotTimerTick(object state)
        {
            // LED Yanıyorsa
            if (pilotLED.Read() == GpioPinValue.High)
            {
                // LED'i söndür
                pilotLED.Write(GpioPinValue.Low);
            }
            // LED Yanmıyorsa
            else
            {
                // LED'i yak
                pilotLED.Write(GpioPinValue.High);
            }
        }
    }
}

Ek Dosya: Belirtilmemiş.
Okunma Sayısı: 5096

comments powered by Disqus
 
Hoşgeldiniz!
Son güncelleme: 25.12.2016
-
Yeni Teknik Yazılar
Latte Panda İncelemesi
Turta IoT HAT İncelemesi
USB Gamepad Kullanımı
GPIO Kullanımı
VEML6075 UV Sensör Kullan...
-
İlgili Gruplar
.NET MF ve Gadgeteer FB Grubu
İst. IoT & Wearables Meet-up
-
 

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.Copyright © 1999 - 2017, Umut Erkal. Bu materyal, "Creative Commons Public Licence" ile sunulmuştur.
Kaynak göstererek ve ücretsiz olarak, aynı şartlar altında paylaşabilir ve kullanabilirsiniz. | Kullanım Sözleşmesi