Hobi elektroniği ve kodlama tutkunları olarak yıllardır Uno ve Nano başta olmak üzere birbirinden farklı Arduino board’larla çalıştık ve projelerimizi gerçekleştirdik. Ben de projelerimde çok çeşitli Arduino board’lar kullandım ve zaman içinde elimde bolca board birikti.
Çinli Atmel Atmega328 kopyası mikrokontrolcü LGT8F328P‘nin 32 MHz’de çalışabildiğini duyunca dergicilik zamanlarımdan gelen dürtülerim bana elimdeki Arduino uyumlu board’larla karşılaştırmalı performans testi yapmam gerektiğini söyledi!
Yukarıdaki fotoğrafta poz veren farklı Arduino modelleri bu testte kozlarını paylaşacaklar.
Teste katılan kartları saymak gerekirse;
- Arduino Uno (1 orijinal, 1 DIP klon ve 2 SMD CH340 klon)
- Arduino Uno Mini Limited Edition (orijinal)
- Arduino Mega 2560 (1 orijinal ve 1 klon)
- Arduino Nano R3 (klon)
- Arduino Nano Every (orijinal)
- Arduino Nano 33 BLE (orijinal)
- Arduino Leonardo (klon)
- LGT8F328P Nano (klonun klonu!)
- Deneyap Kart (ESP32-WROVER-E)
- Deneyap Mini (ESP32-S2)
- ESP32 Dev Kit (ESP32-WROOM-32, 4 farklı kart)
- NodeMCU V3 (ESP8266)
- Raspberry Pi Pico (1 orijinal B1, 1 tane de 4 MB B2 klon)
- STM32 Blue Pill (STM32F103C8)
- Adafruit Trinket M0 (Atmel ATSAMD21E18)
Bu test için geçmişte bilgisayar işlemcilerinin performanslarını ölçme yöntemlerimizden biri olan Pi hesaplama testinin Arduino versiyonunu buldum. 10 yıl kadar önce Steve Curd tarafından hazırlanmış sketch kodunu epey elden geçirdim ve ESP32 gibi farklı kartlarda da sorunsuz çalışabilecek hale getirdim. Kullandığım sketch kodunu makalenin en sonunda inceleyebilir ve indirebilirsiniz.
Tüm kartları bu sketch kodu ile 1 milyon adım ile test ettim ve farklı frekanslarda çalışabilenleri de ayrı ayrı ölçtüm. Böylece yoğun iş yükü ihtiyaçları için hangi kartları seçebileceğimiz ortaya çıkmış oldu.
Arduino Uno ve Mega klonları orijinalleri ile birebir aynı performans verdiği için ayrı ayrı listelenmediler.
Aşağıdaki grafikte kartların 1 milyon yaklaşımı tamamlama sürelerini görüyoruz. Süreler saniye cinsinden ve düşük olan daha iyi sonuç.
Çalışma frekansının yanında yıldız (*) olan ölçümler kartın varsayılan frekansı dışındaki hızlardaki ölçümleri. Böylece ESP8266 ve ESP32’yi aynı frekansta karşılaştırma fırsatımız oluyor.
EK TESTLER:
– ESP32-S3 240 MHz: 3461!
– ESP32-C3 160 MHz: 5203
– Arduino Due: 16798
– Arduino UNO R4 Minima 48 MHz: 22250
– Arduino UNO R4 WiFi 48 MHz: 22293
Grafikten anlaşılacağı üzere Pi performans testi mikrokontrolcünün çalışma frekansına doğrudan bağlı. ESP32 kartlar 240 MHz’lik canavar işlemcileri ile doğal olarak testte çok baskınlar. Espressif’in ilk mikrokontrolcüsü ESP8266 bile 160 MHz’de oldukça iyi sonuç elde edebiliyor.
133 MHz’lik Pi Pico ve 48 MHz’lik Trinket M0’ın daha düşük frekanslı rakiplerinden bile geride kalmalarının nedeninin genelde MicroPython veya CircuitPython için iyileştirilmiş UF2 altyapısına sahip olmalarından kaynaklandığını tahmin ediyorum.
Arduino Nano ve Uno’lara gelecek olursak, grafiğin altlarında kalmaları çok doğal. 16 MHz frekansındaki Atmega328 işlemcilerinin artık ilkel kalmış mimarileri nedeniyle daha fazlasını beklemek yanlış olurdu. Nano Every’deki Atmega4809 işlemcisi küçük bir farkla da olsa yeni mimarinin avantajını bize gösteriyor.
Arduino Mega 2560’ın Uno’ya göre biraz yavaş kaldığını görmek ilginç oldu. Belki de o kadar fazla sayıda pini yönetmeye çalışırken yoruluyordur 🙂
Testin en dikkat çeken kartı ise Çinlilerin Atmel kopyası LGT8F328P oldu. 32 MHz hızında çalışan bu mikrokontrolcü boyundan büyük işler başarıyor. Üstelik 16 MHz’deki performansı bile Nano Every’den çok daha iyi.
Arduino’ların performanslarının temelde çalışma frekanslarına bağlı olduğunu görmüştük. Peki bu kartların birim frekanstaki saf performansları nasıl? Tüm kartları 16 MHz’e indirip test etme şansımız yok, ancak ilk grafikteki verileri yeniden hesaplayabiliriz.
Aşağıdaki grafikte ilk grafikteki sonuçların testteki en düşük frekans olan 16 MHz’e göre yeniden düzenlenmiş değerlerini görüyoruz.
EK TESTLER:
– ESP32-S3 240 MHz: 51915!
– ESP32-C3 160 MHz: 52030
– Arduino UNO R4 Minima 48 MHz: 66750
– Arduino UNO R4 WiFi 48 MHz: 66879
– Arduino Due: 83990
Çinli kopyamız LGT8F328P bizi burada da şaşırtıyor. 16 MHz’e göre dengelenmiş sonuçlarda ESP32’ler ve Uno/Nano gibi kartlar birbirlerinden küçük farklarla ayrılırken her fırsatta hor gördüğümüz Çinli dostumuz bariz bir farkla liderliği ele geçirmiş durumda.
Deneyap Mini’deki ESP32-S2 daha yeni bir çip olsa da aslında standart ESP32’nin biraz kırpılmış versiyonu. Zaten eski olan ESP8266 ile birlikte gerilerde kalmaları normal. STM32 Blue Pill de farklı altyapısıyla aşağılarda kalmış görünüyor.
Pi Pico ve Trinket M0 hakkında daha önce dikkat çektiğim durum bu tabloda kendisini açıkça gösteriyor. Bu olağanüstü yetenekli iki kart evrensel olma çabaları nedeniyle yavaş kalıyor gibi görünüyor ve saf performans bakımından Arduino yazılım altyapısında yavaş kaldıkları açık.
Donanım yetenekliliği ve performansı düşünülecek olursa ESP32 her alanda rakipsiz. Sahip olduğu Wi-Fi ve Bluetooth bağlantı özellikleri nedeniyle IoT projelerinin en uygun fiyatlı ve en yetenekli seçeneği Espressif çipleri.
Raspberry Pi Pico ise Arduino’nun ‘basit’ ihtiyaçlarını karşılamak için fazla yetenekli bir kart. Onun yeteneklerini PIO’larında ve çift çekirdekli yapısını kullanan projelerde açıkça görebilmek mümkün.
Temel hobi projeleri için ise Arduino Uno ve Nano kartları hala çok yeterli. Rakiplerine göre yavaşlar, hafızaları küçük ve ek özellikleri yok. Ancak kullanıldıkları çoğu proje için fazlasıyla yeterliler. Üstelik dökümantasyon bolluğu, donanım sorunsuzluğu, yazılım uyumluluğu ve örnek kod bulma kolaylıkları dikkate alındığında Atmega328’den kurtuluşumuz pek yok gibi görünüyor.
Makaleyi LGT8F328P’yi geliştiren Çinli mühendislere tebrikler diyerek sonlandıralım.
Arduino’da iyi olmak için öncelikle elektronikte iyi olmak gerekir. Türkiye’nin en iyi temel elektronik eğitim seti ARDUINO ÖNCESİ TEMEL ELEKTRONİK EĞİTİM VE DENEY SETİ‘ni keşfedin. Gereksiz bilgilerden arındırılmış basit ve eğlenceli anlatımla ELEKTRONİK öğrenin ve Arduino’ya METE HOCA farkıyla güçlü başlayın!
ÖZGÜN ve KULLANIŞLI projeler yapabilmek için ARDUINO’yu doğru öğrenmek gerekir. Arduino’ya güçlü başlamanın en iyi yolu ARDUINO’YA GÜÇLÜ BAŞLANGIÇ EĞİTİM VE PROJE SETİ‘dir. Arduino Uno üzerine kurulu olan set ile bu müthiş geliştirme platformunu tüm detaylarıyla anlayacak, başka hiçbir yerde bulamayacağınız inceliklerini öğrenecek ve en sık kullanılan Arduino sensör ve modüllerine aşina olacaksınız.
Arduino Pi Performans Testi sketch kodunu kopyalamak için pencerenin sağ üst köşesindeki butona tıklayabilir veya buraya tıklayarak ZIP dosyası olarak indirebilirsiniz.
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
// // Arduino Pi Performans Testi // // Arduino IDE ile kodlanabilen geliştirme kartlarının işlem performanslarını ölçer. // // Newton yaklaşım metodunu kullanarak Pi'ye yaklaşır. Steve Curd tarafından // 2012 Aralık'ta yazılmış sketch üzerine kuruludur. // // DİKKAT: Değiştirilen her kod ölçüm süresini etkileyebilir! // // 24 Temmuz 2022, METE HOCA // Web: https://www.metehoca.com/ // int LED = 13; // Dahili LED pini unsigned long hesap = 1000000; // Hesaplama adımı (Varsayılan: 1000000) unsigned long basla, bitim, eniyi, tur; void setup() { pinMode(LED, OUTPUT); Serial.begin(9600); // Sonuçları 9600 baud'a ayarlı Seri Port Ekranı'nda göreceğiz while(!Serial); } void loop() { int adim = 0; boolean yanson = false; unsigned long i, count = 0; double x = 1.0; double y, pi=1.0; Serial.println(); Serial.print("| Arduino Pi Performans Testi | "); Serial.print(hesap); Serial.println(" adım |"); basla = millis(); // Başlangıç öncesinde saate bakıyoruz count = 0; for (i = 2; i < hesap; i++) { x *= -1.0; pi += x / (2.0*(double)i-1); if (adim++ > hesap / 100) { // Toplam adımın her yüzde ikisinde LED yakılır ve # eklenir adim = 0; if (yanson) { digitalWrite(LED, HIGH); yanson = false; Serial.print("#"); } else { digitalWrite(LED, LOW); yanson = true; } y = 40000000.0 * pi; yield(); // Espressif üretimi kartları uyanık tutalım } } pi = pi * 4.0; bitim = millis() - basla; // Bitimde saate tekrar bakıp farkı bulalım if (eniyi == 0) eniyi = bitim; else if (bitim < eniyi) eniyi = bitim; tur++; Serial.println(); Serial.print("π = "); Serial.print(pi, 10); Serial.print(" | Son Süre: "); Serial.print(bitim); Serial.print(" ms | En İyi Süre: "); Serial.print(eniyi); Serial.print(" ms | Tur: "); Serial.println(tur); delay(100); } |