Мигалка была готова за пять минут: компиляция прошла, зелёная полоса, вдох — и тут среда выдала avrdude: stk500_getsync(): not in sync. Я нажал Upload ещё три раза с тем же результатом и уже грешил на плату, пока не заметил: в шапке стоял COM1. Встроенный порт материнской платы, который есть в каждом компьютере и к Arduino отношения не имеет. Через неделю я споткнулся второй раз: переставил плату в соседний USB-разъём, номер сменился с COM3 на COM4, а я шил в старый — среда честно стучалась туда, где платы уже не было.
Перед загрузкой среда должна знать две вещи: какая плата и куда шить. В IDE 2 обе всегда видны в шапке окна, и именно туда я теперь смотрю первым делом — раньше, чем нажимать кнопки. Выбор, сделанный один раз, живёт своей жизнью и меняется под ногами, стоит переткнуть плату, — поэтому это не галочка из чек-листа, а привычка.
Разберём, где находятся оба списка и что означают их состояния, как работает автодетект и почему он бывает честен с клонами, когда нужен ручной выбор и как проверить, что выбранный порт жив. Проверка занимает три секунды и выглядит скучно ровно до первого вечера с not in sync — после него она становится рефлексом. Владельцам Linux про права на порт — отдельный урок про dialout: там та же логика, но с группами и правилами udev. А ритуал самой первой загрузки мы проходили в уроке про первый скетч в IDE.
Шапка, два списка и четыре состояния порта
В IDE 2 всё нужное собрано в одном месте. В шапке окна, сразу после имени файла, среда пишет выбранную плату и порт: «sketch_nov13 — Arduino Uno на COM3». Тот же выбор дублируется выпадающим списком на панели инструментов слева от кнопки загрузки и пунктами «Плата» и «Порт» в меню «Инструменты». Меню показывает больше, чем список на панели, и именно в него я заглядываю, когда что-то пошло не так.
Состояний у списка портов несколько, и у каждого свой диагноз. Серый список с единственным пунктом «Не выбрано» — среда не видит ни одного порта: плата не подключена, кабель без данных или драйвер не встал. Один COM1 в списке — это порт самой системы, не ваша плата: выбирать его бесполезно. Пункт с подписью модели — «Arduino Uno (COM3)» у официальных, «USB-SERIAL CH340 (COM3)» у клонов — то, что нужно. А если в списке висят полдюжины COM с Bluetooth — ноутбук показывает свои беспроводные модули, их игнорируем и ищем свою строку. Номера COM не закреплены за устройствами навсегда: это очередь выдачи, а не паспорт. Поэтому формулировка «у меня плата всегда COM3» верна ровно до тех пор, пока вы не переткнули плату и не подключили новый USB-конвертер.
| Что в списке портов | Что это значит | Что делать |
|---|---|---|
| Серый список, «Не выбрано» | Среда не видит ни одного порта | Проверить кабель и драйвер, переткнуть плату напрямую |
| Только COM1 | Встроенный порт системы, к плате отношения не имеет | Игнорировать и искать строку своей платы ниже |
| «Arduino Uno (COM3)» | Официальная плата, драйвер на месте | Выбрать и убедиться, что подпись осела в шапке |
| «USB-SERIAL CH340 (COM3)» | Клон: мост CH340 вместо 16U2 | Выбрать этот порт; имя другое, суть та же |
Автодетект в IDE 2 опирается на то, что USB-устройство называет себя само: мост 16U2 на официальной Uno при подключении отдаёт системе свои идентификаторы VID и PID, по которым среда узнаёт модель и подписывает пункт списка. У клонов с CH340 идентификаторы принадлежат конвертеру, а не Arduino, — отсюда честное имя «USB-SERIAL CH340» вместо «Arduino Uno». Это не дефект клона, а следствие того, как USB называет устройства: конвертеру нечего рассказать про чип, который сидит за ним. Если после установки клон всё равно не появился в списке, виноват почти наверняка драйвер, а не выбор порта — дорога в урок про драйвер CH340.
Из этого следует практическое правило. Пункт «Arduino Uno» в списке — приятный бонус официальной платы, но не условие работы: для клона выбираете строку CH340, а модель платы задаёте вручную в «Инструменты → Плата». Среде важно одно: правильный порт для шитья и правильная модель для компиляции. Если среда сама подписала плату в шапке — автодетект сработал; если нет, ручной выбор не хуже, он просто делается руками.
Отдельная история — порт, который в списке есть, но не работает. Первый кандидат — открытый монитор порта: COM-порт на Windows может слушать только один владелец, и пока окно монитора светится в углу, avrdude в порт не пустят; я дважды наступал на это, прежде чем выработал привычку закрывать монитор перед загрузкой. Второй кандидат — команда «Инструменты → Получить информацию о плате»: у официальной платы она читает из моста серийный номер и версию, у клона чаще отвечает пустотой — ещё один способ отличить 16U2 от CH340, не открывая диспетчер устройств. Третий — оставшийся от прошлой сессии терминал или другой экземпляр среды: закрывайте соседние программы, прежде чем обвинять плату.
Ручной выбор и жизнь с несколькими платами
Ручной выбор не спорит с автодетектом: выбрали один раз — среда держит выбор, пока плата на месте. Но перетыкание в другой разъём может сменить номер: Windows выдаёт номер порта заново, и нет гарантии, что достанется старое значение. Мой ритуал после любой перестановки — взгляд в шапку: там должна быть та же плата на том же порту, что и минуту назад. Три секунды страховки против минуты not in sync. Ту же пару — плата и порт — проверяет команда «Инструменты → Получить информацию о плате»: если порт выбран верно и плата жива, ответ приходит моментально; тишина в ответ — повод перечитать состояния списка выше.
С несколькими платами помогают два правила. Первое: одна плата — один физический разъём; у меня Uno живёт в левом гнезде, Nano в правом, и номера не путаются месяцами. Второе: подписать платы маркером по маске, потому что одинаковые корпуса выглядят одинаково и в темноте. На Linux имена другие: официальные платы появляются как /dev/ttyACM0, конвертеры вроде CH340 — как /dev/ttyUSB0, и после переподключения суффикс может вырасти на единицу. Права на запись в порт там же решаются группой dialout — см. урок про Linux выше.
Проверить, что порт жив, можно тем же способом, каким проверяют дверь: постучать. Шьём на плату «пинг» — скетч из блока ниже — и открываем монитор порта. При открытии порта Uno ресетается: мост дёргает линию DTR, плата проходит через бутлоадер и начинает с setup, поэтому строки «ping: port ok» приходят сразу после открытия окна. Если строки идут — связь есть, порт правильный, дальше можно шить что угодно. Чтение монитора по полочкам — в уроке про первый запуск монитора порта, а графики из тех же строк рисует урок про Serial Plotter: это те же байты, только картинкой. Пары led= и blinks= я печатаю с именами не для красоты: строки с подписями читаются и человеком, и графиком — привычка, которая экономит нервы, когда данных станет много.
int blinks = 0; void setup() { Serial.begin(9600); pinMode(13, OUTPUT); Serial.println("ping: port ok");} void loop() { blinks = blinks + 1; digitalWrite(13, HIGH); Serial.print("led=1 blinks="); Serial.println(blinks); delay(150); digitalWrite(13, LOW); Serial.print("led=0 blinks="); Serial.println(blinks); delay(350);}- 1. После нажатия Upload среда пишет avrdude: stk500_getsync(): not in sync. Что проверить первым?
- 2. Список портов серый, внутри единственный пункт «Не выбрано». Что это значит?
- 3. Почему у клона с CH340 в списке портов нет пункта «Arduino Uno»?
- 4. Вы переставили плату в другой USB-разъём. Что самое дешёвое сделать перед загрузкой?
- Плата и порт всегда на виду в шапке IDE 2 — взгляд туда раньше, чем на кнопку Upload
- Серый список — нет портов вообще: кабель, драйвер или подключение; один COM1 — порт системы, не вашей платы
- Автодетект читает VID/PID USB-моста: официальная Uno подписывается моделью, клоны честно пишутся как CH340
- Для клона порт выбирается по строке CH340, модель платы задаётся вручную в «Инструменты → Плата»
- Переткнули плату — гляньте в шапку; проверка связи: скетч-«пинг» плюс монитор порта, при открытии которого Uno ресетается
Частые вопросы по теме урока
- После нажатия Upload среда пишет avrdude: stk500_getsync(): not in sync. Что проверить первым?
- not in sync значит, что avrdude говорит не с той платой или плата не отвечает. Код тут ни при чём: сначала шапка и порт, потом кабель, и только потом остальное. Шапку окна: не смотрит ли среда в COM1 или старый порт
- Список портов серый, внутри единственный пункт «Не выбрано». Что это значит?
- Серый список — отсутствие портов вообще, а не ошибка выбора. Диагностика начинается с железа: кабель, порт, драйвер, а не с настроек среды. Среда не видит ни одного порта: кабель, драйвер или плата не подключена
- Почему у клона с CH340 в списке портов нет пункта «Arduino Uno»?
- Официальный мост 16U2 отдаёт в USB идентификаторы платы, CH340 — свои. Поэтому клон честно подписан как конвертер, а модель платы выбирается вручную. CH340 сообщает системе только своё имя конвертера: модели платы он не знает
- Вы переставили плату в другой USB-разъём. Что самое дешёвое сделать перед загрузкой?
- Windows выдаёт номер порта заново и не обязан давать прежний. Три секунды на взгляд в шапку экономят минуту на not in sync и полчаса на лишние сомнения. Взгляд в шапку: номер порта мог смениться