На моём столе стояли Uno на COM3 и Nano на COM4, и я вёл между ними диалог: с Uno читал датчики, в Nano заливал исправленный протокол. В линейке 1.8 я выбирал плату в окне Uno — и с удивлением видел, что выбор в окне Nano тоже перевернулся: Tools у всех окон общий, смена в одном меняет другое. Две заливки подряд заканчивались тем, что прошивка улетала не туда, куда смотрю глазами. Вечер разбирательств закончился наклейками на корпусах и правилом «сначала глянь подпись, потом жми» — но сначала я хотел понять, почему вообще так вышло, и разберём это по шагам.
База про выбор платы и порта — в уроке про выбор платы и порта: там список шагов для одной платы. Здесь сценарий тяжелее: несколько плат на одном компьютере, два окна среды, порт, который держит монитор, и номера COM, переезжающие при переткании. Всё это — про один делящийся ресурс: у каждой платы serial-порт один, и владеет им в момент времени кто-то один.
Ставки в теме выше, чем кажутся: не та плата в списке означает, что прошивка уйдёт в соседний корпус, и вы узнаете об этом по погасшему рабочему скетчу. Занятый порт означает жалобу при заливке, которая выглядит как поломка кабеля. Обе ситуации лечатся ритуалом в десять секунд — его я и отдаю в конце урока.
Платы в примерах — Uno и Nano на CH340, самая частая пара на столе: обе дают один порт, обе переезжают по номерам при переткании. С ESP32 список портов ведёт себя иначе — на плате фактически два порта, и нумерация скачет после каждой заливки, но ритуал из этого урока работает и там; ниже всё про два обычных порта и две обычные платы.
Два окна: кто чей выбор помнит
В линейке 1.8 список Инструменты один на все окна: выбираете плату или порт в первом — то же значение подхватывает второе. Механика простая, следствие коварное: два окна в 1.8 — это не две пары плата-порт, а одно общее состояние в двух копиях экрана. Рабочее решение старой линейки — вторая копия самой среды: пустой файл portable.txt в папке второй копии делает её настройки отдельными, и два каталога со средой живут как два независимых инструмента. Детали portable-механики разобраны в уроке про переносную среду.
Во второй среде окна независимые: каждое помнит свою пару плата и порт, кнопка Upload шьёт в подписанную рядом плату, и подпись эта честная. Для стола с двумя платами это главная причина, по которой я переехал: два окна рядом, слева Uno на COM3, справа Nano на COM4, и ни один выбор не сползает в соседа.
Ритуал перед кнопкой — три взгляда. Первый: подпись платы и порта рядом с кнопкой заливки во второй среде или Tools → Port в старой. Второй: при попытке заливки светодиод TX мигает на целевой плате — смотрите на неё, а не на соседнюю: если мигает не та, жмите стоп. Скорость заливки тоже входит в подпись: для Nano со старым загрузчиком честные 57600, для новых — 115200, и несовпадение выглядит как отказ порта, а не как неверная плата. Третий: после прошивки монитор у нужного окна. Десять секунд, которые стоят дешевле часа поисков «почему Nano перестал отвечать».
И про метки на корпусах: наклейка uno-a и nano-b стоит копейки, а споров не оставляет вовсе. Плюс метка в скетче — строка, которую плата печатает в Serial при старте; код ниже. Когда на столе больше двух плат, метки превращаются из привычки в необходимость.
Порт — ресурс одновладельческий: держит его монитор, чужой терминал или начатая заливка. Самый частый жилец — монитор порта того же окна: в 1.8 заливка при открытом мониторе падает с сообщением о занятом порте, и монитор надо закрыть руками. Во второй среде панель закрывается на время прошивки и открывается обратно сама — деталь мелкая, а жалоб убирает пачками. Поведение панели разобрано в уроке про монитор порта в IDE 2.
Номера COM переезжают: переткнули кабель в другой USB-разъём — Windows может выдать плате следующий номер, хабы добавляют ещё разброса. Список портов обновляется при открытии Tools → Port, и старый номер там просто исчезает. Про хабы отдельное слово: дешёвый пассивный хаб на четыре порта иногда теряет соседние устройства при переткании, и ваш COM на секунду исчезает из списка; для двух плат я втыкаюсь напрямую в материнку — надёжнее любых сплиттеров. Если порт в списке серый или его нет вовсе — это отдельная история с драйвером CH340, которую я разбирал в уроке про серый порт; здесь только правило: номер не запоминать, каждый раз смотреть заново.
Nano в паре с Uno путается чаще остальных: у части плат старый загрузчик, и заливка падает на not in sync, если в Tools → Processor не выбран вариант Old Bootloader. Симптом и лечение разобраны в уроке про Nano со старым загрузчиком — если кратко, это выбор процессора в Tools, а не поломка платы. В двухоконной жизни это стреляет особенно часто: плата выбрана верно, порт верен, а заливка падает — и только процессор виноват. Моя Nano 2015 года с тех пор живёт со стикером old bootloader на спине.
Отдельная строчка — платы с двумя портами на борту: ESP32 после заливки может сменить номер и подпись порта, потому что чип перечисляется как два устройства — порт прошивки и порт логов. Выбор «правильного» из двух лечится тем же ритуалом: подпись у кнопки, TX-мигание, метка в Serial. Мой модуль стабильно живёт на одном из двух номеров, и я просто смотрю список заново, не полагаясь на память: память в этой теме подводила чаще, чем кабель.
// Konstanta TAG - imya platy. Zalivaete na kazhduyu so svoej metkoj,// i v dvuh oknah monitora nikogda ne pereputae, gde kto.// Uno: #define TAG "uno-a" Nano: #define TAG "nano-b"#define TAG "uno-a" unsigned long tStart = 0; void setup() { Serial.begin(9600); Serial.print("privet, ya "); Serial.print(TAG); Serial.println(", sborka 2.3.x"); tStart = millis();} void loop() { unsigned long up = (millis() - tStart) / 1000; Serial.print(TAG); Serial.print(" up "); Serial.print(up); Serial.println(" s"); delay(1000);}| Ситуация | Кто виноват | Что делать |
|---|---|---|
| заливка падает, порт занят | монитор порта держит COM | закрыть монитор; в 2.x он закроется сам |
| сменил плату в одном окне — перевернулось во втором | 1.8: Tools общий на все окна | вторая копия среды с portable.txt или переезд на 2.x |
| порт из списка исчез или сменил номер | переткнули USB, хаб, переезд | открыть Tools → Port заново и выбрать по факту |
| Nano падает not in sync | старый загрузчик платы | Tools → Processor: Old Bootloader |
Порядок на столе с двумя платами
Мой расклад после года с двумя платами: каждой плате — своё окно, своя наклейка и метка в скетче; заливка только после TX-мигания на нужном корпусе. Когда плат становится больше двух, окна перестают справляться морально: держать три-четыре окна открытыми можно, а вот не перепутать — уже дисциплина. Для больших наборов плат я переключаюсь на терминал: arduino-cli компилирует и заливает одной командой с явным портом, и «не тот COM» в команде виден глазами, а не догадывается из списка.
Когда правки идут по вечерам, окна соседствуют с терминалом: одна команда собирает и заливает в Uno на COM3, вторая — в Nano на COM4, и обе видно в истории терминала. Я держу два таких вызова в одном скрипте с комментариями, и за полгода не было ни одной заливки мимо: в команде порт виден глазами, а окно остаётся для мониторинга и правок. Разделение «заливка — терминал, наблюдение — окно» держит обе дисциплины и не даёт им мешать друг другу.
Два монитора одновременно — тоже честный режим: во второй среде панель у каждого окна своя, скорости у каждой свои. Читать оба потока сразу я не научился: глаза разъезжаются, поэтому один монитор открыт, второй по необходимости. Если плате нужно слать команды с клавиатуры — числа и буквы через parseInt — это отдельное умение, оно разобрано в уроке про разбор чисел из Serial, и в двухоконной жизни оно пригождается на обеих платах сразу.
Мнение с условием: две платы на одном компьютере — рабочая норма, а не экзотика, и среды с ней справляются. Предел наступает не в количестве портов — их хватит, — а во внимании: третья одновременная заливка уже требует скрипта вместо человека. Всё, что вы делаете руками чаще трёх раз в день, просится в команду терминала или хотя бы в наклейку.
- 1. В 1.8 выбираю другую плату в окне A. Что увидит окно B?
- 2. Заливка падает с жалобой на занятый порт. Кто его держит чаще всего?
- 3. Чем хороши два окна в среде 2.x?
- 4. Nano выбран верно, порт верен, заливка падает not in sync. Первая проверка?
- 5. Кабель переткнули в другой USB-разъём. Что с портом?
- В 1.8 список Tools общий: выбор платы в одном окне меняет все окна; лечение — вторая копия среды с portable.txt.
- В 2.x каждое окно держит свою пару плата-порт — это главный аргумент двухоконной жизни.
- Порт одновладельческий: монитор, терминал или заливка — жалобы на занятый порт лечатся закрытием жильца.
- Номера COM переезжают при переткании и через хабы: номер не запоминают, а смотрят в Tools → Port по факту.
- Ритуал из трёх ступеней — подпись у кнопки, TX-мигание на целевой плате, метка в Serial — стоит десять секунд.
Частые вопросы по теме урока
- В 1.8 выбираю другую плату в окне A. Что увидит окно B?
- В 1.8 список Tools один на все окна. Отдельные настройки даёт вторая копия среды с portable.txt или линейка 2.x. тот же выбор: Tools в 1.8 общий на все окна
- Заливка падает с жалобой на занятый порт. Кто его держит чаще всего?
- Монитор — самый частый жилец порта. В 1.8 закрывается руками, в 2.x панель закрывается на время заливки сама. монитор порта того же окна
- Чем хороши два окна в среде 2.x?
- Независимые окна — главное отличие от 1.8. Кнопка Upload шьёт в плату, подписанную рядом с кнопкой. каждое окно помнит свою пару плата и порт
- Nano выбран верно, порт верен, заливка падает not in sync. Первая проверка?
- Часть Nano выпускалась со старым загрузчиком — Tools → Processor: Old Bootloader. Разбор симптома — в уроке про Nano. проверить Process... Old Bootloader в Tools
- Кабель переткнули в другой USB-разъём. Что с портом?
- Windows может выдать плате другой номер COM. Номер не запоминают — каждый раз смотрят в списке по факту. номер может смениться — откройте Tools → Port заново