Руководства · 14 мин чтения

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. В каждом разделе есть короткий тестовый скетч, чтобы проверить плату, когда проблема решена.

Плата Arduino Uno R3
Arduino Uno: маленькая микросхема рядом с USB-разъёмом отвечает за связь с компьютером; на оригинальных платах это ATmega16U2, на клонах чаще всего CH340. Светодиоды TX, RX и L помогают следить за загрузкой.

Как устроена загрузка: ошибка компиляции или ошибка загрузки?

Когда нажимаешь «Загрузка» (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»
Чтобы как следует прочитать ошибку, открой «Файл › Настройки» (File › Preferences) и рядом с «Показывать подробный вывод во время» (Show verbose output during) отметь «загрузки» (upload). exit status 1 или Failed uploading в самом конце говорят только о том, что что-то пошло не так; настоящая подсказка — первая строка ошибки выше, которая начинается с avrdude:. Копируй именно её, когда просишь помощи на форумах.

Самые частые ошибки 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

Быстрый чек-лист и тестовый скетч для загрузки

  1. Сними с платы всё: шилды, модули и провода на пинах 0 и 1. Оставь подключённым только USB-кабель.
  2. Подключи плату прямо к USB-порту на задней панели компьютера; избегай хабов, удлинителей и разъёмов на передней панели.
  3. Открой «Инструменты › Порт» и посмотри на список. Отключи и снова подключи плату и запомни, какой порт пропадает и появляется снова. Если список не меняется, проблема в кабеле или драйвере.
  4. Выбери точную модель платы в «Инструменты › Плата»; на Nano ещё выбери правильный загрузчик в «Инструменты › Процессор».
  5. Убедись, что порт не занят другой программой или вторым окном IDE; если сомневаешься, закрой их все.
  6. Включи подробный вывод при загрузке и загрузи маленький тестовый скетч ниже. Проверка на коде, в котором точно нет ошибок, исключает проблемы компиляции.
  7. Всё ещё не получается? Нажми кнопку сброса: если светодиод L быстро мигнёт один или несколько раз, загрузчик жив. Тогда переходи к тесту «петли» ниже.
  8. Попробуй другой компьютер или другую плату. Если проблема переходит вместе с платой, дело в плате; если остаётся с компьютером — в драйвере или настройках операционной системы.
C++ (Arduino IDE)
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-TTL на CH340
Микросхема CH340: на большинстве клонов Arduino Uno и Nano она отвечает за связь USB с последовательным портом, и чтобы компьютер увидел плату, нужно установить её драйвер.
USB-микросхемаГде встречаетсяИмя в WindowsИмя порта в macOS и Linux
ATmega16U2Оригинальные Uno R3, Mega 2560Arduino Uno (COMx)/dev/cu.usbmodem… или /dev/ttyACM0
CH340G, CH340CКлоны Uno, Nano, Mega, некоторые платы ESP32USB-SERIAL CH340 (COMx)/dev/cu.usbserial-… или /dev/ttyUSB0
CP2102, CP2104ESP32 DevKit, NodeMCUSilicon Labs CP210x USB to UART Bridge (COMx)/dev/cu.SLAB_USBtoUART или /dev/cu.usbserial-…, /dev/ttyUSB0
FT232RLСтарые оригинальные Nano, адаптеры FTDIUSB Serial Port (COMx)/dev/cu.usbserial-… или /dev/ttyUSB0
CH9102Новые отладочные платы ESP32USB-Enhanced-SERIAL CH9102 (COMx)/dev/cu.wchusbserial… или /dev/cu.usbmodem…, /dev/ttyACM0
Встроенный USB (RP2040, ATmega32U4)Raspberry Pi Pico, Leonardo, MicroUSB 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.

Если компьютер отключает USB-порт в момент подключения платы или плата всё время подключается и отключается, в схеме короткое замыкание или перегрузка по току. У Arduino Uno USB-линию защищает самовосстанавливающийся предохранитель на 500 mA; когда он срабатывает, плата вообще не появляется. Сними все провода, измерь мультиметром сопротивление между 5V и GND, а мощные моторы и сервоприводы питай от внешнего источника, а не от 5V с USB.

Выбраны не та плата, процессор или порт

В 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)». Если неясно, какой вариант правильный, пробуй варианты по очереди; неправильный выбор плате ничем не вредит.

Вариант процессораЗагрузчикСкорость загрузкиКогда выбирать
ATmega328POptiboot (новый)115200 бодОригинальные Nano и платы с обновлённым загрузчиком
ATmega328P (Old Bootloader)ATmegaBOOT (старый)57600 бодБольшинство клонов Nano на CH340
ATmega168ATmegaBOOT (старый)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:

C++ (Arduino IDE)
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 разговаривает сама с собой. Загружать код для этого теста не нужно.

  1. Сними с платы все провода, оставь подключённым только USB-кабель.
  2. Перемычкой соедини пин RESET с GND; так ATmega328P остаётся в сбросе и не мешает на линии.
  3. Вторым проводом соедини между собой пины D0 и D1.
  4. Выбери порт платы в IDE и открой монитор порта; скорость для этого теста не важна.
  5. Набери в поле несколько символов и отправь. Если текст сразу вернулся, кабель, драйвер и микросхема USB-UART в порядке, а проблема в основном процессоре или загрузчике. Если ничего не вернулось, проблема на стороне USB.
  6. Не забудь снять оба провода после теста.

Если тест «петли» пройден, но загрузка всё равно не работает, а светодиод 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. Если плата не может сама перейти в режим загрузки, это делается вручную.

Отладочная плата ESP32
Отладочная плата ESP32: кнопки EN (сброс) и BOOT (GPIO0) позволяют вручную перевести её в режим загрузки, когда автоматическая загрузка не срабатывает.
  1. Нажми «Загрузка» в IDE и следи за окном вывода.
  2. Как только появится Connecting..., нажми и удерживай кнопку BOOT на плате.
  3. Если связь всё равно не устанавливается, удерживая BOOT, коротко нажми и отпусти EN.
  4. Отпусти BOOT, когда в выводе побегут строки, начинающиеся с Writing at, и проценты загрузки.
  5. Загрузка заканчивается строкой 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»
Пины GPIO0, GPIO2, GPIO12 и GPIO15 у ESP32 — это strapping-пины, которые считываются при старте. Модуль, который подтягивает GPIO2 к HIGH или не даёт GPIO0 опуститься в LOW, мешает войти в режим загрузки; модуль, который подтягивает GPIO12 к HIGH, может вообще не дать плате запуститься. Если загрузка не проходит только с подключённой схемой, сначала проверь эти пины. Список безопасных пинов — в утилите Распиновка и в руководстве Что такое ESP32?
C++ (Arduino IDE)
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
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 находится в ПЗУ, поэтому программно его не сломать.

Все проекты
Мигающий светодиод
#1Новичок

Мигающий светодиод

Самое первое «привет» в электронике: включение и выключение одного светодиода. Arduino включает и выключает светодиод через короткие промежутки, поэтому свет быстро мигает. Ты самым простым способом в

4.6(188)
1127
Мигающий светодиод на ESP32
#103Новичок

Мигающий светодиод на ESP32

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

4.7(37)
99
Мигание встроенным светодиодом ESP32
#106Новичок

Мигание встроенным светодиодом ESP32

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

4.8(29)
53
Мигание встроенным светодиодом Raspberry Pi Pico (Pico и Pico W)
#147Новичок

Мигание встроенным светодиодом 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).

5.0(1)
10
Измерение расстояния HC-SR04 (вывод в порт)
#27Новичок

Измерение расстояния HC-SR04 (вывод в порт)

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

4.6(46)
71
Управление светодиодом с телефона по Bluetooth
#34Новичок
Premium

Управление светодиодом с телефона по Bluetooth

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

4.8(68)
89
Односторонняя связь между двумя Arduino
#57Средний
Premium

Односторонняя связь между двумя Arduino

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

4.4(37)
50
Обновление ESP32 по воздуху (OTA): беспроводная установка прошивки (с экраном LCD)
#132Продвинутый
Premium

Обновление ESP32 по воздуху (OTA): беспроводная установка прошивки (с экраном LCD)

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

4.6(14)
22