> ## Documentation Index
> Fetch the complete documentation index at: https://docs.t3gemstone.org/llms.txt
> Use this file to discover all available pages before exploring further.

# GPIO

> General Purpose Input Output (GPIO)

<Tip>
  Bölüm bitiminde aşağıdaki konularda deneyim kazanacaksınız

  * Gemstone üzerinden GPIO kullanımı
  * [t3gemstone/examples/gpio](https://github.com/t3gemstone/examples/tree/main/gpio) projesi için ön hazırlık.
</Tip>

GPIO (General Purpose Input/Output), mikrodenetleyicilerde ve geliştirme kartlarında genel amaçlı giriş ve çıkış
işlemleri için kullanılan pinlerdir. Bu pinler, hem dijital veri almak (giriş) hem de dijital sinyal
göndermek (çıkış) için yapılandırılabilir. Aşağıda Gemstone üzerindeki GPIO pinleri aracılığıyla yapılan
led blink işlemi gösterilmektedir.

<Frame caption="GPIO pinleri">
  <img className="rounded-lg" src="https://mintcdn.com/t3gemstone-754bcb96/xXa-dgH9QsK0Txx6/images/o1-board/32-gpio.png?fit=max&auto=format&n=xXa-dgH9QsK0Txx6&q=85&s=b40d4b34304fda2eef06394e3f64e68f" width="1221" height="750" data-path="images/o1-board/32-gpio.png" />
</Frame>

[Hızlı Başlangıç](/tr/quickstart) sayfasında belirtilen malzemelere ek olarak bir led, buton ve bir
direnç gerekmektedir.

<AccordionGroup>
  <Accordion title="Led">
    <Frame>
      <img height="500" width="800" src="https://mintcdn.com/t3gemstone-754bcb96/oFj6OOIrYSQVBj-3/images/led.jpg?fit=max&auto=format&n=oFj6OOIrYSQVBj-3&q=85&s=7fabccda02e21bf3b0f9eb0aaf6d6f27" data-path="images/led.jpg" />
    </Frame>
  </Accordion>

  <Accordion title="Buton">
    <Frame>
      <img height="500" width="800" src="https://mintcdn.com/t3gemstone-754bcb96/S1XNwAfVXiylpyYD/images/button.jpeg?fit=max&auto=format&n=S1XNwAfVXiylpyYD&q=85&s=a32c778718490e38e42b12f2b6cb52d7" data-path="images/button.jpeg" />
    </Frame>
  </Accordion>

  <Accordion title="Direnç">
    <Frame>
      <img height="500" width="800" src="https://mintcdn.com/t3gemstone-754bcb96/oFj6OOIrYSQVBj-3/images/resistor.jpg?fit=max&auto=format&n=oFj6OOIrYSQVBj-3&q=85&s=0f719a158cb67ac09e6b6b7d69bef4c1" data-path="images/resistor.jpg" />
    </Frame>
  </Accordion>
</AccordionGroup>

<Steps>
  <Step title="GPIO Bağlantıları">
    Gemstone kartına GPIO bağlantılarını yap.
  </Step>

  <Step title="SSH/VNC Bağlantısı">
    [SSH](../../../quickstart#2-3-ssh-ile-network-üzerinden-bağlantı) veya
    [VNC](../../../quickstart#2-2-vnc-ile-tarayıcıdan-uzak-masaüstü-bağlantısı) yöntemlerinden birisiyle
    Geliştirme kartına bağlan.
  </Step>

  <Step title="Shell">
    Bash Shell scriptlerini oluştur.
  </Step>
</Steps>

## 1. Led Yakma

### 1.1. GPIO Bağlantıları

Gemstone üzerinde Input/Output olarak kullanılabilir durumda olan GPIOX'e aşağıda gösterildiği gibi
led bağlantıları yapılır.

<Frame caption="Led bağlantısı">
  <img className="rounded-lg" src="https://mintcdn.com/t3gemstone-754bcb96/DqBDlLDn29Knu23Y/images/o1-board/22-led.png?fit=max&auto=format&n=DqBDlLDn29Knu23Y&q=85&s=e7ad53e1248db7b80595d398020b7325" width="1337" height="884" data-path="images/o1-board/22-led.png" />
</Frame>

### 1.2. Shell Script Oluşturulması

Gemstone'a bağlandıktan sonra led blink işlemi için bir script dosyası oluşturunuz.

```bash theme={"system"}
touch led-blink.sh
```

Terminal arayüzünden `nano` isimli metin editörünü kullanarak `led-blink.sh` dosyasını açınız.

```bash theme={"system"}
nano led-blink.sh
```

Aşağıdaki kodu kopyalayıp led-blink.sh dosyasına yapıştırınız.

```bash lines theme={"system"}
#!/bin/bash

while :
do
    gpioset $(gpiofind GPIOX)=1
    sleep 1
    gpioset $(gpiofind GPIOX)=0
    sleep 1
done
```

`CTRL+X`'e bastıktan sonra `Y` tuşuna basıp nano editöründen çıkış yaparak kaydetme işlemini tamamlayınız.

### 1.3. Shell Scriptinin Çalıştırılması

`chmod` komutu ile `led-blink.sh` dosyasını çalıştırılabilir hale getiriniz.

```bash theme={"system"}
chmod +x led-blink.sh
```

`led-blink.sh` scriptini çalıştırınız.

```bash theme={"system"}
./led-blink.sh
```

Son olarak aşağıdaki videoda gösterildiği gibi 1 saniye aralıklarda ledin yanıp söndüğünü gözlemleyiniz.

<Frame caption="Led blink uygulaması">
  <video controls className="w-full aspect-video" src="" />
</Frame>

## 2. Buton Okuma ve Led Yakma

### 2.1. GPIO Bağlantıları

Gemstone üzerinde Input/Output olarak kullanılabilir durumda olan GPIOX pinine led ve GPIOY pinine buton
bağlantıları aşağıda gösterildiği gibi yapılır.

<Frame caption="Led ve Buton Bağlantısı">
  <img className="rounded-lg" src="https://mintcdn.com/t3gemstone-754bcb96/DqBDlLDn29Knu23Y/images/o1-board/07-buttons-breadboard.png?fit=max&auto=format&n=DqBDlLDn29Knu23Y&q=85&s=199147c992c807b335d32a24c5786531" width="1337" height="884" data-path="images/o1-board/07-buttons-breadboard.png" />
</Frame>

### 2.2. Shell Script Oluşturulması

Script dosyasını oluşturunuz.

```bash theme={"system"}
touch button-led.sh
```

Terminal arayüzünden `nano` metin editörünü kullanarak `button-led.sh` dosyasını açınız.

```bash theme={"system"}
nano button-led.sh
```

Aşağıdaki kodu kopyalayıp `button-led.sh` dosyasına yapıştırınız.

```bash lines theme={"system"}
#!/bin/bash

while :
do
   if (( $(gpioget --bias=pull-up $(gpiofind GPIOY)) == 0))
   then
      gpioset $(gpiofind GPIOX)=1
   else
      gpioset $(gpiofind GPIOX)=0
   fi
done
```

`CTRL+X`'e bastıktan sonra `Y` tuşuna basıp nano editöründen çıkış yaparak kaydetme işlemini tamamlayınız.

### 2.3. Shell Scriptinin Çalıştırılması

`chmod` komutu ile `button-led.sh` dosyasını çalıştırılabilir hale getiriniz.

```bash theme={"system"}
chmod +x button-led.sh
```

`button-led.sh` scriptini çalıştırınız.

```bash theme={"system"}
./button-led.sh
```

Son olarak aşağıdaki videoda gösterildiği gibi butona basılan süre boyunca ledin yandığını gözlemleyiniz.

<Frame caption="Buton ile led yakma">
  <video controls className="w-full aspect-video" src="" />
</Frame>
