Arduino Kod Yüklenmiyor: avrdude, Port ve Sürücü Hatası Çözümü
Arduino'ya kod yüklenmiyor mu? avrdude not in sync hatası, görünmeyen COM port, CH340 sürücüsü, Nano Old Bootloader, ESP32 BOOT tuşu ve Pico BOOTSEL çözümü.
Arduino'ya kod yüklenmiyor ve çıktı penceresinde kırmızı bir avrdude hatası mı görüyorsun? Endişelenme: bu sorunların neredeyse tamamı kartın bozuk olmasından değil; yalnızca şarj eden bir USB kablosundan, eksik CH340 sürücüsünden, yanlış seçilmiş kart ya da porttan, pin 0 ve 1'e bağlı bir modülden veya portu meşgul eden başka bir programdan kaynaklanır. Doğru sırayla kontrol edersen çoğu durumda birkaç dakikada çözersin; kart gerçekten arızalıysa bile bunu kesin olarak anlamanın basit bir yolu vardır.
Bu rehberde önce yükleme sırasında arka planda neler olduğunu ve hata mesajının nasıl okunacağını göreceksin. Ardından belirti, sebep ve çözüm sütunlarından oluşan bir teşhis tablosuyla sorunu adım adım daraltacağız. Arduino Nano'daki ATmega328P (Old Bootloader) ayarını, Seri Monitör ve başka programların portu kilitlemesini, ESP32'deki Failed to connect hatasını ve BOOT tuşunu, Raspberry Pi Pico'daki BOOTSEL ve UF2 yöntemini de ayrı başlıklarda ele alıyoruz. Her bölümde, sorunu çözdükten sonra kartını denemen için kısa test kodları var.

Kod yükleme nasıl çalışır: derleme hatası mı, yükleme hatası mı?
Yükle düğmesine bastığında iki ayrı iş olur. Önce IDE kodunu derler; bu aşama başarılı olursa çıktı penceresinde taslağın kaç bayt yer kapladığını söyleyen bir satır görürsün (İngilizce arayüzde Sketch uses 924 bytes). Ardından avrdude adlı program seçtiğin portu açar, kartı DTR sinyaliyle yeniden başlatır ve kartın içindeki küçük yükleyici programla, yani bootloader ile el sıkışır. Bootloader resetten sonra yalnızca yaklaşık bir saniye dinler; bu sürede veri gelmezse kartta duran eski program çalışmaya devam eder. Zincirin hangi halkasının koptuğu hata mesajından anlaşılır. Kırmızı yazı derleme sırasında çıkıyorsa sorun kodundadır, kartla ya da kabloyla ilgisi yoktur.
| Aşama | Ne olur? | Bozulursa göreceğin mesaj |
|---|---|---|
| 1. Derleme | Kod, işlemcinin anlayacağı makine koduna çevrilir | Compilation error: 'x' was not declared in this scope (kod hatası, yükleme sorunu değil) |
| 2. Portu açma | IDE seçili COM portunu açar | no upload port provided, can't open device, Access is denied |
| 3. Reset | DTR sinyali kartı yeniden başlatır | programmer is not responding |
| 4. El sıkışma | avrdude ile bootloader senkron olur | stk500_getsync(): not in sync: resp=0x00 |
| 5. Yazma ve doğrulama | Program flaş belleğe yazılır, geri okunup karşılaştırılır | verification error, first mismatch at byte |
En sık görülen avrdude hataları ve anlamları
| Hata mesajı (anahtar kısım) | Ne anlama gelir? | İlk bakılacak yer |
|---|---|---|
| stk500_recv(): programmer is not responding | Port açıldı ama karttan hiç cevap gelmedi | Port seçimi, kablo, pin 0 ve 1, Nano için Old Bootloader |
| stk500_getsync() attempt 1 of 10: not in sync: resp=0x00 | Hatta veri yok, bootloader el sıkışmaya katılmadı | Processor ayarı, otomatik reset, bootloader |
| not in sync: resp=0x00 dışında bir değer (ör. 0xfe) | Bir şey cevap veriyor ama bootloader değil | Pin 0'a bağlı modül, kartta çalışan programın seri çıktısı, hız uyuşmazlığı |
| ser_open(): can't open device "\\.\COM3": Access is denied. | Port başka bir program tarafından kullanılıyor | Seri Monitör, ikinci IDE penceresi, PuTTY, Cura gibi programlar |
| ser_open(): can't open device ... The system cannot find the file specified. | Seçili port artık yok | Kart çıkmış ya da port numarası değişmiş; portu yeniden seç |
| Failed uploading: no upload port provided | Hiç port seçilmemiş | Araçlar > Port ya da üstteki kart seçici |
| Device signature = 0x1e950f ... Expected signature for ATmega2560 | Seçili kartın yongası ile takılı yonga farklı | Kart menüsünde hedef kartı doğru seç (0x1e950f, ATmega328P'nin kimliğidir); bu satır çoğunlukla ISP ile bootloader yazarken çıkar |
| stk500v2_ReceiveMessage(): timeout | Mega 2560 seçili ama karttan cevap yok | Kart gerçekten Mega mı, port doğru mu? |
| verification error, first mismatch at byte 0x0000 | Yazılan ile geri okunan aynı değil | Kablo, USB hub, yetersiz besleme, yıpranmış flaş |
Adım adım teşhis tablosu: belirti, sebep, çözüm
Tabloyu yukarıdan aşağıya doğru oku; ilk satırlar en sık görülen ve en kolay çözülen sorunlardır. Her değişiklikten sonra yüklemeyi yeniden dene. Birden fazla şeyi aynı anda değiştirirsen sorunu hangisinin çözdüğünü öğrenemezsin ve aynı hata bir dahaki sefere yine seni şaşırtır.
| Belirti | Olası sebep | Çözüm |
|---|---|---|
| Kart takılınca hiçbir LED yanmıyor | USB portu ya da kablo güç vermiyor, kartta kısa devre var | Başka port ve kablo dene, bütün modülleri sök, 5V ile GND arasını ölç |
| Güç LED'i yanıyor ama Araçlar > Port gri ya da boş | Yalnızca şarj eden kablo ya da eksik sürücü | Veri kablosu kullan; Aygıt Yöneticisi'nde sarı ünlemli USB2.0-Serial varsa CH340 sürücüsünü kur |
| Listede birden fazla COM port var | Bluetooth ve sistemin sanal portları | Kartı çıkarıp tak, kaybolup geri gelen portu seç |
| Failed uploading: no upload port provided | Port seçilmemiş | Üstteki kart seçiciden ya da Araçlar > Port menüsünden portu seç |
| Access is denied, Erişim engellendi, port busy | Port başka bir programda açık | İkinci IDE penceresini, Seri Çizici'yi, PuTTY'yi, Cura'yı ve Python betiklerini kapat, kartı çıkarıp tak |
| Nano'da not in sync: resp=0x00 | Kartta eski bootloader var | Araçlar > Processor > ATmega328P (Old Bootloader) |
| Aynı hata, D0 ya da D1'e modül bağlı | Modül seri hatta konuşup el sıkışmayı bozuyor | Yükleme sırasında D0 ve D1 kablolarını çıkar, modülü SoftwareSerial ile başka pinlere taşı |
| Aynı hata, karta hiçbir şey bağlı değil | Yanlış kart veya port, bozuk otomatik reset, silinmiş bootloader | Ayarları kontrol et, elle reset dene, loopback testi yap, gerekirse bootloader yaz |
| Device signature satırında beklenmeyen kimlik | Kart menüsünde yanlış model seçili | Kartın üzerindeki yonga yazısına göre doğru kartı seç |
| Yükleme yarıda kesiliyor, verification error | Kalitesiz kablo, USB hub, motor veya servonun çektiği akım | Kısa ve kaliteli kablo, doğrudan bilgisayar portu, motorlar için harici besleme |
| Kart takılınca bilgisayar USB portunu kapatıyor | Devrede kısa devre ya da aşırı akım | Bütün kabloları sök, kartı tek başına dene, devreyi parça parça geri ekle |
| ESP32: Connecting... ardından Failed to connect | Kart indirme moduna giremedi | Connecting yazısı çıkınca BOOT tuşuna basılı tut |
| Pico: port yok ya da No drive to deploy | Kart BOOTSEL modunda değil | BOOTSEL'e basılı tutarak USB kablosunu tak |
Hızlı kontrol listesi ve yükleme test kodu
- Kartın üzerindeki her şeyi sök: shield, modüller ve pin 0 ile 1'deki kablolar. Yalnızca USB kablosu takılı kalsın.
- Kartı doğrudan bilgisayarın arkasındaki bir USB portuna tak; hub, uzatma kablosu ve kasanın ön panelindeki girişlerden kaçın.
- Araçlar > Port menüsünü aç ve listeye bak. Kartı çıkarıp yeniden tak, hangi portun kaybolup geri geldiğini not et. Liste hiç değişmiyorsa sorun kablo ya da sürücüdedir.
- Araçlar > Kart menüsünden kartının tam modelini seç; Nano kullanıyorsan Araçlar > Processor altından doğru bootloader'ı da seç.
- Portu başka bir programın ya da ikinci bir IDE penceresinin kullanmadığından emin ol; şüphe varsa hepsini kapat.
- Ayrıntılı yükleme çıktısını aç ve aşağıdaki küçük test kodunu yükle. Hatasız olduğunu bildiğin bir kodla denemek, derleme sorunlarını hesaptan çıkarır.
- Yine olmuyorsa reset tuşuna bas: L LED'i bir ya da birkaç kez hızlıca yanıp sönüyorsa bootloader çalışıyordur. Ardından aşağıdaki loopback testine geç.
- Başka bir bilgisayarda ya da başka bir kartla dene. Sorun kartla birlikte taşınıyorsa karttadır; bilgisayarda kalıyorsa sürücüde ya da işletim sistemi ayarlarındadır.
1// Yükleme testi: LED yanıp söner, sayaç yazılır / Upload test: blinks the LED, prints a counter
2unsigned long sayac = 0; // çalışma sayacı / run counter
3
4void setup() {
5 pinMode(LED_BUILTIN, OUTPUT); // Uno ve Nano'da pin 13 / pin 13 on Uno and Nano
6 Serial.begin(9600);
7 Serial.println("Yukleme basarili / Upload OK");
8}
9
10void loop() {
11 digitalWrite(LED_BUILTIN, HIGH);
12 delay(200); // yanma süresi: değiştirip tekrar yükle / on time: change it and re-upload
13 digitalWrite(LED_BUILTIN, LOW);
14 delay(800);
15 Serial.println(sayac++); // Seri Monitör 9600 baud / Serial Monitor at 9600 baud
16}Kod yüklendiyse L LED'i kısa yanıp uzun söner ve Seri Monitör'ü (Türkçe arayüzde Araçlar > Seri Port Ekranı) 9600 baud hızında açtığında sayaç artar. Yüklemenin gerçekten yeni kodu karta yazdığından emin olmak istersen delay(200) değerini delay(50) yapıp yeniden yükle: yanıp sönme ritmi değişmiyorsa kartta hâlâ eski program çalışıyordur. Seri Monitör'de anlamsız karakterler görürsen Seri Monitör'deki baud hızı ayarı koddaki değerle aynı değildir; bu bir yükleme hatası sayılmaz.
COM port görünmüyor: USB kablosu ve CH340, CP2102 sürücüsü
Port menüsü gri ya da boşsa ilk şüpheli kablodur. Telefon şarj aletlerinden çıkan birçok ince kabloda yalnızca iki güç teli bulunur; D+ ve D- veri telleri hiç yoktur. Bu kabloyla kartın güç LED'i yandığı için insan kandırılır, ama bilgisayar karşısında hiçbir cihaz görmez ve takma sesi bile çıkmaz. Kablonu bir telefonla dosya aktarmayı deneyerek ya da çalıştığını bildiğin başka bir kartla test edebilirsin. Uno'nun kalın B tipi kablosunda bu sorun daha nadirdir; Nano'nun mini USB'sinde, ESP32 ve Pico'nun mikro USB ya da USB-C kablolarında çok sık görülür.
Kablo sağlamsa ikinci şüpheli sürücüdür. USB soketinin yanındaki yonganın üzerindeki yazıyı oku: orijinal Arduino Uno ve Mega'da ATmega16U2, klon Uno ve Nano'larda çoğunlukla CH340G ya da CH340C, ESP32 geliştirme kartlarında genellikle CP2102 veya CH340 bulunur. Windows'ta Aygıt Yöneticisi'ni aç: kart doğru tanındıysa Bağlantı noktaları (COM ve LPT) başlığı altında görünür. Diğer aygıtlar altında sarı ünlemli bir USB2.0-Serial görüyorsan CH340 sürücüsü eksiktir.

| USB yongası | Hangi kartlarda? | Windows'ta görünen ad | macOS ve Linux port adı |
|---|---|---|---|
| ATmega16U2 | Orijinal Uno R3, Mega 2560 | Arduino Uno (COMx) | /dev/cu.usbmodem…, /dev/ttyACM0 |
| CH340G, CH340C | Klon Uno, Nano, Mega, bazı ESP32 kartlar | USB-SERIAL CH340 (COMx) | /dev/cu.usbserial-…, /dev/ttyUSB0 |
| CP2102, CP2104 | ESP32 DevKit, NodeMCU | Silicon Labs CP210x USB to UART Bridge (COMx) | /dev/cu.SLAB_USBtoUART ya da /dev/cu.usbserial-…, /dev/ttyUSB0 |
| FT232RL | Eski orijinal Nano, FTDI adaptörleri | USB Serial Port (COMx) | /dev/cu.usbserial-…, /dev/ttyUSB0 |
| CH9102 | Yeni ESP32 geliştirme kartları | USB-Enhanced-SERIAL CH9102 (COMx) | /dev/cu.wchusbserial… ya da /dev/cu.usbmodem…, /dev/ttyACM0 |
| Yerleşik USB (RP2040, ATmega32U4) | Raspberry Pi Pico, Leonardo, Micro | USB Seri Cihaz ya da kartın adı (COMx) | /dev/cu.usbmodem…, /dev/ttyACM0 |
Windows 10 ve 11, CH340 ile CP2102 sürücülerini çoğu zaman Windows Update üzerinden kendisi kurar. Kurmazsa yonga üreticisinin sitesinden CH340 için CH341SER, CP2102 için CP210x VCP sürücüsünü indirip kur, ardından kartı çıkarıp yeniden tak. macOS'un güncel sürümlerinde bu iki yonganın sürücüsü yerleşiktir; farklı kaynaklardan eski sürücüleri üst üste kurmak çoğu zaman sorunu büyütür. Linux'ta sürücüler çekirdekte hazırdır, ancak portu kullanabilmek için kullanıcını dialout grubuna eklemen (sudo usermod -a -G dialout $USER) ve oturumu kapatıp açman gerekir; yoksa Permission denied hatası alırsın. Ubuntu 22.04 ve sonrasında CH340'lı kart takılır takılmaz port kayboluyorsa suçlu genellikle ekran okuyucu paketi brltty'dir; kullanmıyorsan sudo apt remove brltty ile kaldır.
Yanlış kart, işlemci ya da port seçimi
Arduino IDE 2'de kart ve port, üst çubuktaki açılır listeden ya da Araçlar > Kart ve Araçlar > Port menülerinden seçilir. Windows'ta listede COM1 ya da Bluetooth'a ait birkaç sanal port görebilirsin; doğru olanı bulmanın en kolay yolu kartı çıkarıp hangi portun kaybolduğuna bakmaktır. Kart menüsünde Uno yerine Mega ya da Nano yerine Leonardo gibi yanlış bir model seçilirse avrdude ya hiç cevap alamaz ya da Device signature satırında beklemediği bir yonga kimliği görür. Bir de şuna dikkat et: normal yükleme için Ctrl+U kısayolunu kullan. Eskiz > Programlayıcı Kullanarak Yükle komutu harici bir ISP programlayıcı bekler ve başarılı olursa karttaki bootloader'ı siler; bundan sonra kart USB'den yükleme kabul etmez.
Arduino Nano kod yüklenmiyor: ATmega328P (Old Bootloader)
Piyasadaki uygun fiyatlı Nano kartların çoğu CH340 yongalı klonlardır ve bunların büyük kısmında eski bootloader yüklüdür. Arduino, 2018 başında Nano'nun bootloader'ını Uno'daki daha küçük ve hızlı Optiboot ile değiştirdi; IDE'deki varsayılan ATmega328P seçeneği o günden beri 115200 baud ile konuşur. Eski bootloader ise 57600 baud bekler. Hızlar uyuşmayınca kart hiç cevap vermiyormuş gibi görünür ve not in sync: resp=0x00 hatası on deneme boyunca tekrarlanır. Çözüm tek bir menü ayarıdır: Araçlar > Processor > ATmega328P (Old Bootloader). Bu seçenekler kartın paketinden geldiği için Arduino IDE 2'de menünün adı Türkçe arayüzde de Processor olarak görünür (eski IDE 1.8'de İşlemci). Hangisinin doğru olduğunu bilmiyorsan seçenekleri sırayla dene; yanlış seçim karta hiçbir zarar vermez.
| Processor seçeneği | Bootloader | Yükleme hızı | Ne zaman seçilir? |
|---|---|---|---|
| ATmega328P | Optiboot (yeni) | 115200 baud | Orijinal Nano ve bootloader'ı güncellenmiş kartlar |
| ATmega328P (Old Bootloader) | ATmegaBOOT (eski) | 57600 baud | CH340'lı klon Nano'ların çoğu |
| ATmega168 | ATmegaBOOT (eski) | 19200 baud | Yonganın üzerinde ATmega168 yazan eski kartlar |
Pin 0 ve 1'e bağlı modüller yüklemeyi engeller
Uno ve Nano'da USB-seri yonga, ATmega328P'ye D0 (RX) ve D1 (TX) pinleri üzerinden 1 kΩ'luk dirençlerle bağlıdır. Kod yüklenirken bu hat bilgisayara ayrılmıştır. HC-05 Bluetooth modülü, GPS, ESP-01 ya da parmak izi sensörü gibi seri haberleşen bir modül bu pinlere bağlıysa kendi verisini de hatta basar ya da hattı sabit bir seviyede tutar ve bootloader'ın el sıkışmasını bozar. Sonuç yine programmer is not responding ya da not in sync hatasıdır. En hızlı çözüm yükleme sırasında D0 ve D1'deki kabloları çıkarmaktır; kalıcı çözüm ise modülü SoftwareSerial ile başka pinlere taşımaktır:
1#include <SoftwareSerial.h>
2
3// HC-05 TX -> D10, HC-05 RX <- D11 (gerilim bölücüyle / through a voltage divider)
4SoftwareSerial bt(10, 11); // RX, TX pinleri / RX, TX pins
5
6void setup() {
7 Serial.begin(9600); // USB: Seri Monitör / USB: Serial Monitor
8 bt.begin(9600); // HC-05 veri modu hızı / HC-05 data mode baud rate
9 Serial.println("Hazir / Ready");
10}
11
12void loop() {
13 if (bt.available()) Serial.write(bt.read()); // telefondan bilgisayara / phone to PC
14 if (Serial.available()) bt.write(Serial.read()); // bilgisayardan telefona / PC to phone
15}Bu kodda HC-05'in TX ucu D10'a, RX ucu D11'e bağlanır. HC-05'in RX girişi 3,3 V seviyesinde çalıştığı için D11 ile arasına 1 kΩ ve 2 kΩ'luk dirençlerle bir gerilim bölücü koy. Artık modül takılıyken de kod yükleyebilir, Seri Monitör'e yazdıklarını telefona gönderebilirsin. Bağlantının tamamı ve AT komut modu için HC-05 Bluetooth Modülü yazısına bak. Mega kullanıyorsan SoftwareSerial'e gerek yok; kartta Serial1 (TX1 = D18, RX1 = D19) gibi donanımsal ek seri portlar vardır.
Seri Monitör ve portu meşgul eden programlar
Bir seri port aynı anda yalnızca tek bir program tarafından açılabilir. Windows'ta Access is denied (Türkçe sistemde Erişim engellendi), macOS ve Linux'ta Resource busy mesajı bu yüzden çıkar. Arduino IDE kendi Seri Monitör'ünü yükleme sırasında genellikle otomatik olarak duraklatır, ama bu her sürümde ve her kartta, özellikle ESP32'de, kusursuz çalışmaz; hata alıyorsan önce Seri Monitör sekmesini kapat. Sorun çoğunlukla portu başka bir yerin tutmasından çıkar: ikinci bir IDE penceresi, açık kalan Seri Çizici, PuTTY, Cura gibi 3D yazıcı programları, VS Code'daki PlatformIO monitörü ya da arka planda çalışan bir Python betiği. Bunları kapat, kartı çıkarıp tak ve yeniden dene. Linux'ta portu hangi programın tuttuğunu sudo lsof /dev/ttyUSB0 komutuyla görebilirsin.
Kart bozuk mu? Loopback testi ve bootloader yazma
Yukarıdakilerin hepsini denedin ve hâlâ yüklenmiyorsa sorunun USB tarafında mı yoksa ana işlemcide mi olduğunu ayırman gerekir. Uno ve Nano için klasik yöntem loopback (geri döngü) testidir: ana işlemciyi resette tutar, USB-seri yongayı kendi kendisiyle konuşturursun. Bu test için hiçbir kod yüklemen gerekmez.
- Karttaki bütün kabloları sök, yalnızca USB kablosu takılı kalsın.
- Bir jumper kabloyla RESET pinini GND'ye bağla; ATmega328P böylece resette kalır ve hatta karışmaz.
- İkinci bir kabloyla D0 ve D1 pinlerini birbirine bağla.
- IDE'de kartın portunu seç ve Seri Monitör'ü aç; hız ayarı bu test için önemli değildir.
- Kutucuğa birkaç harf yazıp gönder. Yazdığın metin aynen geri geliyorsa kablo, sürücü ve USB-seri yonga sağlamdır; sorun ana işlemcide ya da bootloader'dadır. Hiçbir şey dönmüyorsa sorun USB tarafındadır.
- Test bitince iki kabloyu da çıkarmayı unutma.
Loopback testi geçtiği hâlde yükleme olmuyorsa ve reset tuşuna bastığında L LED'i hiç hızlıca yanıp sönmüyorsa bootloader silinmiş ya da yonga değiştirilmiş olabilir. İkinci bir Uno ile bootloader'ı yeniden yazabilirsin. Programlayıcı olacak Uno'ya Dosya > Örnekler > 11.ArduinoISP > ArduinoISP kodunu yükle. Sonra programlayıcının D10 pinini hedef kartın RESET pinine, D11, D12 ve D13'ü hedefin aynı numaralı pinlerine, 5V ve GND'yi de birbirine bağla. Programlayıcı Uno'nun RESET ile GND pini arasına 10 µF'lık bir kondansatör tak; bu, onun kendi kendini resetlemesini engeller. Son olarak Araçlar > Programlayıcı > Arduino as ISP seç, Kart menüsünde hedef kartı seç ve Araçlar > Bootloader'ı Yükle komutunu çalıştır. Bu yolla klon bir Nano'ya yeni Optiboot'u da yazabilirsin.
ESP32 kod yüklenmiyor: Failed to connect ve BOOT tuşu
ESP32'de yüklemeyi avrdude değil esptool yapar. Çıktıda önce Connecting........_____..... satırı belirir; esptool bu sırada kartı indirme (download) moduna sokmaya çalışır. Başaramazsa A fatal error occurred: Failed to connect to ESP32 ile başlayan bir hata görürsün. Güncel esptool sürümlerinde kart normal modda açıldıysa mesajın devamı Wrong boot mode detected (0x13)! The chip needs to be in download mode. olur; 0x13 kartın indirme modu yerine normal açılış moduna geçtiğini gösterir. Karttan hiç cevap gelmiyorsa mesaj No serial data received ile biter; eski sürümler bu durumu Timed out waiting for packet header diye yazar. Kart kendiliğinden indirme moduna giremiyorsa bunu elle yaparsın.

- IDE'de Yükle'ye tıkla ve çıktı penceresini izle.
- Connecting... yazısı belirdiği anda kartın üzerindeki BOOT düğmesine basılı tut.
- Hâlâ bağlanmazsa BOOT basılıyken EN düğmesine bir kez kısa bas ve bırak.
- Çıktıda Writing at ile başlayan satırlar ve yükleme yüzdesi akmaya başlayınca BOOT düğmesini bırak.
- Yükleme Hard resetting via RTS pin... satırıyla biter. Program başlamazsa EN düğmesine bir kez bas.
Peki bu neden olur? ESP32'nin indirme moduna girmesi için açılış anında GPIO0 pininin LOW olması gerekir. Geliştirme kartlarındaki iki transistörlük otomatik reset devresi bunu USB yongasının DTR ve RTS sinyalleriyle kendiliğinden yapar; ucuz kartlarda bu devre zamanlamayı kaçırabilir. Her seferinde BOOT'a basmaktan sıkıldıysan kalıcı bir çözüm var: kartın EN pini ile GND arasına 10 µF'lık bir elektrolitik kondansatör bağla (eksi bacağı GND'ye). Kondansatör EN hattının yükselmesini geciktirir ve otomatik reset devresine GPIO0'ı LOW tutması için zaman kazandırır.
| ESP32 hata mesajı | Olası sebep | Çözüm |
|---|---|---|
| Wrong boot mode detected (0x13) | Otomatik reset devresi kartı indirme moduna sokamadı | BOOT tuşu; kalıcı çözüm için EN ile GND arasına 10 µF |
| No serial data received ya da Timed out waiting for packet header | Karttan hiç veri gelmiyor: veri taşımayan kablo, yanlış port ya da indirme moduna hiç girmeyen kart | Veri kablosu, Araçlar > Port menüsünde doğru port, BOOT tuşu |
| This chip is ESP32-S3 not ESP32. Wrong --chip argument? | Araçlar > Kart menüsünde kartındakinden farklı bir ESP32 modeli seçili | Kartın üzerindeki modüle uygun modeli seç (ESP32, ESP32-S3 ve ESP32-C3 ayrı kartlardır) |
| Could not open COM3, the port is busy or doesn't exist | Seri Monitör ya da başka bir program portu tutuyor | Seri Monitör'ü ve diğer programları kapat, kartı çıkarıp tak |
| Invalid head of packet: Possible serial noise or corruption | Uzun ya da kalitesiz kablo, yetersiz besleme, yüksek yükleme hızı | Araçlar > Upload Speed değerini 921600'den 115200'e düşür |
| Yükleme başarılı ama açılışta flash read err, 1000 | GPIO12 açılışta HIGH çekilmiş, flaş gerilimi yanlış seçiliyor | GPIO12'ye bağlı modülü başka bir pine taşı |
| Yüklemeden sonra port kayboluyor (ESP32-S3, ESP32-C3) | Yerleşik USB kullanan kartta program çöktü ya da USB'yi kapattı | BOOT basılıyken USB'yi tak; Araçlar > USB CDC On Boot: Enabled |
1// ESP32 yükleme testi / ESP32 upload test
2const int LED_PIN = 2; // birçok DevKit kartında dahili LED / onboard LED on many DevKit boards
3
4void setup() {
5 pinMode(LED_PIN, OUTPUT);
6 Serial.begin(115200); // Seri Monitör 115200 baud / Serial Monitor at 115200 baud
7 delay(500);
8 Serial.print("Model: ");
9 Serial.println(ESP.getChipModel()); // ör. ESP32-D0WD-V3 / e.g. ESP32-D0WD-V3
10 Serial.print("Flash (MB): ");
11 Serial.println(ESP.getFlashChipSize() / (1024 * 1024));
12 Serial.print("CPU (MHz): ");
13 Serial.println(getCpuFrequencyMhz());
14}
15
16void loop() {
17 digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // LED'i tersle / toggle the LED
18 delay(500);
19}Raspberry Pi Pico: BOOTSEL ve UF2 ile yükleme
Pico'da ayrı bir USB-seri yonga yoktur; RP2040'ın kendi USB birimi vardır ve önyükleyici, yonganın silinemeyen ROM belleğinde durur. Bu yüzden Pico'yu yazılımla bozmak neredeyse imkânsızdır. BOOTSEL düğmesine basılı tutarak USB kablosunu takarsan Pico bilgisayara RPI-RP2 adlı bir flaş bellek gibi görünür (Pico 2'de sürücünün adı RP2350'dir). Bu sürücüye sürükleyip bıraktığın .uf2 uzantılı dosya karta yazılır ve kart kendiliğinden yeniden başlar; MicroPython'u da bu yolla kurarsın.
Arduino IDE ile Pico programlıyorsan ilk yüklemede henüz bir COM port yoktur; kartı BOOTSEL basılı olarak tak ve Yükle'ye tıkla. İlk koddan sonra kart bir seri port açar ve sonraki yüklemelerde BOOTSEL gerekmez. Kodun çökerse ya da USB'yi kapatırsa port yine kaybolur ve No drive to deploy hatası alırsın; o zaman BOOTSEL yöntemine geri dön. MicroPython kullanıyorsan Thonny'nin sağ alt köşesinden yorumlayıcı olarak MicroPython (Raspberry Pi Pico) seçili olmalıdır. Pico'nun pinleri ve kurulumu için Raspberry Pi Pico Nedir? yazısına bakabilirsin.
| Belirti | Olası sebep | Çözüm |
|---|---|---|
| RPI-RP2 sürücüsü hiç görünmüyor | Şarj kablosu ya da BOOTSEL'e kablo takıldıktan sonra basılmış | Veri kablosu kullan; önce BOOTSEL'e bas, sonra kabloyu tak, sürücü görününce bırak |
| Arduino IDE: No drive to deploy | Kart BOOTSEL modunda değil ve seri port yok | BOOTSEL ile yeniden tak, sonra Yükle'ye tıkla |
| Thonny: Couldn't find the device automatically | MicroPython kurulu değil ya da kart hâlâ BOOTSEL modunda | Thonny'deki Install or update MicroPython seçeneğiyle UF2'yi kur |
| Thonny: Device is busy or does not respond | main.py yoğun bir döngüde, komutlara cevap vermiyor | Stop düğmesine ya da Ctrl+C'ye bas; olmazsa kartı çıkarıp tak |
| Kod çalıştı ama kart tek başına başlamıyor | Dosya Pico'ya main.py adıyla kaydedilmemiş | Dosyayı Raspberry Pi Pico konumuna main.py adıyla kaydet |
| Kart sürekli takılıyor, hiçbir şey yüklenmiyor | Flaşta bozuk dosya ya da hatalı program | flash_nuke.uf2 ile flaşı sil, MicroPython'u yeniden kur |
1import time
2from machine import Pin
3
4time.sleep(3) # açılışta 3 sn bekle, Thonny durdurabilsin / wait 3 s so Thonny can stop the script
5
6led = Pin("LED", Pin.OUT) # Pico ve Pico W dahili LED / onboard LED on Pico and Pico W
7sayac = 0
8while True:
9 led.toggle()
10 print("Calisiyor / running", sayac)
11 sayac += 1
12 time.sleep(0.5)Gözden kaçan küçük ama sinsi sebepler
- Leonardo, Micro ve Uno R4: Yerleşik USB'li bu kartlarda yükleme sırasında port kısa süreliğine değişebilir. Yükleme takılırsa Yükle'ye tıkla ve derleme bitip yükleme aşaması başladığı anda reset tuşuna bir kez bas (Uno R4'te hızlıca iki kez); kart bir süre bootloader'da bekler ve kod bu sırada yüklenir.
- Bozuk otomatik reset: Uno ya da Nano'da otomatik reset çalışmıyorsa reset tuşuna basılı tut, Yükle'ye tıkla ve çıktıda taslağın boyutunu gösteren satır belirdiği anda tuşu bırak.
- Shield ve harici devreler: Motor sürücü shield'i ya da 5V hattını zorlayan bir devre, yükleme anında besleme gerilimini düşürüp yazmayı yarıda kesebilir.
- macOS'ta yanlış port: Port listesindeki /dev/cu.Bluetooth-Incoming-Port ve /dev/cu.debug-console kart değil, sistemin kendi portlarıdır. Kartın portunun adında usbmodem, usbserial ya da wchusbserial geçer; emin değilsen kartı çıkarıp takarak hangisinin kaybolduğuna bak.
- Kullanıcı adında Türkçe karakter: Windows kullanıcı klasörünün adında ş, ğ, ı gibi harfler varsa bazı kart paketlerinde, özellikle ESP32'de, derleme ve yükleme araçları dosya bulamayabilir. Taslak klasörünü Tercihler'den Türkçe karakter içermeyen bir yola taşı; sorun sürerse yeni bir Windows kullanıcısı aç.
- Taslak çok büyük: Sketch too big uyarısı bir yükleme hatası değildir; kodun Uno'nun bootloader'dan arta kalan yaklaşık 31,5 KB'lık flaşına sığmadığını söyler. Kütüphaneleri ve uzun metinleri azalt ya da daha büyük bir karta geç.
- Uykudan sonra kilitlenen port: Bilgisayar uykudan uyandıktan sonra port takılı kalabilir; IDE'yi kapatıp açmak ya da kartı başka bir USB portuna takmak çoğu zaman yeter.
Yükleme çalıştı: şimdi ne yapabilirsin?
- İlk devre: LED ve dirençle kendi Blink devreni kur, ardından bir buton ekleyerek ilk etkileşimli projeni yap.
- Seri haberleşme: Pin 0 ve 1'in yüklemeyle ilişkisini öğrendiğine göre HC-05 Bluetooth modülü ile telefondan LED yakmayı dene.
- Sensör okumak: Arduino Sensörleri Rehberi ile sıcaklık, mesafe ve ışık ölçen ilk projelerini seç.
- Kablosuza geçmek: ESP32 ile Wi-Fi'ye bağlanan ve telefondan kontrol edilen bir proje yap; OTA özelliği sayesinde bir süre sonra kodu kablosuz olarak da yükleyebilirsin.
- Doğru kartı seçmek: Uno, Nano ve Mega arasında kararsızsan Hangi Arduino'yu Almalıyım? yazısına göz at.
Kod yükleme hataları ilk karşılaştığında can sıkıcıdır, ama her birinin mantıklı bir sebebi vardır ve hemen hepsi aynı sırayla bulunur: kablo, sürücü, port, kart ayarı, seri hat ve en son bootloader. Bu sırayı aklında tutarsan bir sonraki hatayı dakikalar içinde çözersin. Kartın kod almaya başladığında BlueGrays uygulamasında Arduino, ESP32 ve Raspberry Pi Pico için LED yakmaktan Wi-Fi ve kablosuz OTA güncellemeye kadar pek çok projeyi adım adım devre şeması ve hazır koduyla bulabilir, kartını hemen işe koşabilirsin.
Sıkça sorulan sorular
Arduino'ya kod neden yüklenmiyor?
En sık sebepler yalnızca şarj eden USB kablosu, eksik CH340 sürücüsü, yanlış kart ya da port seçimi ve pin 0 ile 1'e bağlı modüllerdir. Klon Nano kartlarda ayrıca Araçlar > Processor ayarının ATmega328P (Old Bootloader) olması gerekir. Bunları sırayla kontrol edersen kartın neredeyse her zaman sağlam çıkar.
avrdude stk500_getsync not in sync resp=0x00 hatası nasıl çözülür?
Bu hata bilgisayarın karttaki bootloader ile el sıkışamadığını gösterir. Önce doğru portu ve kartı seç, Nano kullanıyorsan Araçlar > Processor menüsünden Old Bootloader seçeneğini dene ve D0 ile D1'deki kabloları çıkar. Hata sürüyorsa loopback testiyle USB tarafını kontrol et, gerekirse bootloader'ı yeniden yaz.
Arduino bilgisayarda neden görünmüyor?
Araçlar > Port menüsü boşsa kablo veri taşımıyordur ya da USB-seri yonganın sürücüsü kurulu değildir. Başka bir veri kablosu dene ve Windows Aygıt Yöneticisi'nde kartın Bağlantı noktaları (COM ve LPT) altında görünüp görünmediğine bak. Diğer aygıtlar altında sarı ünlemli USB2.0-Serial görüyorsan CH340 sürücüsünü kur.
CH340 sürücüsü nasıl kurulur?
Windows 10 ve 11 sürücüyü çoğu zaman otomatik kurar; kurmazsa üretici WCH'nin CH341SER paketini indirip çalıştır ve kartı yeniden tak. Güncel macOS sürümlerinde sürücü yerleşiktir, Linux'ta ise çekirdekle birlikte gelir. Linux'ta yalnızca kullanıcını dialout grubuna eklemen gerekir.
ESP32'ye kod yüklerken BOOT tuşuna ne zaman basılır?
Çıktıda Connecting... yazısı belirdiği anda BOOT tuşuna basılı tut, yükleme yüzdeleri akmaya başlayınca bırak. Bu, ESP32'yi indirme moduna sokar. Her yüklemede gerekiyorsa EN ile GND arasına 10 µF'lık bir kondansatör eklemek sorunu çoğu zaman kalıcı olarak çözer.
Raspberry Pi Pico bilgisayarda görünmüyorsa ne yapmalıyım?
BOOTSEL düğmesine basılı tutarak bir veri kablosuyla Pico'yu bilgisayara tak; kart RPI-RP2 adlı bir sürücü olarak görünmelidir. Bu modda MicroPython UF2 dosyasını sürükleyip bırakabilir ya da Arduino IDE'den kod yükleyebilirsin. Sürücü hiç görünmüyorsa kablo veri taşımıyordur; Pico'nun önyükleyicisi ROM'da olduğu için yazılımla bozulmaz.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
Led Yakma
Arduino ile tek bir LED'i belirli aralıklarla yakıp söndüren temel giriş projesi. digitalWrite ve delay fonksiyonlarının kullanımını öğretir.

ESP32 ile LED Yakma
ESP32 ile temel GPIO çıkışı kullanımını öğretir. Bir LED'i dijital pinden açıp kapatarak yanıp sönme efekti elde ederiz. Arduino UNO'daki klasik blink projesinin ESP32 versiyonu; pin haritası ve syntax aynı kalır, fark sadece pin numaralarında.

ESP32 Dahili LED Yakma
ESP32 DevKit V1'in üzerindeki dahili (built-in) mavi LED'i yanıp söndürmek. Hiçbir harici bileşen gerekmez! ESP32 satın aldığında ilk denemen gereken proje. GPIO 2 dahili LED'e bağlıdır.

Raspberry Pi Pico Dahili LED Yakma (GP25 Onboard LED)
Raspberry Pi Pico serisinin açılış projesi! Pico'nun üzerindeki dahili LED'i (GP25 pinine bağlı yeşil LED) yakıp söndürerek kartın çalıştığını doğruluyoruz — klasik "Hello World" tarzı ilk deney. Harici bileşene ihtiyaç YOK, sadece Pico ve USB kablosu yeterli. Kod **MicroPython** ile yazıldı (Raspberry Pi Vakfı'nın resmi olarak desteklediği dil). Thonny IDE ile Pico'yu programlarken `machine.Pin` sınıfı, `Pin.OUT` mode, `led.on()/off()` metodları ve `time.sleep()` fonksiyonlarını kavrarsın. Seri

HC-SR04 Mesafe Ölçme (Serial Ekran)
HC-SR04 ultrasonik sensör ile mesafe ölçüp sonucu Serial Monitor'da cm cinsinden gösteren proje. Ses dalgası ile mesafe hesaplama prensibini öğretir.

Bluetooth İle Telefondan Led Yakma
HC-06 Bluetooth modülü ile telefondan gönderilen komutlarla LED'leri açıp kapatan kablosuz kontrol projesi. Seri haberleşme üzerinden Bluetooth veri alışverişini öğretir.

2 Arduino Tek Yönlü Haberleşme
İki Arduino arasında seri haberleşme ile tek yönlü veri aktarımı yapan proje. Verici tarafta buton basışını algılayıp alıcı tarafta LED'i kontrol etmeyi öğretir.

ESP32 OTA Update — Kablosuz Firmware Yükleme (LCD Ekranlı)
Bu projede ESP32'ye USB kablosu olmadan, Wi-Fi üzerinden yeni firmware yüklemeyi öğreneceksin. `ArduinoOTA` kütüphanesi ile ESP32 ağda görünür hale gelir ve Arduino IDE'nin "Network port" sekmesinde `bluegrays-ota` olarak otomatik listelenir. İlk yükleme USB ile yapılır, sonrasında tüm güncellemeler kablosuz olur — saha cihazları için çok kritik bir özelliktir. I2C LCD ekranda WiFi durumu, IP, hostname, OTA yükleme yüzdesi ve hata mesajları hem Türkçe hem İngilizce gösterilir. Parola koruması, h
Diğer yazılar
Arduino, ESP32 ya da Pico'ya kod yüklenmediğinde hata mesajını okumayı, sebebi belirti tablosuyla bulmayı ve kablo, sürücü, port ve bootloader sorunlarını adım adım çözmeyi öğren.

