Arduino Kütüphane Ekleme: ZIP, Elle Kurulum ve Hata Çözümleri
Arduino kütüphane ekleme adım adım: Kütüphane Yöneticisi, .ZIP ve elle kurulum, sürüm değiştirme, No such file or directory ve Multiple libraries çözümü.
Arduino kütüphane ekleme, bir sensörü, ekranı ya da modülü kodunda kullanabilmek için hazır bir kod paketini Arduino IDE'ye kurmaktır ve üç yolu vardır: Kütüphane Yöneticisi (en kolay ve önerilen yol), indirdiğin bir .ZIP dosyasını IDE'ye eklemek ya da kütüphane klasörünü Eskiz Defteri'ndeki libraries klasörüne elle kopyalamak. Kurulum bittikten sonra kodun en üstüne #include <KutuphaneAdi.h> satırını yazarsın ve kütüphanenin bütün fonksiyonları kullanıma hazır olur. Doğru kütüphane bir dakikada kurulur; yanlış kütüphane ya da yanlış sürüm ise saatlerce süren bir hata avına dönüşebilir.
Bu rehberde üç yöntemi Arduino IDE 2 üzerinde adım adım anlatıyoruz. Ardından adı birbirine benzeyen onlarca kütüphane arasından doğrusunu seçmeyi, bir kütüphanenin eski sürümüne dönmeyi, kütüphane örneklerini açmayı ve en sık görülen iki mesajı, No such file or directory hatasını ve Multiple libraries were found uyarısını çözmeyi göreceksin. Son bölümlerde ESP32 ve Raspberry Pi Pico'da hangi kütüphanelerin çalıştığını, hangilerinin yerine başka bir kütüphane gerektiğini ve MicroPython'da kütüphane eklemeyi öğreneceksin. IDE henüz kurulu değilse önce Arduino IDE Kurulumu yazısına göz at.
Arduino kütüphanesi nedir, ne işe yarar?
Kütüphane, belirli bir işi yapan ve başkalarının da kullanabilmesi için paketlenmiş kod dosyalarıdır: en az bir başlık dosyası (.h), genellikle bir ya da birkaç kaynak dosyası (.cpp) ve hemen her zaman birkaç örnek eskiz. Örneğin DHT11 sensörü ölçümünü tek bir kablo üzerinden, mikrosaniye hassasiyetinde zamanlanmış 40 bitlik bir paketle gönderir. Bu zamanlamayı kendin yazmak yerine DHT kütüphanesini kurar ve yalnızca dht.readTemperature() yazarsın; zor kısmı kütüphane halleder. Kütüphaneyi kart paketiyle karıştırma: Kart Yöneticisi'nden kurulan kart paketi IDE'ye ESP32 ya da Pico gibi yeni bir işlemci ailesini tanıtır, kütüphane ise belirli bir donanımı ya da işi kolaylaştırır. Arduino'da kütüphaneler üç farklı yerden gelir:
| Kütüphane türü | Nereden gelir? | Nerede durur? | Örnekler |
|---|---|---|---|
| Dahili kütüphaneler | IDE ilk açılışta kendisi kurar | Arduino15 klasöründeki libraries | Servo, Stepper, LiquidCrystal, SD, Ethernet, Keyboard, Mouse |
| Kart paketi kütüphaneleri | Kart Yöneticisi'nden kurduğun paketle birlikte gelir | Arduino15/packages altında, paketin kendi libraries klasörü | Uno için Wire, SPI, EEPROM, SoftwareSerial; ESP32 için WiFi, WebServer, HTTPClient, Preferences |
| Senin kurduğun kütüphaneler | Kütüphane Yöneticisi, .ZIP ya da elle kopyalama | Eskiz Defteri'ndeki libraries klasörü | DHT sensor library, LiquidCrystal I2C, Adafruit SSD1306, ESP32Servo |
Wire, SPI ya da ESP32'nin WiFi kütüphanesi gibi kart paketiyle gelen kütüphaneleri ayrıca kurman gerekmez; #include satırını yazman yeterlidir. Senin kurduğun kütüphaneler ise Eskiz Defteri'nin içindeki libraries klasörüne iner. Bu klasörlerin işletim sistemine göre varsayılan yerleri şöyledir:
| İşletim sistemi | Senin kurduğun kütüphaneler | Arduino15 (dahili kütüphaneler ve kart paketleri) |
|---|---|---|
| Windows | C:\Users\<kullanıcı>\Documents\Arduino\libraries | C:\Users\<kullanıcı>\AppData\Local\Arduino15 |
| macOS | /Users/<kullanıcı>/Documents/Arduino/libraries | /Users/<kullanıcı>/Library/Arduino15 |
| Linux | /home/<kullanıcı>/Arduino/libraries | /home/<kullanıcı>/.arduino15 |
Yöntem 1: Kütüphane Yöneticisi ile kütüphane ekleme
Kütüphane Yöneticisi, Arduino'nun resmî kütüphane listesinde yer alan binlerce kütüphaneyi arayıp tek tıkla kurmanı sağlar. Bu listedeki kütüphaneler belirli bir kurala göre paketlendiği için klasör yapısı hiçbir zaman bozuk olmaz, ihtiyaç duydukları diğer kütüphaneler (bağımlılıklar) otomatik önerilir ve yeni sürüm çıktığında IDE seni uyarır. Bu yüzden aradığın kütüphane listede varsa her zaman bu yolu kullan. Örnek olarak DHT11 ve DHT22 sensörleri için Adafruit'in kütüphanesini kuralım:
- Arduino IDE 2'yi aç ve sol kenar çubuğundaki kitaplar simgesine tıkla. Aynı paneli Eskiz > Kütüphane Ekle > Kütüphaneleri Yönet menüsünden ya da Ctrl+Shift+I (macOS'ta Cmd+Shift+I) kısayoluyla da açabilirsin. İngilizce arayüzde menünün adı Sketch > Include Library > Manage Libraries şeklindedir.
- Arama kutusuna DHT sensor library yaz. Birkaç saniye içinde adında ya da açıklamasında bu kelimeler geçen bütün kütüphaneler kart kart listelenir.
- Her kartın başlığında kütüphanenin adı ve yazarı, altında kısa bir açıklama ve Daha fazla bilgi bağlantısı bulunur. Listede adı birbirine benzeyen birkaç DHT kütüphanesi göreceksin; yazarı Adafruit olan DHT sensor library kartını seç.
- Kartın altındaki sürüm listesi en yeni sürümü gösterir. Özel bir sebebin yoksa en yeni sürümü bırak ve Kur (Install) düğmesine bas.
- IDE, Kütüphane gerekliliklerini kur başlıklı bir pencere açar ve kütüphanenin Adafruit Unified Sensor adlı başka bir kütüphaneye ihtiyaç duyduğunu söyler. Tümünü kur (Install All) seçeneğine tıkla.
- Çıktı panelinde indirme satırları akar ve sağ altta DHT sensor library:1.4.7 kütüphanesi başarıyla kuruldu gibi bir bildirim çıkar. Kartın üzerinde artık kurulu sürüm yazar.
Bağımlılık penceresindeki seçim önemlidir. Gereklilikler olmadan kur seçeneği yalnızca ana kütüphaneyi kurar; ardından kodu derlediğinde Adafruit_Sensor.h: No such file or directory hatası alırsın, çünkü DHT kütüphanesinin dosyalarından biri bu başlığı çağırır. Bağımlılık zinciri bazen birkaç halkalıdır: Adafruit SSD1306 OLED kütüphanesi Adafruit GFX Library'yi, o da Adafruit BusIO'yu ister. Tümünü kur dediğinde IDE zincirin tamamını tek seferde kurar; bilerek atladığın bir bağımlılık yoksa her zaman bu seçeneği kullan.

Liste kalabalıklaştığında arama kutusunun üstündeki iki filtre işini kolaylaştırır:
| Filtre | Seçenekler | Ne işe yarar? |
|---|---|---|
| Tür (Type) | Tümü, Güncellenebilir, Kurulu, Arduino, Ortaklık, Önerilen, Eklenen, Emekli | Kurulu hangi kütüphanelerin hangi sürümle yüklü olduğunu, Güncellenebilir yeni sürümü çıkanları gösterir. Arduino resmî kütüphaneleri, Eklenen topluluk kütüphanelerini, Emekli ise artık geliştirilmeyenleri listeler. |
| Konu (Topic) | Ekran, Sensörler, İletişim, Cihaz Kontrolü, Zamanlama, Veri Depolama, Veri İşleme, Sinyal Giriş/Çıkış, Diğer, Kategori Dışı | Tam adını bilmediğin bir kütüphaneyi ararken sonuçları daraltır; örneğin Ekran konusunda yalnızca LCD, OLED ve TFT kütüphaneleri kalır. |
Aynı isimli kütüphanelerden doğrusunu seçmek
Kütüphane Yöneticisi'ne yalnızca DHT yazarsan onlarca sonuç çıkar; LiquidCrystal I2C aramasında da adı neredeyse aynı birkaç kütüphane görürsün. Hepsi aynı donanımı sürse de fonksiyon adları, kurucu (constructor) parametreleri ve örnek kodları farklıdır. Bir kütüphane için yazılmış kod, adı benzeyen başka bir kütüphaneyle çoğu zaman derlenmez. Doğru olanı seçmek için şu sırayı izle:
- Kodundaki #include satırına bak: Takip ettiğin örnek #include <LiquidCrystal_I2C.h> diyorsa bu dosyayı içeren kütüphaneyi kurmalısın. İyi hazırlanmış örnekler kullandıkları kütüphanenin adını ve yazarını da yazar.
- Yazarı kontrol et: Adafruit, SparkFun, Arduino ve Espressif gibi tanınmış adlar ya da parçanın üreticisi genellikle en iyi belgelenen ve en uzun süre bakımı yapılan kütüphaneleri yayımlar.
- Daha fazla bilgi bağlantısını aç: Kütüphanenin sayfasında son güncelleme tarihine, açık hata kayıtlarına ve hangi kartları desteklediğine bak. Yıllardır güncellenmemiş bir kütüphane ESP32 ya da Pico'da sorun çıkarabilir.
- Sürüm geçmişine bak: Sürüm listesinde çok sayıda sürüm olması kütüphanenin düzenli geliştirildiğini gösterir. Tek sürümlü ve açıklaması boş kütüphanelerden uzak dur.
- Önce kütüphanenin kendi örneğini dene: Kurduktan sonra örneklerinden birini derle. Örnek derleniyor ama senin kodun derlenmiyorsa, kodun büyük olasılıkla başka bir kütüphane için yazılmıştır.
| Parça | Kütüphane Yöneticisi'nde ara | Önerilen kütüphane (yazar) ve bağımlılıklar | #include satırı |
|---|---|---|---|
| DHT11 / DHT22 | DHT sensor library | DHT sensor library (Adafruit) + Adafruit Unified Sensor | #include <DHT.h> |
| 16x2 I2C LCD | LiquidCrystal I2C | LiquidCrystal I2C (Frank de Brabander) | #include <LiquidCrystal_I2C.h> |
| SSD1306 OLED | Adafruit SSD1306 | Adafruit SSD1306 + Adafruit GFX Library + Adafruit BusIO | #include <Adafruit_SSD1306.h> |
| DS18B20 | DallasTemperature | DallasTemperature (Miles Burton) + OneWire | #include <DallasTemperature.h> |
| RC522 RFID | MFRC522 | MFRC522 (GithubCommunity) | #include <MFRC522.h> |
| IR alıcı ve kumanda | IRremote | IRremote (shirriff, z3t0, ArminJo) | #include <IRremote.hpp> |
| WS2812B NeoPixel | Adafruit NeoPixel | Adafruit NeoPixel (Adafruit) | #include <Adafruit_NeoPixel.h> |
| DS1307 / DS3231 RTC | RTClib | RTClib (Adafruit) + Adafruit BusIO | #include <RTClib.h> |
| Servo (ESP32'de) | ESP32Servo | ESP32Servo (Kevin Harrington, John K. Bennett) | #include <ESP32Servo.h> |

Bu karışıklığın en bilinen örneği I2C LCD ekrandır. Kütüphane Yöneticisi'ndeki LiquidCrystal I2C (Frank de Brabander) ekranı lcd.init() ile başlatır. Aynı kütüphanenin GitHub'da dolaşan başka bir sürümü ise lcd.begin() fonksiyonunu parametresiz kullanır. O sürüm için yazılmış bir kodu Kütüphane Yöneticisi'nden kurduğun kütüphaneyle derlersen no matching function for call to 'LiquidCrystal_I2C::begin()' hatası alırsın. Çözüm basit: ya lcd.begin() satırını lcd.init() yap ya da kurduğun kütüphanenin örneklerinden yola çık. Ekranın bağlantısını ve I2C adresini bulmayı I2C LCD Ekran Kullanımı yazısında ayrıntılı anlattık.
Kurulumu test et: iki kütüphaneli sıcaklık göstergesi
Kütüphanelerin doğru kurulduğunu anlamanın en hızlı yolu, onları kullanan küçük bir kodu derlemektir. Aşağıdaki kod DHT11'den okuduğu sıcaklık ve nemi 16x2 I2C LCD'ye yazar. Kütüphane Yöneticisi'nden DHT sensor library (bağımlılığıyla birlikte) ve LiquidCrystal I2C kütüphanelerini kur; DHT11'in veri pinini Arduino Uno'nun 2. pinine, LCD'nin SDA ve SCL pinlerini A4 ve A5'e bağla. Pinlerin kart üzerindeki yerini Pinout aracında görebilirsin.
1// Gereken kütüphaneler / Required libraries (Kütüphane Yöneticisi / Library Manager):
2// DHT sensor library (Adafruit) + Adafruit Unified Sensor
3// LiquidCrystal I2C (Frank de Brabander)
4#include <Wire.h> // kart paketiyle gelir / bundled with the board package
5#include <DHT.h> // DHT sensor library
6#include <LiquidCrystal_I2C.h> // LiquidCrystal I2C
7
8#define DHT_PIN 2 // DHT11 veri pini / DHT11 data pin
9#define DHT_TYPE DHT11 // DHT22 için DHT22 yaz / write DHT22 for a DHT22
10
11DHT dht(DHT_PIN, DHT_TYPE);
12LiquidCrystal_I2C lcd(0x27, 16, 2); // adres, sütun, satır / address, columns, rows
13
14void setup() {
15 Serial.begin(9600);
16 dht.begin();
17 lcd.init(); // bu kütüphanede begin() değil init() / init(), not begin(), in this library
18 lcd.backlight(); // arka ışığı aç / backlight on
19 lcd.print(F("Kutuphaneler OK"));
20 delay(1500);
21}
22
23void loop() {
24 float t = dht.readTemperature(); // santigrat / Celsius
25 float h = dht.readHumidity(); // bağıl nem % / relative humidity %
26
27 if (isnan(t) || isnan(h)) { // sensör cevap vermedi / sensor did not respond
28 Serial.println(F("DHT okunamadi / DHT read failed"));
29 delay(2000);
30 return;
31 }
32
33 lcd.clear();
34 lcd.setCursor(0, 0); // sütun 0, satır 0 / column 0, row 0
35 lcd.print(F("Sicaklik: "));
36 lcd.print(t, 1);
37 lcd.print(F(" C"));
38 lcd.setCursor(0, 1); // ikinci satır / second row
39 lcd.print(F("Nem: %"));
40 lcd.print(h, 0);
41
42 Serial.print(t);
43 Serial.print(F(" C "));
44 Serial.print(h);
45 Serial.println(F(" %"));
46 delay(2000); // DHT11 en fazla saniyede bir ölçer / DHT11 measures at most once per second
47}Kodun ilk satırlarındaki #include komutları derleyiciye hangi kütüphane dosyalarını ekleyeceğini söyler. Wire.h kart paketiyle geldiği için ayrıca kurulmaz; DHT.h ve LiquidCrystal_I2C.h ise az önce kurduğun kütüphanelerden gelir. Doğrula düğmesine bastığında çıktı panelinde Sketch uses ... bytes satırını görüyorsan kütüphanelerin hepsi bulunmuş demektir. Kırmızı bir No such file or directory mesajı görürsen aşağıdaki hata bölümüne geç. Sensörün çalışma mantığı ve DHT22 ile farkı DHT11 Sıcaklık ve Nem Sensörü yazısında.
Yöntem 2: .ZIP dosyasıyla kütüphane ekleme
Bazı kütüphaneler Kütüphane Yöneticisi'nde yer almaz: henüz listeye girmemiş yeni bir kütüphane, bir sensör üreticisinin kendi sayfasında paylaştığı bir sürücü ya da bir kitabın, kursun veya öğretmeninin hazırladığı özel bir kütüphane olabilir. Bunlar genellikle GitHub üzerinden ya da doğrudan bir .zip dosyası olarak dağıtılır. Arduino IDE bu arşivi açıp doğru klasöre kendisi yerleştirebilir:
- Kütüphanenin GitHub sayfasında yeşil Code düğmesine tıkla ve Download ZIP seçeneğini seç. Sayfada Releases bölümü varsa oradan kararlı bir sürümün zip dosyasını indirmek daha güvenlidir.
- İnen dosyayı açmadan olduğu gibi bırak. IDE zip dosyasını kendisi çıkarır; bu menü klasör kabul etmez.
- Arduino IDE'de Eskiz > Kütüphane Ekle > .ZIP Kütüphanesi Ekle... menüsünü aç (İngilizce arayüzde Sketch > Include Library > Add .ZIP Library...).
- Açılan pencerede indirdiğin .zip dosyasını seç ve Aç'a bas.
- Kurulum başarılıysa sağ altta ... arşivindeki kütüphane başarıyla kuruldu bildirimi çıkar. Aynı adda bir kütüphane zaten varsa IDE üzerine yazmak isteyip istemediğini sorar; kurulu sürümü yenisiyle değiştirmek istiyorsan onayla.
- Kütüphanenin geldiğini Dosya > Örnekler > Eklenen Kütüphanelerin Örnekleri altında adını görerek doğrula.
Yöntem 3: libraries klasörüne elle kopyalama
Elle kurulum; internete bağlı olmayan bir okul laboratuvarında, arkadaşından USB bellekle aldığın bir kütüphane klasöründe ya da IDE'nin reddettiği bir zip dosyasında işe yarar. Yapman gereken tek şey kütüphane klasörünü doğru yere, doğru yapıyla koymaktır:
- Arduino IDE'yi kapat. IDE kütüphane listesini açılışta taradığı için çalışırken kopyalanan klasörleri hemen görmeyebilir.
- Zip dosyasını çıkar ve içinde library.properties dosyası ya da kütüphanenin .h dosyası bulunan klasörü bul. Kütüphanenin kök klasörü budur.
- Bu klasörü Eskiz Defteri'ndeki libraries klasörüne kopyala (Windows'ta genellikle Belgeler\Arduino\libraries). libraries klasörü yoksa kendin oluştur; adı küçük harfle ve tam olarak libraries olmalıdır.
- Klasör adındaki -master ya da -main ekini sil; örneğin IRremote-master adını IRremote yap. Kütüphane klasörü adları harf ya da rakamla başlamalı, yalnızca İngilizce harf, rakam, alt çizgi, nokta ve tire içermeli ve en fazla 63 karakter olmalıdır; boşluk ve Türkçe karakter kullanma.
- IDE'yi yeniden aç ve kütüphanenin Dosya > Örnekler menüsünde göründüğünü kontrol et.
| Klasör yapısı | Sonuç |
|---|---|
| libraries/DHT_sensor_library/DHT.h | Doğru: eski (düz) yapı, IDE bulur |
| libraries/DHT_sensor_library/library.properties + src/DHT.h | Doğru: güncel yapı, IDE bulur |
| libraries/DHT-master/DHT-sensor-library-master/DHT.h | Yanlış: bir kat fazla klasör var, IDE kütüphaneyi bulamaz |
| libraries/DHT.h (klasörsüz dosya) | Yanlış: her kütüphane kendi klasöründe durmalıdır |
| libraries/Benim Kütüphanem/ | Riskli: boşluk ve Türkçe karakter kural dışıdır, derlemede sorun çıkarabilir |
| IDE'nin kurulum klasörü (ör. Program Files) | Yanlış: Arduino IDE 2 bu klasörde kütüphane aramaz; eski IDE 1.8'de ise IDE güncellenince ya da kaldırılınca kütüphane silinebiliyordu |
Kütüphane sürümünü değiştirmek: güncelleme ve eski sürüme dönme
Kütüphaneler zamanla gelişir ve büyük sürüm değişikliklerinde bazı fonksiyonların adı ya da kullanımı değişebilir. İnternette bulduğun bir örnek birkaç yıl önceki bir sürüm için yazılmışsa en yeni sürümle derlenmeyebilir ya da derlenip yanlış çalışabilir. Böyle durumlarda ya kütüphanenin, kodun yazıldığı sürümüne dönersin ya da kodu yeni sürüme uyarlarsın. Kütüphane Yöneticisi sürüm değiştirmeyi birkaç tıkla yapar:
- Kütüphane Yöneticisi'nde kütüphanenin adını ara ya da Tür filtresini Kurulu yap. Kartın üzerinde kurulu sürüm yazar.
- Kartın altındaki sürüm listesini aç. Diğer Sürümler başlığı altında kütüphanenin yayımlanmış bütün sürümleri sıralanır.
- İstediğin sürümü seç ve Kur'a bas. IDE eski sürümü kaldırıp seçtiğin sürümü kurar; bir kütüphanenin libraries klasöründe yalnızca tek bir sürümü bulunur.
- IDE açılışta bazen Kütüphanelerinizden bazıları için güncelleme mevcut. bildirimi gösterir. Buradan toplu güncelleme yapmadan önce çalışan projelerinin hangi sürümlere güvendiğini not et; toplu güncelleme birçok kütüphanenin büyük sürümünü bir anda değiştirebilir.
- Bir kütüphaneyi tamamen silmek için kartın üzerine gel ve Kaldır (Remove) düğmesine bas; IDE onay ister ve klasörü libraries içinden siler.
| Kütüphane | Eski kod | Yeni kod | Uyuşmazlığın belirtisi |
|---|---|---|---|
| IRremote | 2.x: IRrecv irrecv(11); irrecv.decode(&results); results.value | 3.x ve 4.x: IrReceiver.begin(11); IrReceiver.decode(); IrReceiver.decodedIRData.command | Eski kodda deprecated uyarıları, boş ya da hatalı tuş kodları |
| ArduinoJson | 6.x: StaticJsonDocument<200> doc; | 7.x: JsonDocument doc; | 7.x eski sınıfları deprecated uyarısıyla derler; 5.x kodu (StaticJsonBuffer) hiç derlenmez |
| LiquidCrystal I2C | GitHub sürümü: lcd.begin(); | Kütüphane Yöneticisi sürümü: lcd.init(); | no matching function for call to 'LiquidCrystal_I2C::begin()' |
| ESP32 kart paketi ve ESP32Servo | Kart paketi 2.x: ledcSetup(), ledcAttachPin() | Kart paketi 3.x: ledcAttach(); ESP32Servo 3.x | 'ledcSetup' was not declared in this scope |
Kodun hangi sürümle yazıldığını belirtmenin en iyi yolu, kütüphanelerin adını ve sürümünü dosyanın en üstüne yorum olarak yazmaktır. Bazı kütüphaneler sürümlerini bir makroyla da bildirir; örneğin ArduinoJson ARDUINOJSON_VERSION_MAJOR makrosunu tanımlar. Aşağıdaki kod yanlış ana sürüm kuruluysa derlemeyi anlaşılır bir mesajla durdurur, doğru sürümde ise küçük bir JSON metni üretip kütüphanenin sürümünü Seri Port Ekranı'na yazar:
1// ArduinoJson 7.x (Benoit Blanchon) gerekir / requires ArduinoJson 7.x
2#include <ArduinoJson.h>
3
4#if ARDUINOJSON_VERSION_MAJOR < 7
5#error "Bu kod ArduinoJson 7 ister, Kutuphane Yoneticisinden surumu degistir / This sketch needs ArduinoJson 7"
6#endif
7
8void setup() {
9 Serial.begin(115200);
10 while (!Serial) {} // yerel USB'li kartlarda seri portu bekle / wait for native USB serial
11
12 JsonDocument doc; // 7.x: boyut vermek gerekmez / 7.x: no capacity needed
13 doc["sensor"] = "DHT11";
14 doc["sicaklik"] = 23.5;
15 doc["nem"] = 48;
16
17 serializeJson(doc, Serial); // {"sensor":"DHT11","sicaklik":23.5,"nem":48}
18 Serial.println();
19 Serial.print(F("ArduinoJson: "));
20 Serial.println(ARDUINOJSON_VERSION); // ör. / e.g. 7.4.2
21}
22
23void loop() {
24}Bu yaklaşım, kodu sınıf arkadaşlarınla ya da internette paylaştığında yanlış sürüm kuran birinin anlamsız hatalar yerine ne yapması gerektiğini söyleyen tek bir satır görmesini sağlar. Komut satırını seviyorsan Arduino CLI ile belirli bir sürümü doğrudan kurabilirsin: arduino-cli lib install "DHT sensor [email protected]". Hangi kütüphanenin hangi sürümünün gerçekten kullanıldığını görmek için Tercihler'de derleme için ayrıntılı çıktıyı aç; derleme sonunda her kütüphane için Using library ... at version ... in folder: ... satırı yazılır.
No such file or directory hatası ve çözümü
Kütüphane eklerken en sık göreceğin hata budur. Derleyici kodundaki bir #include satırının istediği dosyayı hiçbir kütüphane klasöründe bulamazsa çıktı panelinde fatal error: DHT.h: No such file or directory ve compilation terminated. satırlarını, sağ altta ise Compilation error: DHT.h: No such file or directory bildirimini görürsün. Mesajdaki dosya adı sana hangi kütüphanenin eksik olduğunu söyler. Dikkat etmen gereken nokta, bu dosyanın her zaman senin yazdığın satırdan gelmeyebileceğidir; kurduğun bir kütüphane de başka bir kütüphaneyi çağırıyor olabilir:
| Mesajdaki dosya | Sebep | Çözüm |
|---|---|---|
| Kodunun #include ettiği dosya (DHT.h, LiquidCrystal_I2C.h) | Kütüphane hiç kurulmamış | Kütüphane Yöneticisi'nde ara ve kur |
| Adafruit_Sensor.h (DHT kodunda) | Bağımlılık eksik: kurulumda Gereklilikler olmadan kur seçilmiş | Adafruit Unified Sensor kütüphanesini kur |
| Adafruit_I2CDevice.h (OLED ya da RTC kodunda) | Adafruit BusIO eksik | Adafruit BusIO kütüphanesini kur |
| OneWire.h (DS18B20 kodunda) | DallasTemperature, OneWire'ı otomatik kurmamış | OneWire kütüphanesini ayrıca kur |
| SoftwareSerial.h (ESP32'de) | Bu kütüphane AVR kart paketiyle gelir, ESP32 paketinde yoktur | Donanım seri portunu (Serial2) kullan ya da EspSoftwareSerial kütüphanesini kur |
| Dht.h, liquidcrystal_i2c.h | Büyük-küçük harf hatası; IDE başlık dosyasını kütüphanelerde harfi harfine arar, bu yüzden Windows ve macOS'ta da hata verir | #include satırını kütüphanedeki dosya adıyla birebir aynı yaz |
| Kütüphane kurulu görünüyor ama dosya bulunamıyor | Elle kopyalamada fazladan klasör katı ya da IDE'nin baktığından farklı bir Eskiz Defteri (OneDrive) | Klasör yapısını ve Tercihler'deki Eskiz Defteri konumunu kontrol et |
Multiple libraries were found uyarısı ne demek?
Bu mesaj, kodundaki bir #include satırını karşılayabilecek birden fazla kütüphane bulunduğunda çıkar. Örneğin eski bir projeden kalma Servo kütüphanesini Belgeler klasörüne kurmuşsan IDE'nin kendi dahili Servo kütüphanesiyle birlikte iki aday olur ve çıktıda Multiple libraries were found for "Servo.h" satırını, altında da Used: C:\Users\<kullanıcı>\Documents\Arduino\libraries\Servo ve Not used: C:\Users\<kullanıcı>\AppData\Local\Arduino15\libraries\Servo satırlarını görürsün. Bu bir hata değil, bilgilendirmedir; derleme devam eder. Sorun yalnızca Used satırındaki kütüphane senin istediğin kütüphane değilse başlar. IDE seçimini kabaca şu sırayla yapar:
| Sıra | IDE neye bakar? | Örnek |
|---|---|---|
| 1 | Mimari uyumu | ESP32'de, library.properties dosyasında esp32 ya da * yazan kütüphane, yalnızca avr yazan kütüphaneye tercih edilir |
| 2 | Ad eşleşmesi | Servo.h için adı tam olarak Servo olan klasör, Servo-master ya da MyServo klasörünün önüne geçer |
| 3 | Karta özel olma | Mimari listesinde kartın mimarisini açıkça yazan kütüphane (ör. architectures=esp32), yalnızca * yazana göre önceliklidir |
| 4 | Konum | Eskiz Defteri'ndeki libraries klasörü kart paketinin kütüphanelerinden, onlar da IDE'nin dahili kütüphanelerinden önce gelir |
| 5 | Son çare | Her şey eşitse adı, #include edilen dosya adına en çok benzeyen kütüphane seçilir |
- Used satırını oku: Kullanılan klasör beklediğin kütüphane mi? Öyleyse hiçbir şey yapman gerekmez; mesajı görmezden gelebilirsin.
- Fazladan kopyayı kaldır: Yanlış kütüphane seçiliyorsa Kütüphane Yöneticisi'nde onu bulup Kaldır'a bas ya da IDE kapalıyken klasörünü Eskiz Defteri'ndeki libraries klasöründen sil.
- Eski IDE kalıntılarına dikkat et: Arduino IDE 1.8 döneminden kalma, elle kopyalanmış eski kütüphaneler Belgeler klasöründe durur ve konum önceliği sayesinde IDE'nin güncel dahili kütüphanelerinin önüne geçer.
- Aynı kütüphanenin iki kopyasını tutma: libraries klasöründe IRremote ve IRremote-master gibi iki kopya varsa Kütüphane Yöneticisi o kütüphaneyi güncelleyemez ve tekrarları elle silmeni ister.
- Silmeden önce yedekle: Klasörü silmek yerine önce geçici olarak masaüstüne taşı; her şey yolunda giderse sonra sil.
Kütüphane örneklerini açmak ve kütüphaneyi koda eklemek
Bir kütüphaneyi öğrenmenin en hızlı yolu örnek eskizleridir. Örnekler kurduğun sürümle birlikte gelir; bu yüzden internetteki kodların aksine kurulu sürümle her zaman uyumludur. Dosya > Örnekler menüsü seçili karta göre hazırlanır ve şu bölümlerden oluşur:
- Dahili örnekler: 01.Basics, 02.Digital gibi, Blink'in de bulunduğu IDE'nin temel örnekleri.
- Kart adıyla başlayan bölüm (ör. Arduino Uno Örnekleri): IDE ile ve seçili kartın paketiyle gelen kütüphanelerin örnekleri. Uno seçiliyse Servo, EEPROM ve SoftwareSerial, ESP32 seçiliyse WiFi, WebServer ve Preferences örneklerini burada bulursun.
- Eklenen Kütüphanelerin Örnekleri: Senin kurduğun kütüphanelerin örnekleri (İngilizce arayüzde Examples from Custom Libraries). Örneğin DHT sensor library > DHTtester.
Kurulu bir kütüphanenin örneklerine Kütüphane Yöneticisi'nde kartın yanındaki üç nokta menüsünden de ulaşabilirsin. Örnek yeni bir pencerede açılır; değiştirip kaydetmek istediğinde IDE senden yeni bir ad ve konum ister, çünkü örnek dosyaları kütüphanenin klasöründe korunur. Kendi eskizine bir kütüphaneyi eklemek için Eskiz > Kütüphane Ekle menüsünde kütüphanenin adına tıklaman yeterlidir: IDE gerekli #include satırlarını kodun en üstüne kendisi yazar. Bazı kütüphaneler birden fazla başlık dosyası içerdiği için bu menü birkaç satır ekleyebilir; kullanmadıklarını silebilirsin.
ESP32'de kütüphane uyumluluğu

ESP32 de Arduino IDE ile programlandığı için kütüphanelerin büyük çoğunluğu, özellikle I2C, SPI ya da tek kablo üzerinden haberleşen sensör ve ekran kütüphaneleri ESP32'de değişiklik yapmadan çalışır. Sorun çıkaranlar, Arduino Uno'daki ATmega328P işlemcisinin zamanlayıcılarına ve yazmaçlarına doğrudan dokunan kütüphanelerdir. IDE bir kütüphanenin library.properties dosyasında ESP32 mimarisini görmezse derlemenin başında şu uyarıyı yazar: WARNING: library LiquidCrystal I2C claims to run on avr architecture(s) and may be incompatible with your current board which runs on esp32 architecture(s). Bu yalnızca bir uyarıdır: LiquidCrystal I2C yalnızca Wire kütüphanesini kullandığı için ESP32'de sorunsuz çalışır. Servo kütüphanesi ise derlemeyi This library only supports boards with an AVR, SAM, SAMD, NRF52 ile başlayan bir #error mesajıyla bilerek durdurur. ESP32'nin kart paketiyle gelen WiFi, WebServer, HTTPClient, Preferences ve BluetoothSerial kütüphanelerini de Kütüphane Yöneticisi'nden ayrıca kurma; aynı adı taşıyan başka kütüphaneler yalnızca karışıklık yaratır.
| Uno'da kullandığın | ESP32'de kullan | Neden? |
|---|---|---|
| Servo | ESP32Servo (Kütüphane Yöneticisi) | Servo kütüphanesi ESP32'yi desteklemez ve #error ile durur |
| SoftwareSerial | Serial1, Serial2 (donanım UART) ya da EspSoftwareSerial | SoftwareSerial AVR paketine aittir; ESP32'de zaten üç donanım UART vardır |
| EEPROM | Preferences (kart paketiyle gelir) | ESP32'de EEPROM flaş bellekte taklit edilir; Preferences anahtar-değer olarak daha güvenli ve kolay saklar |
| TimerOne, MsTimer2 | Ticker (kart paketiyle gelir) | AVR zamanlayıcı yazmaçlarına erişen kütüphaneler ESP32'de derlenmez |
Aynı kodu Uno'da, ESP32'de ve Pico'da kullanmak istiyorsan kart paketlerinin tanımladığı mimari makrolarıyla her kartta doğru kütüphaneyi seçebilirsin. ESP32 paketi ARDUINO_ARCH_ESP32, Pico'nun arduino-pico paketi ARDUINO_ARCH_RP2040, Uno ve Nano gibi AVR kartlar ise ARDUINO_ARCH_AVR makrosunu tanımlar. Aşağıdaki servo kodu üç kartta da derlenir; ESP32 için yalnızca ESP32Servo kütüphanesini kurman gerekir:
1// Aynı kod Uno, ESP32 ve Pico'da / Same sketch on Uno, ESP32 and Pico
2#if defined(ARDUINO_ARCH_ESP32)
3 #include <ESP32Servo.h> // Kütüphane Yöneticisi: ESP32Servo / Library Manager: ESP32Servo
4 const int SERVO_PIN = 18; // güvenli bir GPIO / a safe GPIO
5#elif defined(ARDUINO_ARCH_RP2040)
6 #include <Servo.h> // arduino-pico paketiyle gelir / bundled with the arduino-pico core
7 const int SERVO_PIN = 15; // GP15
8#else
9 #include <Servo.h> // IDE ile gelir (Uno, Nano, Mega) / bundled with the IDE
10 const int SERVO_PIN = 9;
11#endif
12
13Servo servo;
14
15void setup() {
16#if defined(ARDUINO_ARCH_ESP32)
17 servo.setPeriodHertz(50); // yalnız ESP32: 50 Hz servo sinyali / ESP32 only: 50 Hz servo signal
18#endif
19 servo.attach(SERVO_PIN, 500, 2400); // darbe aralığı mikrosaniye / pulse range in microseconds
20}
21
22void loop() {
23 servo.write(0); delay(1000); // 0 derece / 0 degrees
24 servo.write(90); delay(1000); // orta konum / center
25 servo.write(180); delay(1000); // 180 derece / 180 degrees
26}ESP32'de kütüphane sürümüyle kart paketi sürümünün uyumlu olması da önemlidir. ESP32 kart paketinin 3.x serisinde PWM (LEDC) fonksiyonları değişti: ledcSetup() ve ledcAttachPin() kaldırıldı, yerine ledcAttach() geldi. Bu yüzden eski fonksiyonları kullanan kütüphane sürümleri ve örnek kodlar 3.x ile 'ledcSetup' was not declared in this scope hatası verir. ESP32Servo'nun güncel sürümleri 3.x kart paketi için yazılmıştır. Çözüm ya kütüphanenin güncel sürümüne geçmek ya da eski bir projeyi olduğu gibi derlemen gerekiyorsa Kart Yöneticisi'nden esp32 paketini son 2.x sürümü olan 2.0.17'ye düşürmektir. Kartın pinlerini ve ilk Wi-Fi projesini ESP32 Nedir? yazısında, servonun bağlantısını ve beslemesini Servo Motor Nedir? yazısında bulabilirsin.
Raspberry Pi Pico'da kütüphane: Arduino IDE ve MicroPython
Pico'yu Arduino IDE ile programlıyorsan (Earle F. Philhower'ın Raspberry Pi Pico/RP2040/RP2350 kart paketi) kütüphaneler Uno'dakiyle aynı yöntemlerle kurulur ve aynı libraries klasörüne iner. Bu paketin mimari adı rp2040'tır; Pico 2'deki RP2350 yongası da aynı adı kullanır. Wire, SPI, Servo, EEPROM ve PIO tabanlı SoftwareSerial kart paketinin içinde gelir, Pico W'de WiFi kütüphanesi de hazırdır. Adafruit'in sensör ve ekran kütüphanelerinin çoğu Pico'da sorunsuz çalışır; AVR yazmaçlarına dokunan kütüphaneler ise burada da çalışmaz. Pico'da EEPROM flaş bellekte taklit edildiği için EEPROM.begin() ile başlatılır ve değişiklikler EEPROM.commit() ile kaydedilir.
MicroPython'da ise kütüphane, Pico'nun dosya sistemindeki bir .py (ya da derlenmiş .mpy) dosyasıdır ve genellikle /lib klasörüne konur. machine, time, dht, onewire, ds18x20, neopixel ve framebuf gibi modüller MicroPython ile birlikte gelir; Thonny'nin Shell bölümüne help("modules") yazarak tam listeyi görebilirsin. Listede olmayan bir sürücüyü dört yolla eklersin:
| Yöntem | Ne zaman? | Nasıl? |
|---|---|---|
| Thonny paket yöneticisi | En kolay yol; Pico USB ile bağlıyken | Araçlar > Paketleri yönet (Tools > Manage packages) menüsünde ara; ör. ssd1306 için micropython-ssd1306'yı seç ve kur. Dosya Pico'daki /lib klasörüne iner |
| mpremote | Komut satırını kullanıyorsan | Bilgisayarda mpremote mip install ssd1306 komutu kütüphaneyi micropython-lib'den indirip Pico'ya kopyalar |
| mip (yalnız Pico W) | Pico W Wi-Fi'ye bağlıyken, bilgisayara gerek kalmadan | Pico'nun kendisinde import mip ve mip.install("ssd1306") komutlarını çalıştır |
| Elle kopyalama | Kütüphane tek bir .py dosyasıysa | Thonny'nin Dosyalar panelinde Pico'daki /lib klasörünü aç, bilgisayardaki dosyaya sağ tıkla ve Pico'ya yükle |
1# Pico W: kütüphane yoksa karttan kur, sonra dene / Pico W: install the library from the board if missing, then test
2import time
3
4try:
5 import ssd1306 # zaten kurulu mu? / already installed?
6except ImportError:
7 import network, mip
8 wlan = network.WLAN(network.STA_IF)
9 wlan.active(True)
10 wlan.connect("AG_ADI", "SIFRE") # kendi Wi-Fi ağın / your own Wi-Fi network
11 for _ in range(40): # en fazla 20 sn bekle / wait up to 20 s
12 if wlan.isconnected():
13 break
14 time.sleep(0.5)
15 if not wlan.isconnected(): # ağa bağlanamadı / could not join the network
16 raise RuntimeError("Wi-Fi baglantisi yok / no Wi-Fi connection")
17 mip.install("ssd1306") # /lib klasörüne iner / lands in /lib
18 import ssd1306
19
20from machine import Pin, I2C
21
22i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000) # GP4 = SDA, GP5 = SCL
23oled = ssd1306.SSD1306_I2C(128, 64, i2c)
24oled.fill(0) # ekranı temizle / clear the screen
25oled.text("Kutuphane OK", 0, 0)
26oled.show() # ekrana gönder / push to the screenKodun ilk kısmı ssd1306 modülünü içe aktarmayı dener; modül yoksa Pico W'yi Wi-Fi'ye bağlayıp kütüphaneyi micropython-lib'den indirir ve ardından ekrana yazı yazar. Wi-Fi'si olmayan Pico'da aynı işi Thonny ya da mpremote ile bilgisayardan yaparsın. OLED'in bağlantısı ve çizim komutları OLED Ekran (SSD1306) Kullanımı yazısında, MicroPython'un temel komutları ve dosya sistemi MicroPython Temelleri yazısında. Pico'yu ilk kez kuruyorsan Raspberry Pi Pico Nedir? rehberiyle başla.
Kütüphane eklerken sık yapılan hatalar
- Kütüphaneyi kurup kart paketini unutmak: ESP32 ya da Pico için kütüphane kurmak kartı IDE'ye tanıtmaz; önce Kart Yöneticisi'nden kart paketini, sonra kütüphaneyi kur.
- Bağımlılıkları atlamak: Gereklilikler olmadan kur seçeneği, Adafruit_Sensor.h ya da Adafruit_I2CDevice.h gibi eksik dosya hatalarının en sık sebebidir.
- Zip'i açıp .ZIP menüsüyle eklemeye çalışmak: Bu menü yalnızca zip dosyasını kabul eder; elinde klasör varsa onu elle libraries klasörüne kopyala.
- Kütüphaneyi yanlış yere koymak: Eskiz klasörünün içine, masaüstüne ya da IDE'nin kurulum klasörüne kopyalanan kütüphane bulunmaz; doğru yer Eskiz Defteri'ndeki libraries klasörüdür.
- Aynı kütüphanenin birkaç kopyası: IRremote ve IRremote-master gibi iki klasör, Multiple libraries uyarısına ve yanlış sürümün kullanılmasına yol açar; birini sil.
- Her şeyi körü körüne güncellemek: Büyük sürüm atlayan bir güncelleme çalışan bir projeyi bozabilir; güncellemeden önce kütüphanenin sürüm notlarına göz at.
- Kendi kütüphanende Türkçe karakter ya da boşluk: Kendi kütüphaneni yazıyorsan klasör ve dosya adlarında yalnızca İngilizce harf, rakam ve alt çizgi kullan.
Arduino kütüphane ekleme bir kez oturduğunda her yeni sensör ve ekran birkaç dakikalık bir iş olur: Kütüphane Yöneticisi'nde doğru yazarın kütüphanesini bul, bağımlılıklarıyla birlikte kur, önce kütüphanenin kendi örneğini dene, sonra kendi koduna geç. BlueGrays uygulamasında DHT11 ile sıcaklık ve nem ölçümü, I2C LCD ekran, servo motor, RFID kart okuyucu, IR kumanda, WS2812B LED ve OLED Pong oyunu gibi kütüphane kullanan projeleri devre şemaları ve adım adım açıklanmış kodlarıyla bulabilirsin.
Sıkça sorulan sorular
Arduino kütüphaneleri nereye kurulur?
Kütüphane Yöneticisi, .ZIP ya da elle kurduğun kütüphaneler Eskiz Defteri'ndeki libraries klasörüne iner; Windows'ta bu genellikle Belgeler\Arduino\libraries, Linux'ta ~/Arduino/libraries klasörüdür. Kesin yeri Dosya > Tercihler penceresindeki Eskiz Defteri konumu satırında görürsün. IDE ile gelen dahili kütüphaneler ve kart paketlerinin kütüphaneleri ise ayrı olarak Arduino15 klasöründe durur.
İndirdiğim ZIP kütüphane Arduino IDE'ye neden eklenmiyor?
En sık sebep, zip dosyasında tek bir kütüphane klasörü yerine birden fazla klasör olması ya da kütüphanenin bir alt klasöre gömülmüş olmasıdır; IDE bu durumda "multiple files found in zip file top level" ya da "library not valid" hatası verir. Zip'i çıkar, içinde library.properties ya da .h dosyası bulunan klasörü bul ve onu libraries klasörüne elle kopyala. Zip'i önceden açtıysan .ZIP menüsü klasörü kabul etmez.
Arduino'da kütüphane nasıl silinir?
Kütüphane Yöneticisi'nde kütüphaneyi bul, kartın üzerine gel ve Kaldır düğmesine bas; IDE klasörü libraries içinden siler. Elle kurduğun bir kütüphaneyi IDE kapalıyken Eskiz Defteri'ndeki libraries klasöründen silebilirsin. Arduino15 klasöründeki kart paketi kütüphanelerine ise dokunma.
Arduino "No such file or directory" hatası nasıl düzelir?
Mesajdaki .h dosyasının hangi kütüphaneye ait olduğunu bul ve o kütüphaneyi Kütüphane Yöneticisi'nden kur. Dosya senin yazmadığın bir başlıksa (ör. Adafruit_Sensor.h) kurduğun kütüphanenin bir bağımlılığı eksiktir. Kütüphane kurulu olduğu hâlde hata sürüyorsa #include satırındaki büyük-küçük harfleri ve elle kopyalanan klasörün yapısını kontrol et.
İnternet olmadan Arduino kütüphanesi kurulabilir mi?
Evet. Kütüphanenin zip dosyasını internete bağlı başka bir bilgisayarda indirip USB bellekle taşıyabilirsin. Zip dosyasını .ZIP Kütüphanesi Ekle menüsüyle ekle ya da çıkardığın klasörü Eskiz Defteri'ndeki libraries klasörüne kopyala; kütüphanenin bağımlılıklarını da aynı şekilde ayrı ayrı getirmeyi unutma.
Arduino kütüphaneleri ESP32 ve Raspberry Pi Pico'da çalışır mı?
I2C, SPI ya da tek kablo üzerinden haberleşen sensör ve ekran kütüphanelerinin çoğu ESP32'de ve Pico'nun Arduino paketinde değişiklik yapmadan çalışır. AVR işlemcinin zamanlayıcılarına doğrudan erişen Servo ve TimerOne gibi kütüphanelerin yerine ESP32'de ESP32Servo ve Ticker kullanılır; Pico'nun kart paketi ise kendi Servo kütüphanesini içerir. "claims to run on avr architecture(s)" uyarısı tek başına kütüphanenin çalışmayacağı anlamına gelmez.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
DHT11 İle Sıcaklık Ve Nem
Odan kaç derece, hava nemli mi, kuru mu? DHT11 sensörü sıcaklığı ve nemi ölçer, Arduino da bu değerleri iki satırlık LCD ekrana yazar ve birkaç saniyede bir yeniler. Sensöre bir şey olursa ekranda hat

I2C İle LCD Ekran Kullanımı
Arduino'ya kendi ekranını kazandır ve ilk mesajını yazdır. İki satırlık LCD ekran yalnızca birkaç kabloyla bağlanır; önce üst satıra bir selam, ardından alt satıra ikinci bir yazı gelir, ekran temizle

Servo Motor Kullanım
Küçük bir servo motorun kolu sırayla üç konuma döner: en başa, tam ortaya ve en sona, her durakta iki saniye bekleyerek. Arduino motora hangi açıda durması gerektiğini söyler, motor da oraya gidip ora

IR Alıcı Ve Kumanda Değer Okuma
Evdeki televizyon kumandasının her tuşu, gözle görülmeyen bir ışıkla gizli bir kod gönderir. Kızılötesi alıcı bu ışığı yakalar ve Arduino bastığın her tuşun kodunu bilgisayar ekranına yazar. Bu kodlar

RFID Değer Okuma
Apartman anahtarlığında ya da giriş kartında gizli bir kimlik numarası saklıdır; bu proje onu okur. Kartı RFID okuyucuya yaklaştırınca Arduino kartın numarasını bilgisayar ekranına yazar. Kartlı kapı

WS2812B Kullanımı
Her ışığı ayrı ayrı renklendirebildiğin akıllı bir LED şeridiyle tanışırsın. Arduino önce şeritteki ilk beş LED'i kırmızı yakar, bir saniye sonra kalan beşini mavi yakar, sonra hepsini söndürür ve baş

Raket Topu Oyunu - SSD1306
Bir top, iki raket ve sen: video oyunlarının en eskilerinden masa tenisini küçük bir OLED ekranda oynarsın. İki butonla sağdaki raketini yukarı aşağı oynatırsın, soldaki raketi ise topu gözüyle izleye

DS1302 RTC Saat Modülü Kurulum
Arduino kapansa bile zamanı unutmayan küçük bir saat modülünü çalıştırırsın. Modülün kendi minik pili vardır; saat bir kez ayarlandıktan sonra tarih ve saat her saniye bilgisayar ekranına yazılır. Ala
Diğer yazılar
BlueGrays uygulaması
Bu devreyi telefonunda adım adım kur
Devre şeması, kod ve parça listesi tek ekranda. 160'tan fazla Arduino, ESP32 ve Pico projesi seni bekliyor.
Telefonunla tara
Kamerayı koda tut; telefonunun uygulama mağazası açılır.
ya da mağazada aç

