Raspberry Pi Pico ile Arduino IDE Kullanımı
|Merhaba,
Bu konuda Raspberry Pi’ Pico’ yu Arduino IDE kullanarak programlayacağız. Önceki konuda da bahsettiğim üzere Pico için bir geliştirici, Arduino çekirdeği yayımladı. Pico için Arduino çekirdeğini içeren Github sayfasına bağlantıdan ulaşabilirsiniz.
Bu konu hakkında yabancı bir çok kaynak oluşmuş durumda. Ben de denememi yaparken detaylı anlatan bir tanesini referans aldım. Aslında bu konuda da referans aldığım konuyu kısa kısa özetlemeye çalışacağım. İngilizce biliyorsanız referans konuya bağlantıdan ulaşabilirsiniz. Ayrıca karşılaştığım bazı sorunları nasıl çözeceğinizi de yeri geldikçe belirtmeye çalışacağım.
Aşağıda verilen kurulum adımları Arduino 1.8.13 IDE’ si kullanılarak gerçekleştirilmiştir. IDE Windows installer kullanılarak kurulmuştur. Github sayfasında da belirtildiği üzere Windows Store ile indirdiğiniz Arduino IDE’ si Pico’ yu kullanmada sorunlar yaşamanıza sebep olabilir. Bu sebeple Arduino sayfasındaki Windows Installer sürümünü kullanarak Arduino IDE’ sini kullanmalısınız.
Kurulum adımları ile başlayacak olursak, öncelikle bağlantıdaki sayfadan Pico için hazırladığımız yazılımı Arduino kullanarak derleyebilmek için gerekli araçların olduğu programı kurmalısınız. İndirip kurmanız gereken dosyanın ismi şu an “pico-setup-windows-0.3.1-x64.exe” şeklindedir. Ancak ilerde yeni versiyonu çıkarsa sondaki rakamlar değişecektir. Referans sayfada bakacak olursanız kurulum sırasında her şeyi seçerek kurulum gerçekleştirilmiş. Ancak sizde olan programları tekrardan kurmanız gerekli değil. Diğer türlü kurulum biraz uzun sürebilir. Örneğin VsCode yada Python sizde varsa bunların işaretini kaldırabilirsiniz.

Kurulum tamamlandıktan sonra Arduino IDE içerisinde Pico için çekirdeğin kurulumunu gerçekleştirmelisiniz. Daha önceden ESP çekirdeğini kurduysanız onda da yaptığımız bir adım olan çekirdeğin URL’ sini Arduino IDE’ sine eklemeliyiz. Bu ekleme işlemini Arduino’ nun Dosya menüsündeki “Tercihler” kısmından yapacağız. URL ekleme işlemini gerçekleştirirken aşağıdaki resimde olduğu gibi yeni satır şeklinde eklemenizi tavsiye ederim. Böylece daha önceden eklediğiniz URL ile karışmaz ve sorun yaşamazsınız. Eklemeniz gereken URL aşağıdaki verilmiştir.
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json

URL ekleme işleminden sonra Pico için Arduino IDE’ si yazılım geliştirmeye hazırız. Şimdi “Araçlar” menüsünden Pico’ yu seçip “Blink” uygulamasını Pico’ ya yükleyebiliriz. Yükleme yaparken sorun yaşarsanız Pico’ nun gücünü kesip üzerindeki boot tuşuna basılı tutarak güç verin. Böylece yazılım sorunsuz şekilde yüklenecektir. Daha sonraki yüklemelerinizde bu şekilde bir işleme ihtiyaç duymayacaksınız.
Şimdi Arduino kullanarak basit bir uygulama yapalım. Yapacağımız uygulamada 3 adet LED kullanalım. Bu LED’ leri Seri Port gönderdiğimiz komutlar ile yakıp söndürelim. Ayrıca ADC’ den okuduğumuz değeri Seri Port üzerinden gönderelim.
Pico’ nun pin yapısında da görüldüğü üzere üzerinde bir çok UART, I2C ve SPI pinleri bulunmakta. Eğer siz bunlardan birini kullanmak isterseniz Arduino Nano kullanırken olduğu gibi Serial.begin yazdığınızda hangisini kullanacağını bilemeyebilirsiniz. Bunu öğrenmek için Github sayfası üzerinden paylaşılan Pico çekirdeği içerisinde bulunan “rpipico/pins_arduino.h” dosyasına bakabileceğiniz gibi bağlantıda verilen sayfadaki gibi yeniden atama yapabilirsiniz. “pins_arduino.h” dosyasında verilen pin konfigurasyonları aşağıdaki gibidir. Özellikle Pico üzerindeki bir çok pini kullanmanız gereken durumlarda farklı pinlerdeki özellikleri kullanabilmenize imkan veren ikinci yöntemi de incelemenizde fayda olduğunu düşünüyorum. Ayrıca o sayfa içerisinde Pico ile Arduino çekirdeği kullanımı hakkında bir çok faydalı bilgi barındırmaktadır.

Şimdi yapacağımız uygulama için bağlantı şemasına bakalım. Yapacağımız uygulamada 3 adet LED ve potansiyometre olacak. Konunun çok uzamaması için basit bir uygulama tercih ettim. Bağlantı şeması aşağıdaki gibidir.

Uygulamada LED’ leri seri port’ tan gönderdiğimiz veriler ile kontrol edeceğiz. İki LED gelen komutlar ile yakıp söndürürken, diğer LED’ in parlaklığını değiştireceğiz. 1. LED’ i yakmak için, “a1” ikinci LED’ i yakmak için ise “b1” gönderelim. LED’ leri söndürmek için ise “a0” ve “b0” gönderelim. “l+” ve “l-” komutları ile de 3. LED’ in parlaklığını değiştireceğiz. Şimdi bunları yazılım haline getirelim. Öncelikle tanımlamalar ile başlayalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
unsigned long lastTime = 0; int16_t pwmVal = 0; int led1 = 18; int led2 = 19; int ledOnBoard = 25; int ledPwm = 20; int potPin = A2; void setup() { // put your setup code here, to run once: pinMode(ledOnBoard, OUTPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(ledPwm, OUTPUT); pinMode(potPin, INPUT); Serial.begin(115200); } |
Tanımlamalar kısmı çok basit olduğu için detaylı açıklama yapmayacağım. LED’ leri çıkış olarak ayarlayıp, potansiyometre pinini giriş olarak ayarladık ve Seri haberleşmeyi başlattık. Şimdi loop kısmına bakalım.
Loop kısmında öncelikle 1 saniye aralıklar ile ADC verisini seri port üzerinden gönderelim. Bunun için bir millis kullanarak geçen süreyi ölçeceğiz. 1 saniye geçince de Seri port’ tan ADC ile okunan veriyi göndereceğiz. ADC verisinin önüne bir tane de sayaç değeri ekleyip sayacı her veri gönderdiğimizde 1 arttırdık.
1 2 3 4 5 6 7 8 9 |
if (millis() - lastTime > 1000) { uint16_t adcVal = analogRead(A2); Serial.print("Hello World: "); Serial.print(cnt++); Serial.print(" ADC: "); Serial.println(adcVal); digitalWrite(ledOnBoard, !digitalRead(ledOnBoard)); lastTime = millis(); } |
Daha sonrasında Seri Port’ tan gelen veri var mı diye kontrol edeceğiz. Gelen verileri sırası ile alıp işleyeceğiz. Her veri byte olarak geleceği için Serial.read() fonksiyonu ile sıra ile okuyabiliriz. İlk olarak gelen karakter ‘a’, ‘b’ yada ‘l’ den hangisi olduğunu seçebilmemiz için bir switch yapısı oluşturalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if (Serial.available() > 0) { char c = Serial.read(); switch (c) { case 'a': break; case 'b': break; case 'l': break; } } |
Seri Port’ taki ilk veriyi okuduktan sonra şimdi ikinci veriyi okuyalım. İkinci veri yine bir byte olacağı için ‘case’ ler içerisinde yine Serial.read() fonksiyonunu kullanacağız. Buna ek olarak gelen veri bir satır içerisinde algılamak için “?” operatörünü kullanacağız. Bu operatör 3 parametre alan tek operatördür ve tek satırda yapmak istediğiniz basit kıyaslamaları yaparak bir değer atamanızı sağlar. Buna örnek olarak aşağıdaki yazılımı verebilirim.
1 |
int aa = (Serial.read() == '0') ? 0 : 1; |
Üstteki yazılımda Seri Port’ tan okunan veriyi basit ve hızlı bir şekilde kıyasladık. Okunan veri ‘0’ ise aa değişkenine 0 değerini atadık. Burada dikkat edilmesi gereken nokta ‘0’ karakter iken 0 bir sayıdır. Böylece bu değeri dijital pine yazarak LED’ i rahatlıkla kontrol edebiliriz. Benzer şekilde Seri Port’ tan okunan veri ‘+’ mı yoksa ‘-‘ mi diye kontrol edelim ve ‘+’ gelmişse PWM değerine 25 ekleyelim. Yada ‘-‘ gelmişse PWM değerinden 25 çıkartalım.
1 2 |
pwmVal += 25; pwmVal = pwmVal > 255 ? 255 : pwmVal; |
Önceki kısımda olduğu gibi benzer bir mantık ile PWM değerini 255′ den büyük mi diye kıyasladık. Eğer büyükse 255′ e eşitledik. Sonuç olarak Seri Port’ tan gelen veriyi değerlendirdiğimiz kısım aşağıdaki gibidir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
if (Serial.available() > 0) { char c = Serial.read(); switch (c) { case 'a': digitalWrite(led1, Serial.read() == '0' ? 0 : 1); break; case 'b': digitalWrite(led2, Serial.read() == '0' ? 0 : 1); break; case 'l': char cc = Serial.read(); if (cc == '+') { pwmVal += 25; pwmVal = pwmVal > 255 ? 255 : pwmVal; } else if (cc == '-') { pwmVal -= 25; pwmVal = pwmVal < 0 ? 0 : pwmVal; } analogWrite(20, pwmVal); break; } } |
Pico’ yu Arduino IDE kullanarak programlama hakkındaki yazımızın sonuna geldik. Konu içerisinde verilen yazılımın tamamına bağlantıdan ulaşabilirsiniz. Hazırladığımız yazılımda da görüldüğü üzere Arduino programlar gibi basit bir şekilde Raspberry Pi Pico programlamak mümkün. Bu özellikle Python bilgisi çok iyi olmayan ve MicroPython ile anlaşmakta güçlük çeken kişiler içim iyi bir alternatif olmaktadır. Farklı konularda görüşmek dileğiyle…
İyi çalışmalar dilerim…
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
Yazıda eksik kalmış. :)
Teşekkürler bilgilendirme için. Yazıya ekleme yaptım.