Raspberry Pi Pico (RP2040) İlk Kullanım

> Bu yazı düzenlemeye ihtiyaç duymaktadır.

Öncelikle herkese merhaba. Yakın bir zamanda Raspberry Pi Pico kartının siparişini verdim ve bugün elime ulaştı. Gerekli kurulumları ve ilk denememi sizinle de paylaşmak istedim.

Ben bu yazıda ilk olarak C/++ ile bir giriş yapacağım.

ARM mikrokontrolcülerine bir yazılım derleyebilmek için gcc'nin ARM paketini yüklemeliyiz. Eğer bilgisayarınızda bulunmuyor ise cmake'i de yüklemeniz faydalı olacaktır.

~$ sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
~$ sudo apt install libstdc++-arm-none-eabi-newlib  # Debian kullanıcıları için
Eğer Debian kullanıyorsanız apt kullanarak ilgili derleyicileri indirebilirsiniz.

Derleyicilerimizi indirdikten sonra sıra SDK'yı, yani kütüphanelerimizi indirme zamanı. Bunu yapabilmek için git yazılımını kullanacağız.

~$ git clone https://github.com/raspberrypi/pico-sdk.git
~$ echo "PICO_SDK_PATH=../path/to/sdk" >> ~/.bashrc
Bu komutlar sayesinde ilgili kütüphaneyi github üzerinden indirebileceğiz ve SDK'yı kullandığımız terminalin kayıtlarına ekleyeceğiz.

Şimdi hazır uygulamaları indirelim ilgili git reposundan.

~$ git clone https://github.com/raspberrypi/pico-examples.git
~$ cd pico-examples/
~$ git submodule update --init
Bu komut da pico-examples reposunu bilgisayarımıza indirecektir. Tüm bunları farklı bir klasörde yapmanızı tavsiye ederim.

Bir build klasörü yaratalım ve indirdiğimiz pico-examples dosyalarını onun içine derleyelim.

~$ mkdir build && cd build
~$ cmake ..
Build dizinin içinde artık gerekli dosyaları bulabileceksiniz.

Artık build/blink dizinine gidebiliriz ve buradaki projeyi make -j4 ile derleyebiliriz. Oluştan blink.uf2 dosyası Pico'muzun içine atacağımız program dosyasıdır.

Pico'yu bilgisayarınıza bağlayabilmek için geliştirme kartınızın üstünde yer alan BOOTSEL butonuna basılı tutmanız ve ardından USB bağlantısını yapmanız gerekmektedir. Eğer ki RPI-RP2 adlı bir aygıt görüyorsanız bağlantınız olmuş demektir.

Şimdi oluşturduğumuz blink.uf2 dosyamızı GUI üzerinden sürükle-bırak tekniği ile kartımıza atalım. Kartınıza attığınız gibi bilgisayarınızdan Pico'nun bağlantısı kopacak ve ledimiz yanıp sönmeye başlayacaktır.

Eh, hani MicroPython?

Dökümantasyondan gördüğüm kadarı ile MicroPython ile çalışmak, normal derleme ve dosyayı karta yüklemekten farklıymış. Pico kartında MicroPython'ın kullanıldığı iki mod varmış, bunlardan biri REPL, yani kartı interpreter modu ile çalıştırma ve diğeri ise hazırlanmış Python dosyasını kartta çalıştırma.

Ben bu yazımda REPL modunu deneyeceğim çünkü dökümantasyonda direk o anlatılmış. Eğer ki diğerini de merak ediyorsanız, örneğin ben ediyorum, herkes Thonny'i kullanarak interpreter ayarını MicroPython (Raspberry Pi Pico) seçiyor ve dosyayı yazıp göndere basıyor. Açıkçası ben bir yazılıma bağlı kalmaktan nefret ettiğim için özellikle kullanmıyorum. Onu da elimle, terminalle, nasıl yapacağımı öğrenince paylaşacağım.

İlk yapılması gerekilen şey MicroPython'ın çalışabilmesini sağlayacak olan uf2 dosyasını karta daha önce yaptığımız şekilde göndermek. BOOTSEL tuşunu basılı tutmatı unutmayın. Ardından şu bağlantıyı kullanarak indireceğiniz dosyayı kartın içine sürükle-bırak ile gönderin.

Artık kartınızın içinde bir tane Python yorumlayıcısı uyuyor haldedir. Şimdi ana cihazınızdan USB ile haberleşerek o yorumlayıcıyı uyandıracağız.

~$ ls /dev/ttyACM*
Raspberry Pi Pico'nun bilgisayarımıza bağlı olduğunu teyit ediyoruz.

Eğer kartımızı bağlı görüyorsak, minicom programı ile seri-haberleşmesini yapmaya başlayabiliriz. Eğer program yüklü değilse, yükleyebilmek için aşağıdaki komutu yazabilirsiniz.

~$ sudo apt install minicom

Ardından minicom'a az önce bulduğumuz ttyACMX portuna bağlanmasını söyleyememiz gerekmektedir.

~$ minicom -o -D /dev/ttyACMX

Ardından bir kere Enter klavye tuşuna basın ve Python yorumlayıcısı karşınızda olacaktır. help() yazdığınızda bu yorumlayıcının MicroPython'a ait olduğunu görebilirsiniz.

Hadi şimdi blink uygulamamızı deneyelim.

Öncelikle machine kütüphanemizden Pin sınıfımızı çağıralım.

from machine import Pin

Ardından bir Pin nesnesi yaratalım. Pin nesnemizin oluşturucu fonksiyonu üç parametreye ihtiyaç duyar. Bunlardan ilk ikisi zorunludur: pin numarası ve pinin giriş/çıkış modu.

Eğer ki help() komutunu çağırdıysanız şu satırları görebilirsiniz:

  • machine.Pin(pin, m, [p]) -- get a pin and configure it for IO mode m, pull mode p
  • Pins are numbered 0-29, and 26-29 have ADC capabilities
  • Pins are numbered 0-29, and 26-29 have ADC capabilities
  • Pin pull modes are: Pin.PULL_UP, Pin.PULL_DOWN

Bu bilgilere ek olarak kartımızın bize verilen şematiğinden görmekteyiz ki, LED'imiz 25. pinimize bağlıdır.

Şimdi LED'imizin üzerinden aç-kapat yapacağımız program kodumuzu yazalım. Halihazırda Pin sınıfımızı programımıza tanıttığımızı hatırlatırım.

# utime kütüphanemizden sleep fonksiyonumuz
# çağırıyoruz.
from utime import sleep

# Pin nesnemizi yaratıyoruz.
led_pin = Pin(25, Pin.OUT)
pin_state = False

# Açılışta led_pin'imize LOW
# veriyoruz.
led_pin.value(pin_state)

# Sonsuz döngü içerisinde programımıza
# LEDi açıp kapatması gerektiğini söylüyoruz.
while True:
	sleep(0.5)  # 500ms bekleme
	pin_state = not pin_state  # pin_state'i tersine çevir
	led_pin.value(pin_state)  # led_pin'imize pin_state ver

Bu kod sayesinde programımız 0.5 saniye aralıklarla ledini kapatıp açacaktır. Kartımızın bağlantısını söküp taktığınızda bunun devam etmediğini göreceksinizdir, bunun sebebi MicroPython yorumlayıcında yazmamız. Bir şekilde bir dosya olarak yazıp, cihaza bu dosyayı çalıştırması gerektiğini söylememiz gerekiyordu.

İleride, daha iyi yazılarda görüşmek dileği ile.