Rehberler · 13 dk okuma

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.

Arduino Uno R3 kartı
Arduino Uno: USB soketinin yanındaki küçük yonga bilgisayarla konuşmayı sağlar; orijinal kartlarda ATmega16U2, klonlarda çoğunlukla CH340 bulunur. TX, RX ve L LED'leri yüklemeyi takip etmene yardım eder.

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şamaNe olur?Bozulursa göreceğin mesaj
1. DerlemeKod, işlemcinin anlayacağı makine koduna çevrilirCompilation error: 'x' was not declared in this scope (kod hatası, yükleme sorunu değil)
2. Portu açmaIDE seçili COM portunu açarno upload port provided, can't open device, Access is denied
3. ResetDTR sinyali kartı yeniden başlatırprogrammer is not responding
4. El sıkışmaavrdude ile bootloader senkron olurstk500_getsync(): not in sync: resp=0x00
5. Yazma ve doğrulamaProgram flaş belleğe yazılır, geri okunup karşılaştırılırverification error, first mismatch at byte
Hatayı doğru okumak için Dosya > Tercihler penceresinde Ayrıntılı çıktıyı görüntüle satırındaki yükle kutusunu işaretle. Çıktının en sonundaki exit status 1 ya da Failed uploading yalnızca bir şeylerin ters gittiğini söyler; asıl ipucu onun üstündeki, avrdude: ile başlayan ilk hata satırıdır. Forumlarda yardım isterken de bu satırı kopyala.

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 respondingPort açıldı ama karttan hiç cevap gelmediPort seçimi, kablo, pin 0 ve 1, Nano için Old Bootloader
stk500_getsync() attempt 1 of 10: not in sync: resp=0x00Hatta 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ğilPin 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ıyorSeri 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 yokKart çıkmış ya da port numarası değişmiş; portu yeniden seç
Failed uploading: no upload port providedHiç port seçilmemişAraçlar > Port ya da üstteki kart seçici
Device signature = 0x1e950f ... Expected signature for ATmega2560Seç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(): timeoutMega 2560 seçili ama karttan cevap yokKart gerçekten Mega mı, port doğru mu?
verification error, first mismatch at byte 0x0000Yazılan ile geri okunan aynı değilKablo, 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.

BelirtiOlası sebepÇözüm
Kart takılınca hiçbir LED yanmıyorUSB portu ya da kablo güç vermiyor, kartta kısa devre varBaş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 varBluetooth ve sistemin sanal portlarıKartı çıkarıp tak, kaybolup geri gelen portu seç
Failed uploading: no upload port providedPort seçilmemişÜstteki kart seçiciden ya da Araçlar > Port menüsünden portu seç
Access is denied, Erişim engellendi, port busyPort 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=0x00Kartta eski bootloader varAraç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ı bozuyorYü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ğilYanlış kart veya port, bozuk otomatik reset, silinmiş bootloaderAyarları kontrol et, elle reset dene, loopback testi yap, gerekirse bootloader yaz
Device signature satırında beklenmeyen kimlikKart menüsünde yanlış model seçiliKartın üzerindeki yonga yazısına göre doğru kartı seç
Yükleme yarıda kesiliyor, verification errorKalitesiz kablo, USB hub, motor veya servonun çektiği akımKısa ve kaliteli kablo, doğrudan bilgisayar portu, motorlar için harici besleme
Kart takılınca bilgisayar USB portunu kapatıyorDevrede kısa devre ya da aşırı akımBütün kabloları sök, kartı tek başına dene, devreyi parça parça geri ekle
ESP32: Connecting... ardından Failed to connectKart indirme moduna giremediConnecting yazısı çıkınca BOOT tuşuna basılı tut
Pico: port yok ya da No drive to deployKart BOOTSEL modunda değilBOOTSEL'e basılı tutarak USB kablosunu tak

Hızlı kontrol listesi ve yükleme test kodu

  1. 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.
  2. Kartı doğrudan bilgisayarın arkasındaki bir USB portuna tak; hub, uzatma kablosu ve kasanın ön panelindeki girişlerden kaçın.
  3. 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.
  4. 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ç.
  5. Portu başka bir programın ya da ikinci bir IDE penceresinin kullanmadığından emin ol; şüphe varsa hepsini kapat.
  6. 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.
  7. 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ç.
  8. 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.
Arduino (C++)
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.

CH340 USB-TTL dönüştürücü modülü
CH340 yongası: klon Arduino Uno ve Nano kartların çoğunda USB ile seri haberleşmeyi bu yonga yapar; bilgisayarın kartı görmesi için sürücüsünün kurulu olması gerekir.
USB yongasıHangi kartlarda?Windows'ta görünen admacOS ve Linux port adı
ATmega16U2Orijinal Uno R3, Mega 2560Arduino Uno (COMx)/dev/cu.usbmodem…, /dev/ttyACM0
CH340G, CH340CKlon Uno, Nano, Mega, bazı ESP32 kartlarUSB-SERIAL CH340 (COMx)/dev/cu.usbserial-…, /dev/ttyUSB0
CP2102, CP2104ESP32 DevKit, NodeMCUSilicon Labs CP210x USB to UART Bridge (COMx)/dev/cu.SLAB_USBtoUART ya da /dev/cu.usbserial-…, /dev/ttyUSB0
FT232RLEski orijinal Nano, FTDI adaptörleriUSB Serial Port (COMx)/dev/cu.usbserial-…, /dev/ttyUSB0
CH9102Yeni 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, MicroUSB 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.

Kartı taktığın anda bilgisayar USB portunu kapatıyorsa ya da kart sürekli bağlanıp kopuyorsa devrede kısa devre ya da aşırı akım vardır. Arduino Uno'da USB hattını koruyan 500 mA'lik, kendiliğinden sıfırlanan bir sigorta bulunur; sigorta atınca kart hiç görünmez. Bütün kabloları sök, multimetreyle 5V ile GND arasını ölç ve büyük motorlarla servoları USB'nin 5V'u yerine harici bir kaynaktan besle.

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ğiBootloaderYükleme hızıNe zaman seçilir?
ATmega328POptiboot (yeni)115200 baudOrijinal Nano ve bootloader'ı güncellenmiş kartlar
ATmega328P (Old Bootloader)ATmegaBOOT (eski)57600 baudCH340'lı klon Nano'ların çoğu
ATmega168ATmegaBOOT (eski)19200 baudYonganı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:

Arduino (C++)
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.

  1. Karttaki bütün kabloları sök, yalnızca USB kablosu takılı kalsın.
  2. Bir jumper kabloyla RESET pinini GND'ye bağla; ATmega328P böylece resette kalır ve hatta karışmaz.
  3. İkinci bir kabloyla D0 ve D1 pinlerini birbirine bağla.
  4. IDE'de kartın portunu seç ve Seri Monitör'ü aç; hız ayarı bu test için önemli değildir.
  5. 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.
  6. 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.

ESP32 geliştirme kartı
ESP32 geliştirme kartı: kartın üzerindeki EN (reset) ve BOOT (GPIO0) düğmeleri, otomatik yükleme çalışmadığında kartı elle indirme moduna almak için kullanılır.
  1. IDE'de Yükle'ye tıkla ve çıktı penceresini izle.
  2. Connecting... yazısı belirdiği anda kartın üzerindeki BOOT düğmesine basılı tut.
  3. Hâlâ bağlanmazsa BOOT basılıyken EN düğmesine bir kez kısa bas ve bırak.
  4. Çıktıda Writing at ile başlayan satırlar ve yükleme yüzdesi akmaya başlayınca BOOT düğmesini bırak.
  5. 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 headerKarttan hiç veri gelmiyor: veri taşımayan kablo, yanlış port ya da indirme moduna hiç girmeyen kartVeri 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çiliKartı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 existSeri Monitör ya da başka bir program portu tutuyorSeri Monitör'ü ve diğer programları kapat, kartı çıkarıp tak
Invalid head of packet: Possible serial noise or corruptionUzun 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, 1000GPIO12 açılışta HIGH çekilmiş, flaş gerilimi yanlış seçiliyorGPIO12'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
ESP32'nin GPIO0, GPIO2, GPIO12 ve GPIO15 pinleri açılış sırasında okunan strapping (ayar) pinleridir. GPIO2'yi HIGH'a çeken ya da GPIO0'ı LOW'a inmekten alıkoyan bir modül indirme moduna girmeyi engeller; GPIO12'yi HIGH yapan bir modül ise kartın hiç açılmamasına yol açar. Yükleme yalnızca devre bağlıyken başarısız oluyorsa önce bu pinlere bak. Güvenli pinlerin listesi için Pinout aracına ve ESP32 Nedir? yazısına göz at.
Arduino (C++)
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.

BelirtiOlası 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 deployKart BOOTSEL modunda değil ve seri port yokBOOTSEL ile yeniden tak, sonra Yükle'ye tıkla
Thonny: Couldn't find the device automaticallyMicroPython kurulu değil ya da kart hâlâ BOOTSEL modundaThonny'deki Install or update MicroPython seçeneğiyle UF2'yi kur
Thonny: Device is busy or does not respondmain.py yoğun bir döngüde, komutlara cevap vermiyorStop düğmesine ya da Ctrl+C'ye bas; olmazsa kartı çıkarıp tak
Kod çalıştı ama kart tek başına başlamıyorDosya 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üklenmiyorFlaşta bozuk dosya ya da hatalı programflash_nuke.uf2 ile flaşı sil, MicroPython'u yeniden kur
MicroPython
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.
Yeni bir kartı ilk kez denerken projenin kendi kodu yerine her zaman yukarıdaki test kodu gibi basit ve hatasız olduğunu bildiğin bir kodla başla. Basit kod yükleniyor da projen yüklenmiyorsa sorun kartta değil; ya kodun derlenmesinde ya da projede kullandığın pinlerdedir. Bu ayrımı yapmak teşhisin yarısıdır.

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.

Tüm projeleri gör
Led Yakma
#1Başlangıç

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.

4.7(163)
782
ESP32 ile LED Yakma
#103Başlangıç

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.

4.7(36)
92
ESP32 Dahili LED Yakma
#106Başlangıç

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.

4.8(29)
53
Raspberry Pi Pico Dahili LED Yakma (GP25 Onboard LED)
#147Başlangıç

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

5.0(1)
9
HC-SR04 Mesafe Ölçme (Serial Ekran)
#27Başlangıç

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.

4.6(44)
65
Bluetooth İle Telefondan Led Yakma
#34Başlangıç
Premium

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.

4.8(68)
88
2 Arduino Tek Yönlü Haberleşme
#57Orta
Premium

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.

4.4(37)
50
ESP32 OTA Update — Kablosuz Firmware Yükleme (LCD Ekranlı)
#132İleri
Premium

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

4.7(13)
21

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.

Arduino Kod Yüklenmiyor: avrdude, Port ve Sürücü Hatası Çözümü | BlueGrays