Arduino Sketch lässt sich nicht hochladen: avrdude-Fehler lösen
Arduino-Upload klappt nicht? Lösungen für avrdude not in sync, fehlenden COM-Port, CH340-Treiber, Nano Old Bootloader, ESP32-BOOT-Taste und Pico BOOTSEL.
Dein Arduino-Sketch lässt sich nicht hochladen und im Ausgabefenster steht ein roter avrdude-Fehler? Keine Sorge: Fast nie ist das Board kaputt. Meist steckt ein reines Ladekabel, ein fehlender CH340-Treiber, ein falsch gewähltes Board oder ein falscher Port, ein Modul an Pin 0 und 1 oder ein anderes Programm dahinter, das den Port blockiert. Wenn du in der richtigen Reihenfolge prüfst, hast du das Problem meist in wenigen Minuten gelöst; und selbst wenn das Board wirklich defekt ist, kannst du das mit einem einfachen Test sicher feststellen.
In dieser Anleitung siehst du zuerst, was beim Hochladen im Hintergrund passiert und wie du die Fehlermeldung liest. Danach grenzen wir das Problem mit einer Diagnosetabelle aus Symptom, Ursache und Lösung Schritt für Schritt ein. Außerdem behandeln wir die Einstellung ATmega328P (Old Bootloader) beim Arduino Nano, den seriellen Monitor und andere Programme, die den Port sperren, den ESP32-Fehler Failed to connect mit der BOOT-Taste sowie die BOOTSEL- und UF2-Methode beim Raspberry Pi Pico. In jedem Abschnitt findest du einen kurzen Test-Sketch, mit dem du dein Board nach der Lösung prüfen kannst.

So funktioniert das Hochladen: Kompilierfehler oder Upload-Fehler?
Wenn du auf Hochladen klickst, passieren zwei getrennte Dinge. Zuerst kompiliert die IDE deinen Code; klappt das, zeigt das Ausgabefenster eine Zeile mit der Größe des Sketches in Bytes (in der englischen Oberfläche Sketch uses 924 bytes). Dann öffnet das Programm avrdude den gewählten Port, startet das Board über das DTR-Signal neu und nimmt Kontakt mit dem kleinen Ladeprogramm im Board auf, dem Bootloader. Nach einem Reset lauscht der Bootloader nur etwa eine Sekunde lang; kommen in dieser Zeit keine Daten, läuft das alte Programm einfach weiter. An der Fehlermeldung erkennst du, welches Glied dieser Kette gerissen ist. Erscheint der rote Text schon beim Kompilieren, liegt der Fehler in deinem Code und hat nichts mit Board oder Kabel zu tun.
| Schritt | Was passiert? | Meldung, wenn es scheitert |
|---|---|---|
| 1. Kompilieren | Der Code wird in Maschinencode für den Prozessor übersetzt | Compilation error: 'x' was not declared in this scope (Codefehler, kein Upload-Problem) |
| 2. Port öffnen | Die IDE öffnet den gewählten COM-Port | no upload port provided, can't open device, Access is denied |
| 3. Reset | Das DTR-Signal startet das Board neu | programmer is not responding |
| 4. Synchronisation | avrdude und Bootloader stimmen sich ab | stk500_getsync(): not in sync: resp=0x00 |
| 5. Schreiben und Prüfen | Das Programm wird in den Flash geschrieben, zurückgelesen und verglichen | verification error, first mismatch at byte |
Die häufigsten avrdude-Fehler und ihre Bedeutung
| Fehlermeldung (Kernteil) | Bedeutung | Hier zuerst nachsehen |
|---|---|---|
| stk500_recv(): programmer is not responding | Der Port ist offen, aber das Board antwortet nie | Portauswahl, Kabel, Pin 0 und 1, beim Nano Old Bootloader |
| stk500_getsync() attempt 1 of 10: not in sync: resp=0x00 | Keine Daten auf der Leitung, der Bootloader meldet sich nicht | Processor-Einstellung, Auto-Reset, Bootloader |
| not in sync: ein anderer Wert als resp=0x00 (z. B. 0xfe) | Etwas antwortet, aber nicht der Bootloader | Modul an Pin 0, serielle Ausgabe des laufenden Sketches, falsche Baudrate |
| ser_open(): can't open device "\\.\COM3": Access is denied. | Ein anderes Programm benutzt den Port | Serieller Monitor, zweites IDE-Fenster, PuTTY, Cura und ähnliche Programme |
| ser_open(): can't open device ... The system cannot find the file specified. | Der gewählte Port existiert nicht mehr | Board abgesteckt oder Portnummer geändert; Port neu auswählen |
| Failed uploading: no upload port provided | Es ist gar kein Port ausgewählt | Werkzeuge > Port oder die Board-Auswahl oben |
| Device signature = 0x1e950f ... Expected signature for ATmega2560 | Der Chip des gewählten Boards passt nicht zum verbauten Chip | Ziel-Board im Board-Menü richtig wählen (0x1e950f ist die Kennung des ATmega328P); die Zeile erscheint meist beim Bootloader-Brennen per ISP |
| stk500v2_ReceiveMessage(): timeout | Mega 2560 gewählt, aber das Board antwortet nicht | Ist es wirklich ein Mega, stimmt der Port? |
| verification error, first mismatch at byte 0x0000 | Geschriebene und zurückgelesene Daten unterscheiden sich | Kabel, USB-Hub, schwache Stromversorgung, verschlissener Flash |
Diagnosetabelle Schritt für Schritt: Symptom, Ursache, Lösung
Lies die Tabelle von oben nach unten; die ersten Zeilen sind die häufigsten und am leichtesten zu behebenden Probleme. Versuche den Upload nach jeder Änderung erneut. Wenn du mehrere Dinge gleichzeitig änderst, weißt du nie, was geholfen hat, und derselbe Fehler überrascht dich beim nächsten Mal wieder.
| Symptom | Mögliche Ursache | Lösung |
|---|---|---|
| Beim Einstecken leuchtet keine LED | USB-Port oder Kabel liefert keinen Strom, oder Kurzschluss auf dem Board | Anderen Port und anderes Kabel testen, alle Module abziehen, zwischen 5V und GND messen |
| Power-LED leuchtet, aber Werkzeuge > Port ist grau oder leer | Reines Ladekabel oder fehlender Treiber | Datenkabel verwenden; zeigt der Geräte-Manager USB2.0-Serial mit gelbem Zeichen, CH340-Treiber installieren |
| Mehrere COM-Ports in der Liste | Virtuelle Ports von Bluetooth und System | Board ab- und wieder anstecken, den Port wählen, der verschwindet und wiederkommt |
| Failed uploading: no upload port provided | Kein Port gewählt | Port in der Board-Auswahl oben oder unter Werkzeuge > Port wählen |
| Access is denied, Zugriff verweigert, port busy | Der Port ist in einem anderen Programm geöffnet | Zweites IDE-Fenster, seriellen Plotter, PuTTY, Cura und Python-Skripte schließen, Board neu anstecken |
| not in sync: resp=0x00 beim Nano | Auf dem Board ist der alte Bootloader | Werkzeuge > Processor > ATmega328P (Old Bootloader) |
| Gleicher Fehler, Modul an D0 oder D1 | Das Modul sendet auf der seriellen Leitung und stört die Synchronisation | Kabel an D0 und D1 beim Hochladen abziehen, Modul per SoftwareSerial an andere Pins legen |
| Gleicher Fehler, nichts angeschlossen | Falsches Board oder falscher Port, defekter Auto-Reset, gelöschter Bootloader | Einstellungen prüfen, manuellen Reset versuchen, Loopback-Test machen, bei Bedarf Bootloader brennen |
| Unerwartete Kennung in der Zeile Device signature | Falsches Modell im Board-Menü | Board passend zur Aufschrift auf dem Chip wählen |
| Upload bricht mittendrin ab, verification error | Schlechtes Kabel, USB-Hub, Strombedarf von Motor oder Servo | Kurzes, gutes Kabel, Port direkt am Computer, externe Versorgung für Motoren |
| Der Computer schaltet beim Einstecken den USB-Port ab | Kurzschluss oder Überstrom in der Schaltung | Alle Kabel abziehen, Board allein testen, Schaltung Stück für Stück wieder anschließen |
| ESP32: Connecting... und dann Failed to connect | Das Board kommt nicht in den Download-Modus | BOOT-Taste gedrückt halten, sobald Connecting erscheint |
| Pico: kein Port oder No drive to deploy | Das Board ist nicht im BOOTSEL-Modus | BOOTSEL gedrückt halten und dabei das USB-Kabel einstecken |
Schnelle Checkliste und Test-Sketch für den Upload
- Entferne alles vom Board: Shields, Module und die Kabel an Pin 0 und 1. Nur das USB-Kabel bleibt angesteckt.
- Stecke das Board direkt in einen USB-Port auf der Rückseite des Computers; meide Hubs, Verlängerungen und Buchsen an der Gehäusefront.
- Öffne Werkzeuge > Port und sieh dir die Liste an. Ziehe das Board ab, stecke es wieder an und merke dir, welcher Port verschwindet und wiederkommt. Ändert sich die Liste nie, liegt es am Kabel oder am Treiber.
- Wähle unter Werkzeuge > Board genau dein Modell; beim Nano zusätzlich unter Werkzeuge > Processor den passenden Bootloader.
- Stelle sicher, dass kein anderes Programm und kein zweites IDE-Fenster den Port benutzt; schließe im Zweifel alle.
- Aktiviere die ausführliche Ausgabe beim Hochladen und lade den kleinen Test-Sketch unten hoch. Mit Code, der sicher fehlerfrei ist, schließt du Kompilierprobleme aus.
- Klappt es immer noch nicht, drücke die Reset-Taste: Blinkt die L-LED ein- oder mehrmals kurz, lebt der Bootloader. Geh dann zum Loopback-Test weiter unten.
- Teste an einem anderen Computer oder mit einem anderen Board. Wandert das Problem mit dem Board, liegt es am Board; bleibt es am Computer, liegt es am Treiber oder an den Systemeinstellungen.
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}Hat der Upload geklappt, blinkt die L-LED kurz auf und bleibt länger aus, und der Zähler läuft hoch, wenn du den seriellen Monitor mit 9600 Baud öffnest. Willst du sicher sein, dass wirklich der neue Code auf dem Board ist, ändere delay(200) in delay(50) und lade erneut hoch: Ändert sich der Blinkrhythmus nicht, läuft noch das alte Programm. Siehst du im seriellen Monitor wirre Zeichen, passt die im seriellen Monitor eingestellte Baudrate nicht zum Code; das ist kein Upload-Fehler.
COM-Port wird nicht angezeigt: USB-Kabel und CH340-, CP2102-Treiber
Ist das Port-Menü grau oder leer, ist das Kabel der erste Verdächtige. Viele dünne Kabel aus Handy-Ladegeräten haben nur die beiden Stromadern; die Datenleitungen D+ und D- fehlen ganz. Mit so einem Kabel leuchtet die Power-LED des Boards, was in die Irre führt, aber der Computer erkennt kein Gerät und spielt nicht einmal den Anschluss-Ton. Teste dein Kabel, indem du Dateien auf ein Handy überträgst, oder mit einem Board, von dem du weißt, dass es funktioniert. Das dicke Typ-B-Kabel des Uno hat dieses Problem selten; sehr häufig tritt es beim Mini-USB des Nano und bei Micro-USB- oder USB-C-Kabeln von ESP32 und Pico auf.
Ist das Kabel in Ordnung, ist der Treiber der zweite Verdächtige. Lies die Aufschrift auf dem Chip neben der USB-Buchse: Original Arduino Uno und Mega nutzen einen ATmega16U2, geklonte Uno- und Nano-Boards meist einen CH340G oder CH340C, ESP32-Entwicklungsboards meist einen CP2102 oder CH340. Öffne unter Windows den Geräte-Manager: Wird das Board erkannt, steht es unter Anschlüsse (COM & LPT). Siehst du unter Andere Geräte ein USB2.0-Serial mit gelbem Ausrufezeichen, fehlt der CH340-Treiber.

| USB-Chip | Zu finden auf | Name unter Windows | Portname unter macOS und Linux |
|---|---|---|---|
| ATmega16U2 | Original Uno R3, Mega 2560 | Arduino Uno (COMx) | /dev/cu.usbmodem…, /dev/ttyACM0 |
| CH340G, CH340C | Uno-, Nano- und Mega-Klone, manche ESP32-Boards | 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 oder /dev/cu.usbserial-…, /dev/ttyUSB0 |
| FT232RL | Ältere Original-Nanos, FTDI-Adapter | USB Serial Port (COMx) | /dev/cu.usbserial-…, /dev/ttyUSB0 |
| CH9102 | Neuere ESP32-Entwicklungsboards | USB-Enhanced-SERIAL CH9102 (COMx) | /dev/cu.wchusbserial… oder /dev/cu.usbmodem…, /dev/ttyACM0 |
| Natives USB (RP2040, ATmega32U4) | Raspberry Pi Pico, Leonardo, Micro | Serielles USB-Gerät oder Boardname (COMx) | /dev/cu.usbmodem…, /dev/ttyACM0 |
Windows 10 und 11 installieren die Treiber für CH340 und CP2102 meist selbst über Windows Update. Falls nicht, lade von der Website des Chipherstellers den Treiber CH341SER für den CH340 oder CP210x VCP für den CP2102 herunter, installiere ihn und stecke das Board neu an. Aktuelle macOS-Versionen bringen Treiber für beide Chips mit; alte Treiber aus verschiedenen Quellen übereinander zu installieren, macht es meist schlimmer. Unter Linux sind die Treiber schon im Kernel, aber damit du den Port nutzen darfst, musst du deinen Benutzer zur Gruppe dialout hinzufügen (sudo usermod -a -G dialout $USER) und dich ab- und wieder anmelden; sonst erscheint Permission denied. Verschwindet der Port unter Ubuntu 22.04 oder neuer direkt nach dem Einstecken eines CH340-Boards, ist meist das Screenreader-Paket brltty schuld; wenn du es nicht brauchst, entferne es mit sudo apt remove brltty.
Falsches Board, falscher Prozessor oder falscher Port
In der Arduino IDE 2 wählst du Board und Port in der Auswahlliste oben oder über Werkzeuge > Board und Werkzeuge > Port. Unter Windows siehst du in der Liste eventuell COM1 oder einige virtuelle Bluetooth-Ports; den richtigen findest du am einfachsten, indem du das Board absteckst und schaust, welcher Port verschwindet. Ist im Board-Menü ein falsches Modell gewählt, etwa Mega statt Uno oder Leonardo statt Nano, bekommt avrdude entweder gar keine Antwort oder sieht in der Zeile Device signature eine unerwartete Chip-Kennung. Noch ein Hinweis: Nutze für einen normalen Upload Strg+U. Sketch > Mit Programmer hochladen erwartet einen externen ISP-Programmer und löscht bei Erfolg den Bootloader auf dem Board; danach nimmt das Board keine Uploads über USB mehr an.
Arduino Nano lässt sich nicht hochladen: ATmega328P (Old Bootloader)
Die meisten günstigen Nano-Boards im Handel sind Klone mit CH340, und viele davon haben noch den alten Bootloader. Anfang 2018 ersetzte Arduino den Bootloader des Nano durch den kleineren und schnelleren Optiboot vom Uno; seitdem spricht die Standardoption ATmega328P der IDE mit 115200 Baud. Der alte Bootloader erwartet 57600 Baud. Passen die Geschwindigkeiten nicht, scheint das Board gar nicht zu antworten, und der Fehler not in sync: resp=0x00 wiederholt sich zehnmal. Die Lösung ist eine einzige Menüeinstellung: Werkzeuge > Processor > ATmega328P (Old Bootloader). Weil diese Optionen aus dem Board-Paket stammen, heißt das Menü in der Arduino IDE 2 auch in der deutschen Oberfläche Processor (in der alten IDE 1.8 Prozessor). Wenn du nicht weißt, welche Option stimmt, probiere sie nacheinander aus; eine falsche Wahl schadet dem Board nicht.
| Processor-Option | Bootloader | Upload-Geschwindigkeit | Wann wählen? |
|---|---|---|---|
| ATmega328P | Optiboot (neu) | 115200 Baud | Original-Nano und Boards mit aktualisiertem Bootloader |
| ATmega328P (Old Bootloader) | ATmegaBOOT (alt) | 57600 Baud | Die meisten Nano-Klone mit CH340 |
| ATmega168 | ATmegaBOOT (alt) | 19200 Baud | Ältere Boards mit der Aufschrift ATmega168 auf dem Chip |
Module an Pin 0 und 1 blockieren den Upload
Beim Uno und Nano ist der USB-Seriell-Chip über 1-kΩ-Widerstände an den Pins D0 (RX) und D1 (TX) mit dem ATmega328P verbunden. Während des Uploads gehört diese Leitung dem Computer. Hängt ein serielles Modul wie ein HC-05-Bluetooth-Modul, ein GPS, ein ESP-01 oder ein Fingerabdrucksensor an diesen Pins, sendet es eigene Daten auf die Leitung oder hält sie auf einem festen Pegel und stört die Synchronisation des Bootloaders. Das Ergebnis ist wieder programmer is not responding oder not in sync. Am schnellsten hilft es, die Kabel an D0 und D1 während des Uploads abzuziehen; dauerhaft löst du es, indem du das Modul per SoftwareSerial an andere Pins legst:
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}In diesem Sketch kommt TX des HC-05 an D10 und RX an D11. Der RX-Eingang des HC-05 arbeitet mit 3,3 V, setze deshalb zwischen ihn und D11 einen Spannungsteiler aus 1 kΩ und 2 kΩ. Jetzt kannst du mit angeschlossenem Modul hochladen und alles, was du in den seriellen Monitor tippst, an dein Handy schicken. Die komplette Verdrahtung und den AT-Befehlsmodus findest du im Artikel HC-05 Bluetooth-Modul. Mit einem Mega brauchst du kein SoftwareSerial: Er hat zusätzliche Hardware-Schnittstellen wie Serial1 (TX1 = D18, RX1 = D19).
Serieller Monitor und Programme, die den Port blockieren
Ein serieller Port kann immer nur von einem Programm geöffnet werden. Deshalb meldet Windows Access is denied (auf Deutsch Zugriff verweigert) und macOS sowie Linux Resource busy. Die Arduino IDE pausiert ihren eigenen seriellen Monitor beim Hochladen normalerweise automatisch, aber das klappt nicht in jeder Version und mit jedem Board zuverlässig, vor allem nicht beim ESP32; bekommst du den Fehler, schließe zuerst den Tab des seriellen Monitors. Häufiger hält etwas anderes den Port fest: ein zweites IDE-Fenster, ein offener serieller Plotter, PuTTY, 3D-Drucker-Software wie Cura, der PlatformIO-Monitor in VS Code oder ein Python-Skript im Hintergrund. Schließe sie, stecke das Board neu an und versuche es noch einmal. Unter Linux siehst du mit sudo lsof /dev/ttyUSB0, welches Programm den Port belegt.
Ist das Board kaputt? Loopback-Test und Bootloader brennen
Hast du alles oben probiert und der Upload klappt immer noch nicht, musst du herausfinden, ob das Problem auf der USB-Seite oder im Hauptprozessor liegt. Die klassische Methode für Uno und Nano ist der Loopback-Test: Du hältst den Hauptprozessor im Reset und lässt den USB-Seriell-Chip mit sich selbst sprechen. Für diesen Test musst du keinen Code hochladen.
- Ziehe alle Kabel vom Board ab, nur das USB-Kabel bleibt angesteckt.
- Verbinde mit einem Jumper-Kabel den Pin RESET mit GND; so bleibt der ATmega328P im Reset und stört die Leitung nicht.
- Verbinde mit einem zweiten Kabel die Pins D0 und D1 miteinander.
- Wähle in der IDE den Port des Boards und öffne den seriellen Monitor; die Baudrate spielt für diesen Test keine Rolle.
- Tippe ein paar Zeichen in das Eingabefeld und sende sie. Kommt dein Text genau so zurück, sind Kabel, Treiber und USB-Seriell-Chip in Ordnung und das Problem liegt im Hauptprozessor oder im Bootloader. Kommt nichts zurück, liegt das Problem auf der USB-Seite.
- Vergiss nicht, nach dem Test beide Kabel wieder abzuziehen.
Besteht das Board den Loopback-Test, der Upload scheitert aber weiter und die L-LED blinkt beim Druck auf Reset nicht kurz auf, ist der Bootloader vielleicht gelöscht oder der Chip wurde getauscht. Mit einem zweiten Uno kannst du den Bootloader neu brennen. Lade auf den Uno, der als Programmer dienen soll, den Sketch Datei > Beispiele > 11.ArduinoISP > ArduinoISP. Verbinde dann D10 des Programmers mit dem RESET-Pin des Ziel-Boards, D11, D12 und D13 mit den gleichnamigen Pins des Ziels sowie 5V und GND miteinander. Stecke beim Programmer-Uno einen 10-µF-Kondensator zwischen RESET und GND; das verhindert, dass er sich selbst zurücksetzt. Wähle zum Schluss Werkzeuge > Programmer > Arduino as ISP, stelle im Board-Menü das Ziel-Board ein und starte Werkzeuge > Bootloader brennen. So kannst du auch einem Nano-Klon den neuen Optiboot verpassen.
ESP32 lässt sich nicht flashen: Failed to connect und die BOOT-Taste
Beim ESP32 übernimmt nicht avrdude, sondern esptool den Upload. In der Ausgabe erscheint zuerst die Zeile Connecting........_____....., während esptool versucht, das Board in den Download-Modus zu bringen. Klappt das nicht, bekommst du einen Fehler, der mit A fatal error occurred: Failed to connect to ESP32 beginnt. In aktuellen esptool-Versionen geht die Meldung, wenn das Board normal gestartet ist, mit Wrong boot mode detected (0x13)! The chip needs to be in download mode. weiter; 0x13 bedeutet, dass das Board im normalen Startmodus statt im Download-Modus gestartet ist. Antwortet das Board gar nicht, endet die Meldung mit No serial data received; ältere Versionen schreiben dafür Timed out waiting for packet header. Schafft das Board den Download-Modus nicht von selbst, erledigst du das von Hand.

- Klicke in der IDE auf Hochladen und beobachte das Ausgabefenster.
- Sobald Connecting... erscheint, halte die BOOT-Taste auf dem Board gedrückt.
- Verbindet es sich immer noch nicht, drücke bei gehaltener BOOT-Taste einmal kurz auf EN und lass los.
- Lass BOOT los, wenn in der Ausgabe Zeilen mit Writing at und die Prozentwerte des Uploads durchlaufen.
- Der Upload endet mit Hard resetting via RTS pin.... Startet das Programm nicht, drücke einmal EN.
Warum passiert das? Damit der ESP32 in den Download-Modus geht, muss sein Pin GPIO0 beim Start LOW sein. Die Auto-Reset-Schaltung aus zwei Transistoren auf den Entwicklungsboards erledigt das automatisch über die Signale DTR und RTS des USB-Chips; bei billigen Boards verpasst diese Schaltung manchmal das Timing. Wenn du nicht jedes Mal BOOT drücken willst, gibt es eine dauerhafte Lösung: Schließe zwischen den Pin EN und GND einen 10-µF-Elektrolytkondensator an (Minus an GND). Der Kondensator verzögert den Anstieg der EN-Leitung und gibt der Auto-Reset-Schaltung Zeit, GPIO0 auf LOW zu halten.
| ESP32-Fehlermeldung | Mögliche Ursache | Lösung |
|---|---|---|
| Wrong boot mode detected (0x13) | Die Auto-Reset-Schaltung bringt das Board nicht in den Download-Modus | BOOT-Taste; dauerhaft 10 µF zwischen EN und GND |
| No serial data received oder Timed out waiting for packet header | Vom Board kommen gar keine Daten: reines Ladekabel, falscher Port oder das Board ging nie in den Download-Modus | Datenkabel, richtiger Port unter Werkzeuge > Port, BOOT-Taste |
| This chip is ESP32-S3 not ESP32. Wrong --chip argument? | Unter Werkzeuge > Board ist ein anderes ESP32-Modell gewählt als das auf deinem Board | Modell passend zum Modul auf dem Board wählen (ESP32, ESP32-S3 und ESP32-C3 sind verschiedene Boards) |
| Could not open COM3, the port is busy or doesn't exist | Serieller Monitor oder ein anderes Programm belegt den Port | Seriellen Monitor und andere Programme schließen, Board neu anstecken |
| Invalid head of packet: Possible serial noise or corruption | Langes oder schlechtes Kabel, schwache Versorgung, hohe Upload-Geschwindigkeit | Werkzeuge > Upload Speed von 921600 auf 115200 senken |
| Upload klappt, aber beim Start flash read err, 1000 | GPIO12 beim Start auf HIGH, dadurch falsche Flash-Spannung | Modul an GPIO12 auf einen anderen Pin legen |
| Port verschwindet nach dem Upload (ESP32-S3, ESP32-C3) | Auf einem Board mit nativem USB ist das Programm abgestürzt oder hat USB abgeschaltet | Mit gedrückter BOOT-Taste einstecken; Werkzeuge > 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: Hochladen mit BOOTSEL und UF2
Der Pico hat keinen eigenen USB-Seriell-Chip; der RP2040 besitzt einen eigenen USB-Controller, und der Bootloader liegt im ROM des Chips, das sich nicht löschen lässt. Deshalb kannst du einen Pico per Software praktisch nicht unbrauchbar machen. Hältst du beim Einstecken des USB-Kabels die Taste BOOTSEL gedrückt, erscheint der Pico am Computer als Laufwerk namens RPI-RP2 (beim Pico 2 heißt es RP2350). Jede .uf2-Datei, die du auf dieses Laufwerk ziehst, wird auf das Board geschrieben, das danach von selbst neu startet; so installierst du auch MicroPython.
Programmierst du den Pico mit der Arduino IDE, gibt es beim ersten Upload noch keinen COM-Port; stecke das Board mit gedrückter BOOTSEL-Taste an und klicke auf Hochladen. Nach dem ersten Sketch öffnet das Board einen seriellen Port, und spätere Uploads brauchen kein BOOTSEL mehr. Stürzt dein Code ab oder schaltet er USB ab, verschwindet der Port wieder und du bekommst den Fehler No drive to deploy; dann gehst du zurück zur BOOTSEL-Methode. Nutzt du MicroPython, muss in Thonny unten rechts der Interpreter MicroPython (Raspberry Pi Pico) ausgewählt sein. Pins und Einrichtung des Pico findest du im Artikel Was ist der Raspberry Pi Pico?.
| Symptom | Mögliche Ursache | Lösung |
|---|---|---|
| Das Laufwerk RPI-RP2 erscheint nie | Reines Ladekabel oder BOOTSEL erst nach dem Einstecken gedrückt | Datenkabel verwenden; zuerst BOOTSEL drücken, dann einstecken, loslassen, sobald das Laufwerk erscheint |
| Arduino IDE: No drive to deploy | Board nicht im BOOTSEL-Modus und kein serieller Port vorhanden | Mit gedrückter BOOTSEL-Taste neu einstecken, dann auf Hochladen klicken |
| Thonny: Couldn't find the device automatically | MicroPython ist nicht installiert oder das Board ist noch im BOOTSEL-Modus | UF2 über die Thonny-Option Install or update MicroPython installieren |
| Thonny: Device is busy or does not respond | main.py hängt in einer Dauerschleife und reagiert nicht | Stop-Taste oder Strg+C drücken; sonst Board neu anstecken |
| Code lief, aber das Board startet ihn nicht allein | Die Datei wurde nicht als main.py auf dem Pico gespeichert | Datei auf dem Raspberry Pi Pico als main.py speichern |
| Das Board hängt ständig, nichts lässt sich hochladen | Defekte Datei oder fehlerhaftes Programm im Flash | Flash mit flash_nuke.uf2 löschen, MicroPython neu installieren |
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)Kleine, aber tückische Ursachen, die man leicht übersieht
- Leonardo, Micro und Uno R4: Bei diesen Boards mit nativem USB kann der Port während des Uploads kurz wechseln. Hängt der Upload, klicke auf Hochladen und drücke die Reset-Taste einmal, sobald das Kompilieren fertig ist und der Upload beginnt (beim Uno R4 zweimal schnell); das Board wartet dann eine Weile im Bootloader, und der Code wird in dieser Zeit hochgeladen.
- Defekter Auto-Reset: Funktioniert der Auto-Reset beim Uno oder Nano nicht, halte die Reset-Taste gedrückt, klicke auf Hochladen und lass die Taste los, sobald in der Ausgabe die Zeile mit der Sketch-Größe erscheint.
- Shields und externe Schaltungen: Ein Motortreiber-Shield oder eine Schaltung, die die 5-V-Leitung belastet, kann die Versorgungsspannung beim Upload einbrechen lassen und den Schreibvorgang abbrechen.
- Falscher Port unter macOS: /dev/cu.Bluetooth-Incoming-Port und /dev/cu.debug-console in der Portliste sind nicht dein Board, sondern Ports des Systems. Der Port deines Boards enthält usbmodem, usbserial oder wchusbserial im Namen; bist du unsicher, stecke das Board ab und wieder an und schau, welcher Port verschwindet.
- Umlaute im Benutzernamen: Enthält dein Windows-Benutzerordner Umlaute oder Sonderzeichen, finden die Kompilier- und Upload-Werkzeuge mancher Board-Pakete, vor allem beim ESP32, Dateien eventuell nicht. Verlege den Sketchbook-Ordner in den Einstellungen auf einen Pfad ohne solche Zeichen; hilft das nicht, lege einen neuen Windows-Benutzer an.
- Sketch zu groß: Die Warnung Sketch too big ist kein Upload-Fehler; sie bedeutet, dass dein Code nicht in die rund 31,5 KB Flash passt, die beim Uno nach dem Bootloader übrig bleiben. Spare bei Bibliotheken und langen Texten oder nimm ein größeres Board.
- Port hängt nach dem Standby: Nach dem Aufwachen aus dem Standby kann der Port hängen bleiben; die IDE neu zu starten oder das Board an einen anderen USB-Port zu stecken, reicht meist.
Der Upload klappt: Wie geht es weiter?
- Erste Schaltung: Baue mit einer LED und einem Widerstand deine eigene Blink-Schaltung und ergänze dann einen Taster für dein erstes interaktives Projekt.
- Serielle Kommunikation: Jetzt, wo du weißt, wie Pin 0 und 1 den Upload beeinflussen, schalte mit dem HC-05-Bluetooth-Modul eine LED per Handy.
- Sensoren auslesen: Such dir mit dem Arduino-Sensoren-Ratgeber erste Projekte aus, die Temperatur, Entfernung und Licht messen.
- Kabellos werden: Baue mit dem ESP32 ein Projekt, das sich ins WLAN einwählt und per Handy gesteuert wird; dank OTA kannst du Code später sogar kabellos hochladen.
- Das richtige Board wählen: Kannst du dich zwischen Uno, Nano und Mega nicht entscheiden, lies Welchen Arduino soll ich kaufen?.
Upload-Fehler nerven beim ersten Mal, aber jeder hat eine logische Ursache, und fast alle findest du in derselben Reihenfolge: Kabel, Treiber, Port, Board-Einstellungen, serielle Leitung und zuletzt der Bootloader. Behalte diese Reihenfolge im Kopf, dann löst du den nächsten Fehler in Minuten. Sobald dein Board Code annimmt, findest du in der BlueGrays-App viele Projekte für Arduino, ESP32 und Raspberry Pi Pico, vom Blinken einer LED bis zu WLAN und kabellosen OTA-Updates, jeweils mit Schritt-für-Schritt-Schaltplan und fertigem Code, damit dein Board sofort etwas zu tun bekommt.
Häufige Fragen
Warum lässt sich mein Sketch nicht auf den Arduino hochladen?
Die häufigsten Ursachen sind ein reines Ladekabel, ein fehlender CH340-Treiber, ein falsches Board oder ein falscher Port sowie Module an Pin 0 und 1. Bei Nano-Klonen muss außerdem Werkzeuge > Processor auf ATmega328P (Old Bootloader) stehen. Prüfst du diese Punkte der Reihe nach, ist das Board fast immer in Ordnung.
Wie behebe ich avrdude stk500_getsync not in sync resp=0x00?
Der Fehler bedeutet, dass der Computer keine Verbindung zum Bootloader auf dem Board herstellen kann. Wähle zuerst den richtigen Port und das richtige Board, probiere beim Nano unter Werkzeuge > Processor die Option Old Bootloader und ziehe alle Kabel an D0 und D1 ab. Bleibt der Fehler, prüfe die USB-Seite mit dem Loopback-Test und brenne bei Bedarf den Bootloader neu.
Warum wird mein Arduino am PC nicht erkannt?
Ist Werkzeuge > Port leer, überträgt das Kabel keine Daten oder der Treiber für den USB-Seriell-Chip fehlt. Probiere ein anderes Datenkabel und sieh im Windows-Geräte-Manager nach, ob das Board unter Anschlüsse (COM & LPT) erscheint. Steht unter Andere Geräte ein USB2.0-Serial mit gelbem Zeichen, installiere den CH340-Treiber.
Wie installiere ich den CH340-Treiber?
Windows 10 und 11 installieren ihn meist automatisch; sonst lädst du das Paket CH341SER vom Hersteller WCH herunter, führst es aus und steckst das Board neu an. Aktuelle macOS-Versionen bringen den Treiber mit, unter Linux ist er Teil des Kernels. Unter Linux musst du nur deinen Benutzer zur Gruppe dialout hinzufügen.
Wann drücke ich beim ESP32-Upload die BOOT-Taste?
Halte BOOT gedrückt, sobald in der Ausgabe Connecting... erscheint, und lass los, wenn die Prozentwerte des Uploads durchlaufen. Damit geht der ESP32 in den Download-Modus. Brauchst du das bei jedem Upload, löst ein 10-µF-Kondensator zwischen EN und GND das Problem meist dauerhaft.
Was tun, wenn der Raspberry Pi Pico nicht erkannt wird?
Halte die BOOTSEL-Taste gedrückt und stecke den Pico mit einem Datenkabel an; er sollte als Laufwerk RPI-RP2 erscheinen. In diesem Modus kannst du die MicroPython-UF2-Datei per Drag-and-drop kopieren oder Code aus der Arduino IDE hochladen. Erscheint kein Laufwerk, überträgt das Kabel keine Daten; der Bootloader des Pico liegt im ROM und lässt sich per Software nicht zerstören.
Projekte, die du danach bauen kannst
Alle Projekte ansehen
Led-Beleuchtung
Einfaches Eingabeprojekt, das eine einzelne LED in bestimmten Intervallen mit Arduino ein- und ausschaltet. Lehrt die Verwendung von digitalWrite und Verzögerungsfunktionen.

LED Blinken mit ESP32
Lehrt die grundlegende Verwendung von GPIO-Ausgängen mit ESP32. Wir erreichen einen Blinkeffekt, indem wir eine LED über einen digitalen Pin ein- und ausschalten. ESP32-Version des klassischen Blink-Projekts auf Arduino UNO; Pin-Map und Syntax bleiben gleich, der Unterschied liegt nur in den Pin-Nummern.

ESP32 Interne LED Blinken
Die eingebaute blaue LED auf dem ESP32 DevKit V1 zum Blinken bringen. Keine externen Komponenten erforderlich! Das erste Projekt, das Sie ausprobieren sollten, wenn Sie einen ESP32 kaufen. GPIO 2 ist mit der internen LED verbunden.

Raspberry Pi Pico Onboard-LED Blinken (GP25 Interne LED)
Das Eröffnungsprojekt der Raspberry Pi Pico-Serie! Wir bringen die interne LED (grüne LED an GP25) zum Blinken, um zu überprüfen, ob die Platine funktioniert — ein klassisches "Hello World"-Erstexperiment. Keine externen Komponenten, nur Pico und USB-Kabel. Der Code ist in **MicroPython** geschrieben (die offiziell von der Raspberry Pi Foundation unterstützte Sprache). Lerne die `machine.Pin`-Klasse, `Pin.OUT`-Modus, `led.on()/off()`-Methoden und `time.sleep()` in Thonny IDE. Verfolge jede Umsch

HC-SR04 Abstandsmessung (serielle Anzeige)
HC-SR04 Ultraschallsensor zur Abstandsmessung und Anzeige des Ergebnisses in cm auf dem seriellen Monitor. Er lehrt das Prinzip der Abstandsberechnung mit Schallwellen.

Led-Beleuchtung vom Telefon über Bluetooth
Ein Projekt zur drahtlosen Steuerung, das LEDs mit Befehlen, die vom Telefon mit dem Bluetooth-Modul HC-06 gesendet werden, ein- und ausschaltet. Lehrt den Bluetooth-Datenaustausch über serielle Kommu

2 Arduino Einwegkommunikation
Ein Projekt zur einseitigen Datenübertragung zwischen zwei Arduinos über serielle Kommunikation. Es erkennt den Tastendruck auf der Senderseite und lernt die Steuerung der LED auf der Empfängerseite.

ESP32-OTA-Update – Drahtlose Firmware-Installation (mit LCD-Display)
In diesem Projekt lernst du, wie du auf dem ESP32 ohne USB-Kabel über WLAN neue Firmware installieren kannst. Mit der `ArduinoOTA`-Bibliothek wird der ESP32 im Netzwerk sichtbar und wird im Reiter „Network port“ der Arduino-IDE automatisch als `bluegrays-ota` aufgelistet. Die erste Installation erfolgt über USB, alle nachfolgenden Updates erfolgen drahtlos – eine äußerst wichtige Funktion für Feldgeräte. Auf dem I2C-LCD-Display werden der WLAN-Status, die IP-Adresse, der Hostname, der Fortschrit
Weitere Artikel
Lerne, die Fehlermeldung beim Hochladen zu lesen, die Ursache mit einer Symptomtabelle zu finden und Kabel-, Treiber-, Port- und Bootloader-Probleme bei Arduino, ESP32 und Pico Schritt für Schritt zu lösen.

