Failed uploading: no upload port provided? Как исправить ошибку загрузки Arduino
Arduino пишет no upload port provided или avrdude not in sync? Разбираемся с пропавшим COM-портом, драйвером CH340, Old Bootloader на Nano, кнопкой BOOT на ESP32 и BOOTSEL на Pico.
Код не загружается в Arduino, а в окне вывода красная ошибка avrdude? Не переживай: почти ни одна из этих проблем не означает, что плата сломана. Причины обычно такие: USB-кабель только для зарядки, не установлен драйвер CH340, выбрана не та плата или не тот порт, модуль подключён к пинам 0 и 1 или порт занят другой программой. Если проверять всё в правильном порядке, обычно проблема решается за несколько минут; а если плата действительно неисправна, это можно просто доказать.
В этом руководстве сначала разберём, что происходит за кулисами во время загрузки и как читать сообщение об ошибке. Затем шаг за шагом сузим круг поиска с помощью диагностической таблицы «симптом — причина — решение». Также поговорим о настройке ATmega328P (Old Bootloader) на Arduino Nano, о мониторе порта и других программах, которые занимают порт, об ошибке ESP32 Failed to connect и кнопке BOOT, а ещё о способе с BOOTSEL и UF2 на Raspberry Pi Pico. В каждом разделе есть короткий тестовый скетч, чтобы проверить плату, когда проблема решена.

Как устроена загрузка: ошибка компиляции или ошибка загрузки?
Когда нажимаешь «Загрузка» (Upload), происходят две отдельные вещи. Сначала IDE компилирует код; если это удалось, в окне вывода появляется строка о том, сколько байт занимает скетч (Sketch uses 924 bytes). Затем программа avrdude открывает выбранный порт, перезапускает плату сигналом DTR и устанавливает связь с маленькой программой-загрузчиком внутри платы — загрузчиком (bootloader). После сброса загрузчик слушает всего около секунды; если данные не пришли, на плате продолжает работать старая программа. Сообщение об ошибке показывает, какое звено этой цепочки порвалось. Если красный текст появляется во время компиляции, проблема в коде, и плата с кабелем тут ни при чём.
| Этап | Что происходит | Сообщение при сбое |
|---|---|---|
| 1. Компиляция | Код переводится в машинный код для процессора | Compilation error: 'x' was not declared in this scope (ошибка в коде, а не проблема загрузки) |
| 2. Открытие порта | IDE открывает выбранный COM-порт | «no upload port provided», «can't open device» или «Access is denied» |
| 3. Сброс | Сигнал DTR перезапускает плату | «programmer is not responding» |
| 4. Рукопожатие | avrdude и загрузчик синхронизируются | «stk500_getsync(): not in sync: resp=0x00» |
| 5. Запись и проверка | Программа записывается во flash-память, считывается обратно и сравнивается | «verification error, first mismatch at byte» |
Самые частые ошибки avrdude и что они значат
| Сообщение об ошибке (ключевая часть) | Что означает | Куда смотреть в первую очередь |
|---|---|---|
| «stk500_recv(): programmer is not responding» | Порт открылся, но плата так и не ответила | Выбор порта, кабель, пины 0 и 1, Old Bootloader на Nano |
| «stk500_getsync() attempt 1 of 10: not in sync: resp=0x00» | На линии нет данных, загрузчик так и не вступил в рукопожатие | Настройка процессора, автосброс, загрузчик |
| «not in sync» со значением, отличным от resp=0x00 (например, 0xfe) | Кто-то отвечает, но не загрузчик | Модуль на пине 0, вывод в порт от работающего скетча, несовпадение скорости |
| «ser_open(): can't open device "\\.\COM3": Access is denied.» | Порт занят другой программой | Монитор порта, второе окно IDE, PuTTY, Cura и подобные программы |
| «ser_open(): can't open device ... The system cannot find the file specified» (системе не удаётся найти указанный файл) | Выбранного порта больше нет | Плата отключена или номер порта изменился; выбери порт заново |
| «Failed uploading: no upload port provided» | Порт вообще не выбран | «Инструменты › Порт» или выбор платы вверху окна |
| «Device signature = 0x1e950f ... Expected signature for ATmega2560» | Микросхема выбранной платы отличается от установленной | Правильно выбери целевую плату в меню плат (0x1e950f — идентификатор ATmega328P); эта строка чаще всего появляется при записи загрузчика через ISP |
| stk500v2_ReceiveMessage(): timeout | Выбрана Mega 2560, но плата не отвечает | Это точно Mega и порт правильный? |
| «verification error, first mismatch at byte 0x0000» | Записанное отличается от считанного | Кабель, USB-хаб, слабое питание, изношенная flash-память |
Пошаговая диагностическая таблица: симптом, причина, решение
Читай таблицу сверху вниз: первые строки — самые частые и самые простые в решении проблемы. После каждого изменения пробуй загрузить код снова. Если менять сразу несколько вещей, так и не станет понятно, что именно помогло, и в следующий раз та же ошибка снова застанет врасплох.
| Симптом | Вероятная причина | Решение |
|---|---|---|
| При подключении платы не горит ни один светодиод | USB-порт или кабель не дают питания, или на плате короткое замыкание | Попробуй другой порт и кабель, отключи все модули, измерь напряжение между 5V и GND |
| Светодиод питания горит, но «Инструменты › Порт» серый или пустой | Кабель только для зарядки или нет драйвера | Возьми кабель с передачей данных; если в «Диспетчере устройств» видно USB2.0-Serial с жёлтым значком, установи драйвер CH340 |
| В списке несколько COM-портов | Виртуальные порты Bluetooth и системы | Отключи и снова подключи плату, выбери порт, который пропадает и появляется снова |
| «Failed uploading: no upload port provided» | Порт не выбран | Выбери порт в выборе платы вверху окна или в «Инструменты › Порт» |
| Access is denied, порт занят | Порт открыт в другой программе | Закрой второе окно IDE, плоттер, PuTTY, Cura и скрипты на Python, затем переподключи плату |
| not in sync: resp=0x00 на Nano | На плате старый загрузчик | «Инструменты › Процессор › ATmega328P (Old Bootloader)» |
| Та же ошибка, когда модуль подключён к D0 или D1 | Модуль передаёт данные по последовательной линии и срывает рукопожатие | На время загрузки отключай провода от D0 и D1, перенеси модуль на другие пины с SoftwareSerial |
| Та же ошибка, когда ничего не подключено | Не та плата или порт, сломан автосброс, стёрт загрузчик | Проверь настройки, попробуй ручной сброс, проведи тест «петли», при необходимости запиши загрузчик |
| Неожиданный идентификатор в строке Device signature | В меню плат выбрана не та модель | Выбери плату, которая соответствует надписи на микросхеме |
| Загрузка обрывается на середине, ошибка проверки | Плохой кабель, USB-хаб, ток, потребляемый мотором или сервоприводом | Короткий качественный кабель, порт прямо на компьютере, внешнее питание для моторов |
| Компьютер отключает USB-порт, когда подключаешь плату | Короткое замыкание или перегрузка по току в схеме | Сними все провода, проверь плату отдельно, возвращай схему по частям |
| ESP32: Connecting..., а затем Failed to connect | Плата не смогла перейти в режим загрузки | Зажми кнопку BOOT, когда появится Connecting |
| Pico: нет порта или No drive to deploy | Плата не в режиме BOOTSEL | Подключай USB-кабель, удерживая BOOTSEL |
Быстрый чек-лист и тестовый скетч для загрузки
- Сними с платы всё: шилды, модули и провода на пинах 0 и 1. Оставь подключённым только USB-кабель.
- Подключи плату прямо к USB-порту на задней панели компьютера; избегай хабов, удлинителей и разъёмов на передней панели.
- Открой «Инструменты › Порт» и посмотри на список. Отключи и снова подключи плату и запомни, какой порт пропадает и появляется снова. Если список не меняется, проблема в кабеле или драйвере.
- Выбери точную модель платы в «Инструменты › Плата»; на Nano ещё выбери правильный загрузчик в «Инструменты › Процессор».
- Убедись, что порт не занят другой программой или вторым окном IDE; если сомневаешься, закрой их все.
- Включи подробный вывод при загрузке и загрузи маленький тестовый скетч ниже. Проверка на коде, в котором точно нет ошибок, исключает проблемы компиляции.
- Всё ещё не получается? Нажми кнопку сброса: если светодиод L быстро мигнёт один или несколько раз, загрузчик жив. Тогда переходи к тесту «петли» ниже.
- Попробуй другой компьютер или другую плату. Если проблема переходит вместе с платой, дело в плате; если остаётся с компьютером — в драйвере или настройках операционной системы.
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}Если загрузка прошла, светодиод L коротко мигает и дольше остаётся выключенным, а в мониторе порта на 9600 бод растёт счётчик. Чтобы убедиться, что новый код действительно попал в плату, замени delay(200) на delay(50) и загрузи снова: если ритм мигания не изменился, работает ещё старая программа. Если в мониторе порта видны кракозябры, скорость в мониторе порта не совпадает с кодом; это не ошибка загрузки.
COM-порт не появляется: USB-кабель и драйверы CH340, CP2102
Если меню портов серое или пустое, первым под подозрением оказывается кабель. Во многих тонких кабелях из комплекта зарядок есть только два провода питания, а провода данных D+ и D- отсутствуют совсем. С таким кабелем светодиод питания на плате загорается, что сбивает с толку, но компьютер не видит устройства и даже не издаёт звук подключения. Проверь кабель, передав по нему файлы на телефон, или с другой платой, про которую точно известно, что она рабочая. У толстого кабеля типа B для Uno такой проблемы почти не бывает; она очень часта с mini USB у Nano и с кабелями micro USB или USB-C у плат ESP32 и Pico.
Если кабель в порядке, второй подозреваемый — драйвер. Прочитай надпись на микросхеме рядом с USB-разъёмом: на оригинальных Arduino Uno и Mega стоит ATmega16U2, на клонах Uno и Nano — чаще всего CH340G или CH340C, а на отладочных платах ESP32 обычно CP2102 или CH340. В Windows открой «Диспетчер устройств»: если плата распознана, она появится в разделе «Порты (COM и LPT)» (Ports (COM & LPT)). Если в разделе «Другие устройства» (Other devices) видно USB2.0-Serial с жёлтым восклицательным знаком, не хватает драйвера CH340.

| USB-микросхема | Где встречается | Имя в Windows | Имя порта в macOS и Linux |
|---|---|---|---|
| ATmega16U2 | Оригинальные Uno R3, Mega 2560 | Arduino Uno (COMx) | /dev/cu.usbmodem… или /dev/ttyACM0 |
| CH340G, CH340C | Клоны Uno, Nano, Mega, некоторые платы ESP32 | 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 или /dev/cu.usbserial-…, /dev/ttyUSB0 |
| FT232RL | Старые оригинальные Nano, адаптеры FTDI | USB Serial Port (COMx) | /dev/cu.usbserial-… или /dev/ttyUSB0 |
| CH9102 | Новые отладочные платы ESP32 | USB-Enhanced-SERIAL CH9102 (COMx) | /dev/cu.wchusbserial… или /dev/cu.usbmodem…, /dev/ttyACM0 |
| Встроенный USB (RP2040, ATmega32U4) | Raspberry Pi Pico, Leonardo, Micro | USB Serial Device или имя платы (COMx) | /dev/cu.usbmodem… или /dev/ttyACM0 |
Windows 10 и 11 обычно сами ставят драйверы CH340 и CP2102 через Центр обновления Windows. Если этого не произошло, скачай с сайта производителя микросхемы драйвер CH341SER для CH340 или CP210x VCP для CP2102, установи его, затем отключи и снова подключи плату. В актуальных версиях macOS драйверы для обеих микросхем уже есть; если наставить поверх старые драйверы из разных источников, обычно становится только хуже. В Linux драйверы уже в ядре, но чтобы пользоваться портом, нужно добавить своего пользователя в группу dialout (sudo usermod -a -G dialout $USER) и заново войти в систему; иначе будет ошибка Permission denied. Если на Ubuntu 22.04 и новее порт пропадает сразу после подключения платы на CH340, виноват обычно пакет экранного чтеца brltty; если он не нужен, удали его командой sudo apt remove brltty.
Выбраны не та плата, процессор или порт
В Arduino IDE 2 плата и порт выбираются в выпадающем списке на верхней панели или в меню «Инструменты › Плата» и «Инструменты › Порт». В Windows в списке могут быть COM1 или несколько виртуальных портов Bluetooth; проще всего найти нужный, отключив плату и посмотрев, какой порт пропал. Если в меню плат выбрана не та модель, например Mega вместо Uno или Leonardo вместо Nano, avrdude либо вообще не получает ответа, либо видит неожиданный идентификатор микросхемы в строке Device signature. И ещё: для обычной загрузки используй Ctrl+U. «Скетч › Загрузить через программатор» (Sketch › Upload Using Programmer) рассчитан на внешний ISP-программатор и, если загрузка удалась, стирает загрузчик на плате; после этого плата больше не принимает загрузку по USB.
Arduino Nano не загружается: ATmega328P (Old Bootloader)
Большинство недорогих Nano в продаже — клоны на CH340, и многие из них до сих пор несут старый загрузчик. В начале 2018 года Arduino заменила загрузчик Nano на более компактный и быстрый Optiboot, как у Uno, и с тех пор вариант ATmega328P по умолчанию в IDE работает на скорости 115200 бод. Старый загрузчик ждёт 57600 бод. Когда скорости не совпадают, кажется, что плата вообще не отвечает, а ошибка not in sync: resp=0x00 повторяется десять попыток подряд. Решение — одна настройка в меню: «Инструменты › Процессор › ATmega328P (Old Bootloader)». Если неясно, какой вариант правильный, пробуй варианты по очереди; неправильный выбор плате ничем не вредит.
| Вариант процессора | Загрузчик | Скорость загрузки | Когда выбирать |
|---|---|---|---|
| ATmega328P | Optiboot (новый) | 115200 бод | Оригинальные Nano и платы с обновлённым загрузчиком |
| ATmega328P (Old Bootloader) | ATmegaBOOT (старый) | 57600 бод | Большинство клонов Nano на CH340 |
| ATmega168 | ATmegaBOOT (старый) | 19200 бод | Старые платы с надписью ATmega168 на микросхеме |
Модули на пинах 0 и 1 мешают загрузке
На Uno и Nano микросхема USB-UART соединена с ATmega328P через резисторы 1 kΩ на пинах D0 (RX) и D1 (TX). Во время загрузки эта линия принадлежит компьютеру. Если к этим пинам подключён модуль с последовательным интерфейсом, например Bluetooth-модуль HC-05, GPS, ESP-01 или сканер отпечатков пальцев, он либо отправляет на линию свои данные, либо держит её на постоянном уровне и срывает рукопожатие загрузчика. Результат — снова programmer is not responding или not in sync. Быстрое решение — отключать провода D0 и D1 на время загрузки; постоянное — перенести модуль на другие пины с SoftwareSerial:
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}В этом скетче TX модуля HC-05 подключён к D10, а RX — к D11. Вход RX у HC-05 работает на 3,3 V, поэтому между ним и D11 поставь делитель напряжения из резисторов 1 kΩ и 2 kΩ. Теперь можно загружать код с подключённым модулем и отправлять на телефон всё, что набираешь в мониторе порта. Полное подключение и режим AT-команд описаны в руководстве Bluetooth-модуль HC-05. На Mega SoftwareSerial не нужен: у платы есть дополнительные аппаратные последовательные порты, например Serial1 (TX1 = D18, RX1 = D19).
Монитор порта и программы, которые занимают порт
Последовательный порт одновременно может открыть только одна программа. Поэтому Windows показывает Access is denied, а macOS и Linux — Resource busy. Arduino IDE обычно приостанавливает свой монитор порта на время загрузки, но не во всех версиях и не со всеми платами это работает идеально, особенно с ESP32; если появилась ошибка, сначала закрой вкладку монитора порта. Чаще порт занят чем-то другим: вторым окном IDE, открытым плоттером, PuTTY, программой для 3D-принтера вроде Cura, монитором PlatformIO в VS Code или скриптом на Python, работающим в фоне. Закрой их, переподключи плату и попробуй снова. В Linux увидеть, какая программа держит порт, можно командой sudo lsof /dev/ttyUSB0.
Плата сломана? Тест «петли» и запись загрузчика
Если всё перечисленное выше уже испробовано, а код всё равно не загружается, нужно выяснить, где проблема — на стороне USB или в основном процессоре. Классический способ для Uno и Nano — тест «петли» (loopback): основной процессор удерживается в сбросе, а микросхема USB-UART разговаривает сама с собой. Загружать код для этого теста не нужно.
- Сними с платы все провода, оставь подключённым только USB-кабель.
- Перемычкой соедини пин RESET с GND; так ATmega328P остаётся в сбросе и не мешает на линии.
- Вторым проводом соедини между собой пины D0 и D1.
- Выбери порт платы в IDE и открой монитор порта; скорость для этого теста не важна.
- Набери в поле несколько символов и отправь. Если текст сразу вернулся, кабель, драйвер и микросхема USB-UART в порядке, а проблема в основном процессоре или загрузчике. Если ничего не вернулось, проблема на стороне USB.
- Не забудь снять оба провода после теста.
Если тест «петли» пройден, но загрузка всё равно не работает, а светодиод L не мигает коротко при нажатии на сброс, возможно, загрузчик стёрт или микросхему заменили. Загрузчик можно записать заново с помощью второй Uno. Загрузи «Файл › Примеры › 11.ArduinoISP › ArduinoISP» в ту Uno, которая будет программатором. Затем соедини D10 программатора с пином RESET целевой платы, D11, D12 и D13 — с одноимёнными пинами целевой платы, а 5V и GND — между собой. Поставь конденсатор 10 µF между RESET и GND на Uno-программаторе; так она не будет сбрасывать сама себя. Наконец выбери «Инструменты › Программатор › Arduino as ISP», укажи целевую плату в меню плат и запусти «Инструменты › Записать загрузчик» (Burn Bootloader). Этим же способом можно поставить на клон Nano новый Optiboot.
ESP32 не загружается: Failed to connect и кнопка BOOT
На ESP32 загрузкой занимается esptool, а не avrdude. Сначала в выводе появляется строка Connecting........_____....., пока esptool пытается перевести плату в режим загрузки. Если не получилось, появится ошибка, начинающаяся с A fatal error occurred: Failed to connect to ESP32. В актуальных версиях esptool, если плата загрузилась в обычном режиме, сообщение продолжается строкой Wrong boot mode detected (0x13)! The chip needs to be in download mode (чип должен быть в режиме загрузки); 0x13 означает, что плата стартовала в обычном режиме, а не в режиме загрузки. Если плата не отвечает совсем, сообщение заканчивается на No serial data received; старые версии пишут в этом случае Timed out waiting for packet header. Если плата не может сама перейти в режим загрузки, это делается вручную.

- Нажми «Загрузка» в IDE и следи за окном вывода.
- Как только появится Connecting..., нажми и удерживай кнопку BOOT на плате.
- Если связь всё равно не устанавливается, удерживая BOOT, коротко нажми и отпусти EN.
- Отпусти BOOT, когда в выводе побегут строки, начинающиеся с Writing at, и проценты загрузки.
- Загрузка заканчивается строкой Hard resetting via RTS pin.... Если программа не запустилась, один раз нажми EN.
Почему так происходит? Чтобы войти в режим загрузки, пин GPIO0 у ESP32 должен быть в LOW в момент старта. Схема автосброса на двух транзисторах на отладочных платах делает это автоматически сигналами DTR и RTS от USB-микросхемы; на дешёвых платах схема может не попасть в нужный момент. Если надоело каждый раз жать BOOT, есть постоянное решение: подключи электролитический конденсатор 10 µF между пином EN и GND (минусом к GND). Конденсатор замедляет нарастание напряжения на линии EN и даёт схеме автосброса время удержать GPIO0 в LOW.
| Сообщение об ошибке ESP32 | Вероятная причина | Решение |
|---|---|---|
| «Wrong boot mode detected (0x13)» | Схема автосброса не смогла перевести плату в режим загрузки | Кнопка BOOT; постоянное решение — 10 µF между EN и GND |
| «No serial data received» или «Timed out waiting for packet header» | От платы вообще нет данных: кабель только для зарядки, не тот порт или плата так и не вошла в режим загрузки | Кабель с передачей данных, правильный порт в «Инструменты › Порт», кнопка BOOT |
| «This chip is ESP32-S3 not ESP32. Wrong --chip argument?» | В «Инструменты › Плата» выбрана другая модель ESP32, чем на твоей плате | Выбери модель, которая соответствует модулю на плате (ESP32, ESP32-S3 и ESP32-C3 — разные платы) |
| «Could not open COM3, the port is busy or doesn't exist» (порт занят или не существует) | Порт занят монитором порта или другой программой | Закрой монитор порта и другие программы, переподключи плату |
| «Invalid head of packet: Possible serial noise or corruption» | Длинный или плохой кабель, слабое питание, высокая скорость загрузки | Снизь «Инструменты › Upload Speed» с 921600 до 115200 |
| Загрузка проходит, но при старте видно «flash read err, 1000» | GPIO12 подтянут к HIGH при старте, поэтому выбирается неправильное напряжение flash-памяти | Перенеси модуль с GPIO12 на другой пин |
| Порт пропадает после загрузки (ESP32-S3, ESP32-C3) | На плате со встроенным USB программа зависла или отключила USB | Подключи USB, удерживая BOOT; «Инструменты › 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 и UF2
У Pico нет отдельной микросхемы USB-UART: у RP2040 свой USB-контроллер, а загрузчик живёт в ПЗУ микросхемы, которое нельзя стереть. Поэтому программно «окирпичить» Pico почти невозможно. Если удерживать кнопку BOOTSEL при подключении USB-кабеля, Pico появляется на компьютере как флешка с именем RPI-RP2 (у Pico 2 диск называется RP2350). Любой файл .uf2, перетащенный на этот диск, записывается в плату, и она сама перезапускается; так же устанавливается и MicroPython.
Если программировать Pico в Arduino IDE, при первой загрузке COM-порта ещё нет; подключи плату с зажатой BOOTSEL и нажми «Загрузка». После первого скетча плата открывает последовательный порт, и для следующих загрузок BOOTSEL уже не нужна. Если код зависает или отключает USB, порт снова пропадает и появляется ошибка No drive to deploy; тогда вернись к способу с BOOTSEL. Если пользуешься MicroPython, в правом нижнем углу Thonny интерпретатором должен быть выбран MicroPython (Raspberry Pi Pico). Про пины и настройку Pico читай в руководстве Что такое Raspberry Pi Pico?
| Симптом | Вероятная причина | Решение |
|---|---|---|
| Диск RPI-RP2 так и не появляется | Кабель только для зарядки, или BOOTSEL нажата уже после подключения кабеля | Возьми кабель с передачей данных; сначала нажми BOOTSEL, потом подключи кабель, отпусти, когда появится диск |
| Arduino IDE: No drive to deploy | Плата не в режиме BOOTSEL, и последовательного порта нет | Переподключи с зажатой BOOTSEL, затем нажми «Загрузка» |
| Thonny: «Couldn't find the device automatically» (устройство не найдено) | MicroPython не установлен или плата всё ещё в режиме BOOTSEL | Установи UF2 через пункт Thonny «Install or update MicroPython» |
| Thonny: «Device is busy or does not respond» (устройство занято или не отвечает) | main.py застрял в бесконечном цикле и игнорирует команды | Нажми кнопку «Стоп» или Ctrl+C; если не помогает, переподключи плату |
| Код работал, но плата не запускает его сама | Файл не сохранён на Pico под именем main.py | Сохрани файл в Raspberry Pi Pico под именем main.py |
| Плата всё время зависает, и ничего не загружается | Повреждённый файл или ошибочная программа во flash-памяти | Очисти flash-память файлом flash_nuke.uf2, затем заново установи 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)Мелкие, но коварные причины, которые легко упустить
- Leonardo, Micro и Uno R4: на этих платах со встроенным USB порт во время загрузки может ненадолго смениться. Если загрузка зависает, нажми «Загрузка» и один раз нажми кнопку сброса, как только закончится компиляция и начнётся этап загрузки (на Uno R4 — дважды быстро); плата какое-то время ждёт в загрузчике, и код загрузится.
- Сломан автосброс: если на Uno или Nano не работает автосброс, удерживай кнопку сброса, нажми «Загрузка» и отпусти кнопку, как только в выводе появится строка с размером скетча.
- Шилды и внешние схемы: шилд с драйвером мотора или схема, нагружающая линию 5V, могут вызвать просадку напряжения во время загрузки и оборвать запись на середине.
- Не тот порт в macOS: /dev/cu.Bluetooth-Incoming-Port и /dev/cu.debug-console в списке портов — это не твоя плата, а системные порты. В имени порта платы есть usbmodem, usbserial или wchusbserial; если есть сомнения, переподключи плату и посмотри, какой порт пропадёт.
- Не-ASCII символы в имени пользователя: если в имени папки пользователя Windows есть кириллица или буквы с диакритикой, инструменты компиляции и загрузки некоторых пакетов плат, особенно пакета ESP32, могут не находить файлы. Перенеси папку скетчей в «Настройках» на путь без таких символов; если проблема осталась, создай нового пользователя Windows.
- Скетч слишком большой: предупреждение Sketch too big — не ошибка загрузки; оно значит, что код не помещается в примерно 31,5 КБ flash-памяти, которые остаются у Uno после загрузчика. Сократи библиотеки и длинные строки или перейди на более мощную плату.
- Порт завис после сна: после выхода компьютера из спящего режима порт может зависнуть; обычно помогает перезапуск IDE или подключение платы к другому USB-порту.
Загрузка работает: что дальше?
- Первая схема: собери свою схему Blink со светодиодом и резистором, а потом добавь кнопку для первого интерактивного проекта.
- Последовательная связь: теперь, когда понятно, как пины 0 и 1 влияют на загрузку, попробуй включать светодиод с телефона через Bluetooth-модуль HC-05.
- Чтение датчиков: с помощью руководства по датчикам Arduino выбери первые проекты, которые измеряют температуру, расстояние и свет.
- Без проводов: собери на ESP32 проект, который подключается к Wi-Fi и управляется с телефона; благодаря OTA потом можно будет загружать код и по воздуху.
- Выбор подходящей платы: если не можешь выбрать между Uno, Nano и Mega, прочитай статью Какую Arduino купить?.
Ошибки загрузки раздражают при первой встрече, но у каждой есть логичная причина, и почти все находятся в одном и том же порядке: кабель, драйвер, порт, настройки платы, последовательная линия и, наконец, загрузчик. Держи этот порядок в голове — и следующую ошибку решишь за минуты. Когда плата начнёт принимать код, в приложении BlueGrays тебя ждёт множество проектов для Arduino, ESP32 и Raspberry Pi Pico — от мигания светодиодом до Wi-Fi и беспроводного обновления по OTA, каждый с пошаговой схемой подключения и готовым кодом, так что плату можно сразу пустить в дело.
Частые вопросы
Почему код не загружается в Arduino?
Самые частые причины — USB-кабель только для зарядки, не установлен драйвер CH340, выбраны не та плата или порт и модули, подключённые к пинам 0 и 1. На клонах Nano ещё нужно выбрать в настройке «Процессор» вариант ATmega328P (Old Bootloader). Проверь всё это по порядку — и почти всегда окажется, что плата исправна.
Как исправить avrdude stk500_getsync not in sync resp=0x00?
Эта ошибка означает, что компьютер не может завершить рукопожатие с загрузчиком на плате. Сначала выбери правильные порт и плату, на Nano попробуй вариант Old Bootloader в меню «Процессор» и отключи провода от D0 и D1. Если ошибка не уходит, проверь сторону USB тестом «петли» и при необходимости запиши загрузчик заново.
Почему компьютер не видит мою Arduino?
Если «Инструменты › Порт» пуст, кабель не передаёт данные или не установлен драйвер микросхемы USB-UART. Попробуй другой кабель с передачей данных и проверь в «Диспетчере устройств» Windows, появляется ли плата в разделе «Порты (COM и LPT)». Если в разделе «Другие устройства» видно USB2.0-Serial с жёлтым значком, установи драйвер CH340.
Как установить драйвер CH340?
Windows 10 и 11 обычно ставят его автоматически; если нет, скачай и запусти пакет CH341SER от производителя WCH и переподключи плату. В актуальных версиях macOS драйвер уже есть, а в Linux он входит в ядро. В Linux нужно только добавить своего пользователя в группу dialout.
Когда нажимать кнопку BOOT при загрузке в ESP32?
Зажми BOOT, как только в выводе появится Connecting..., и отпусти, когда побегут проценты загрузки. Так ESP32 переходит в режим загрузки. Если это нужно при каждой загрузке, конденсатор 10 µF между EN и GND обычно решает проблему навсегда.
Что делать, если Raspberry Pi Pico не распознаётся?
Удерживая кнопку BOOTSEL, подключи Pico к компьютеру кабелем с передачей данных; она должна появиться как диск RPI-RP2. В этом режиме можно перетащить файл UF2 с MicroPython или загрузить код из Arduino IDE. Если диск не появляется, кабель не передаёт данные; загрузчик Pico находится в ПЗУ, поэтому программно его не сломать.
Что собрать после прочтения
Все проекты
Мигающий светодиод
Самое первое «привет» в электронике: включение и выключение одного светодиода. Arduino включает и выключает светодиод через короткие промежутки, поэтому свет быстро мигает. Ты самым простым способом в

Мигающий светодиод на ESP32
Учит базовой работе с выходами GPIO на ESP32. Эффект мигания получается включением и выключением светодиода с цифрового пина. Это ESP32-версия классического проекта мигания на Arduino UNO; базовые команды мигания в среде Arduino те же, но расположение пинов ESP32 и уровни GPIO 3,3 V отличаются от Arduino UNO.

Мигание встроенным светодиодом ESP32
Мигание встроенным синим светодиодом на ESP32 DevKit V1. Внешние компоненты не нужны! Первый проект, который стоит попробовать после покупки ESP32. Встроенный светодиод подключён к GPIO 2.

Мигание встроенным светодиодом Raspberry Pi Pico (Pico и Pico W)
Первый проект серии Raspberry Pi Pico! Мигаем зелёным встроенным светодиодом, чтобы проверить, что плата работает, — классический первый опыт «Hello World». НИКАКИХ внешних компонентов, только Pico и USB-кабель. Код написан на MicroPython (официальном языке, поддерживаемом Raspberry Pi Foundation). Изучи в Thonny IDE класс machine.Pin, режим Pin.OUT, методы led.on()/off() и time.sleep(). Каждое переключение видно в выводе (REPL).

Измерение расстояния HC-SR04 (вывод в порт)
Датчик HC-SR04 работает совсем как летучая мышь, которая находит дорогу в темноте: он посылает звук, которого ты не слышишь, слушает эхо и измеряет, насколько далеко предмет перед ним. Arduino каждые

Управление светодиодом с телефона по Bluetooth
Небольшая репетиция того, как включать и выключать свет в комнате с телефона. Bluetooth-модуль передаёт в Arduino буквы, отправленные с телефона; одна буква включает красный светодиод, другая — зелёны

Односторонняя связь между двумя Arduino
Ты заставляешь две Arduino разговаривать по одному проводу: нажми кнопку на одной, и на другой загорится светодиод, нажми снова — погаснет. Плата-передатчик сообщает о нажатии кнопки коротким сообщени

Обновление ESP32 по воздуху (OTA): беспроводная установка прошивки (с экраном LCD)
В этом проекте ты узнаешь, как загружать новую прошивку в ESP32 по Wi-Fi без USB-кабеля. С библиотекой ArduinoOTA ESP32 становится видна в сети и автоматически появляется как bluegrays-ota на вкладке «Сетевой порт» в Arduino IDE. Первая загрузка выполняется по USB, а все следующие обновления — без проводов: это важно для устройств в эксплуатации. I2C LCD показывает состояние Wi-Fi, IP-адрес, имя хоста, процент загрузки OTA и сообщения об ошибках.
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

