У коллеги на занятии оказался ноутбук 2013 года с Arduino IDE 1.8.19, у меня — 2.3.x на рабочей машине. Один и тот же Blink, одна и та же Uno. Я машинально ткнул F12, чтобы прыгнуть к функции, — и на его экране ничего не случилось. Он, в свою очередь, открыл у меня монитор порта и минуту искал скорость: в его версии она сидит в отдельном окне, в моей — в выпадающем списке на панели. Дальше вечера спор перешёл в стадию «а зачем вообще переезжать». Я закрыл его честным подсчётом: неделю гонял одну и ту же мигалку с функциями и датчиком в обеих средах, записывая каждую операцию, которая повторяется чаще двух раз в день, — и считал по ней, а не по скриншотам.
Расставлю вехи. Линейка 1.8 закончилась версией 1.8.19 — новых релизов там больше не выходит, ветку объявили legacy. Вторая среда стартовала версией 2.0 в сентябре 2022 года и дожила до линейки 2.3.x, в которой выходят и правки, и новые пункты меню. Установка и первый запуск второй среды были в уроке про установку IDE — здесь только то, что меняется в руках после переезда.
Что не изменилось — сначала, потому что это сберегает нервы. Под обоими окнами работает один и тот же компилятор avr-gcc и тот же инструмент заливки: бинарник из 1.8.19 и из 2.3.x для одного скетча совпадает по размеру и содержанию, светодиод мигает одинаково, библиотеки читаются одни и те же. Среда — это окно вокруг сборки, а не сама сборка. Вся разница, о которой пойдёт речь, сидит в редакторе, панелях и мелких привычках — но именно на них уходит вечер.
План разбора: навигация и автодополнение, поведение монитора порта при заливке, отладчик с честной оговоркой про Uno, цена обновления в мегабайтах памяти — и абзац о том, где линейка 1.8 до сих пор выглядит выигрышно, потому что такие места существуют. Скажу заранее: победителя определяют не релизы, а железо и привычки, поэтому финального «переезжайте все» здесь не будет.
Редактор: F12 вместо Ctrl+F
Главная ежедневная разница — среда 2.x понимает код, а не только цвета. Автодополнение подсказывает имена функций и переменных прямо в наборе: набираю readSoil — вижу readSoilAvg с его параметрами. Если над функцией висит doc-комментарий, среда показывает и его: границы параметров, которые вы записали полгода назад, всплывают в момент набора. Без собственных функций в скетче показывать нечего — но с ними подсказка превращается в память, вынесенную из головы. Подсказка с границами — та деталь, из-за которой я перестал держать пороги в уме: среда напоминает раньше, чем я успеваю ошибиться.
Вторая привычка, которая въедается за неделю: F12 или Ctrl+клик по имени переносят курсор к определению функции. В скетче на три вкладки это минута прокрутки, которую я больше не трачу, а вместе с ней уходят и поиски «где же я объявил этот порог» через Ctrl+F по всем совпадениям подряд. Половина сокращений при этом работает в обеих линейках одинаково, и переезд не перепрошивает руки: Ctrl+T, Ctrl+S, Ctrl+F продолжают делать то же, что и вчера.
Отдельный сюжет — плоттер. В 1.8 он открывался отдельным окном с настройками на один экран, во второй среде живёт вкладкой внутри панели монитора и понимает несколько серий сразу: мой старый скетч, печатавший температуру и уставку через пробел, заработал без правок. Рисуют обе версии одно и то же — разница в удобстве окна, а не в возможностях. Подписи серий, масштаб и скорость разбора данных разобраны в уроке про плоттер и серии — переезд на 2.x его не ломает.
Монитор порта из отдельного окна переехал в панель внизу редактора, скорость выбирается списком справа на его панели. Поведение при заливке — самая тихая, но самая частая радость: во второй среде монитор закрывается сам на время прошивки и открывается обратно после, в 1.8 его закрываешь руками, а забыв — получаешь жалобу на занятый порт. Бонус второй среды: у строк панели есть отметки времени — на вопрос «сколько прошло между двумя событиями» уходит один взгляд вместо секундомера рядом. Детали панели разобраны в уроке про монитор порта в IDE 2, а механику «кто держит порт» я раскладываю в уроке про два окна и несколько плат.
Отладчик — фича, из-за которой чаще всего переезжают, и здесь нужна честная оговорка. Точки останова и просмотр переменных в 2.x работают только там, где железо умеет останавливать ядро: на платах с аппаратной отладкой или через внешний зонд. На классической Uno с ATmega328P брейкпоинт молча не сработает — не потому что вы что-то не включили. Куда он заводится и что для этого нужно — в уроке про отладчик и точки останова; на Uno по-прежнему честнее Serial.print, и это не позор, а рабочий метод.
Теперь цена. Вторая среда собрана на Electron — это по сути браузерный движок в обёртке, и память она ест соответственно: несколько сотен мегабайт на пустом окне, больше с открытым монитором и автодополнением. На машине с 8 ГБ это незаметно, на ноутбуке с 4 ГБ и открытым браузером — вполне. Моё правило с условием: меньше 8 ГБ оперативы — линейка 1.8 на этом железе живее и честнее; 8 ГБ и выше — вторая среда окупается в первый же многофайловый проект. Внешний вид при этом настраивается в обеих, но во второй — шире: тёмная тема, шрифты и масштабы собраны в уроке про темы и шрифты.
Ритуалы при этом переезжают целиком: Ctrl+T форматирует в обеих линейках, константы заглавными и честные имена работают без правок. Список настроек почти тот же, просто живёт в другом меню, и первые полчаса рука тянется не туда — это проходит. Скетчбук общий: Документы\Arduino видят оба редактора, скетчи и библиотеки не переезжают — включил 1.8, включил 2.x, проект один и тот же, экспортированные бинарники остаются при своих папках.
// V 2.x: stoyte imenem readSoilAvg i nazhmite F12 - sreda pokazhet// opredelenie i vash doc-komment. V 1.8 to zhe - cherez Ctrl+F.const int PIN_SOIL = A0;const int DRY_LIMIT = 400; // Citaet vlazhnost: srednee iz nZamerov chtenij s pauzoj 5 ms.// Vozvrawaet 0..1023; menshe DRY_LIMIT - suho.int readSoilAvg(int nZamerov) { int sum = 0; for (int i = 0; i < nZamerov; i++) { sum += analogRead(PIN_SOIL); delay(5); } return sum / nZamerov;} // Gremit i morgaet: suho - tri korotkih, norma - odno dlinnoe.void signalSoil(int value) { int times = (value < DRY_LIMIT) ? 3 : 1; for (int i = 0; i < times; i++) { digitalWrite(12, HIGH); delay(120); digitalWrite(12, LOW); delay(180); }} void setup() { Serial.begin(9600); pinMode(12, OUTPUT);} void loop() { int v = readSoilAvg(4); Serial.println(v); signalSoil(v); delay(2000);}| Ежедневное действие | 1.8.19 | 2.x |
|---|---|---|
| перейти к функции | Ctrl+F и листать совпадения | F12 или Ctrl+клик по имени |
| подсказка имён при наборе | нет | есть, показывает и ваши doc-подписи |
| монитор при заливке | закрывать руками, иначе порт занят | закрывается сам и возвращается |
| выбор платы во втором окне | общий: сменил в одном — сменилось в другом | у каждого окна своя пара плата и порт |
Что переезжает, а что нет
Переезжает всё, что лежит в скетчбуке: скетчи, библиотеки, вкладки, экспортированные бинарники — оба редактора смотрят в одну папку Документов\Arduino. Не переезжают привычки к скорости интерфейса: линейка 1.8 на старом железе рисует окно быстрее, и это не суеверие — ей не нужен браузерный движок. Хозяйство ядер при этом разделяется только у переносной 1.8 с portable.txt: обычная установка 1.8 и 2.x живут в системе рядом, не конфликтуя и не засоряя списки плат друг у друга.
На многофайловых проектах разница заметнее всего: скетч на пять вкладок с парой своих заголовков во второй среде навигируется F12 и поиском по всем файлам, в старой — прокруткой и Ctrl+F по вкладкам подряд. Мой поливальник на четырёх файлах в 1.8 требовал держать карту проекта в голове, в 2.x карта стала ненужной: среда помнит имена за меня. Именно после этого проекта я перестал считать автодополнение игрушкой для новичков.
Скорость самой компиляции от редактора не зависит: тот же avr-gcc, тот же кэш сборки, те же секунды и минуты. Если в новой среде что-то собралось «дольше», почти всегда это холодный кэш после установки, а не рекорды старой версии — про кэш и его причуды будет отдельный урок ниже.
Мой вердикт после полутора лет на двух средах: вторая линейка выигрывает не списком фич, а тем, что держит в голове меньше имён — подсказки и F12 снимают часть памяти на себя. Линейка 1.8 осталась у меня на одном ноутбуке 2013 года с 4 ГБ, и он за это не извиняется: там Blink мигает из неё так же ровно, как из 2.3.x на рабочей машине. Всё остальное оборудование давно переехало, и возврата я не планирую.
- 1. Что делает F12 в среде 2.x?
- 2. Сработает ли точка останова на классической Uno?
- 3. Что общего у 1.8.19 и 2.x при сборке одного скетча?
- 4. Монитор порта в 2.x при нажатии Upload что делает?
- 5. Ноутбук с 4 ГБ оперативы и открытым браузером. Что выбрать?
- Линейка 1.8 закончилась на 1.8.19 и объявлена legacy; вторая среда живёт в версиях 2.3.x.
- Под обоими окнами один компилятор avr-gcc: бинарник и поведение платы на плате совпадают.
- F12, автодополнение с вашими doc-подписями и самозакрывающийся монитор — ежедневная выгода 2.x.
- Точка останова на Uno не работает: нужна аппаратная поддержка отладки, Serial.print остаётся честным методом.
- Меньше 8 ГБ оперативы — 1.8 отзывчивее; скетчбук общий, переезд туда и обратно бесплатный.
Частые вопросы по теме урока
- Что делает F12 в среде 2.x?
- F12 и Ctrl+клик — переход к определению. Форматирует Ctrl+T, монитор — своя панель, сборка без заливки — кнопка Verify. переносит курсор к определению функции под курсором
- Сработает ли точка останова на классической Uno?
- Отладчику нужен debug-контроллер или внешний зонд. На Uno и Nano брейкпоинты молча не работают. нет — ATmega328P не умеет останавливаться без аппаратной поддержки
- Что общего у 1.8.19 и 2.x при сборке одного скетча?
- Под окнами работает одна сборочная цепочка: размер и содержимое бинарника совпадают. Разница — в окне вокруг. тот же компилятор avr-gcc и тот же бинарник на выходе
- Монитор порта в 2.x при нажатии Upload что делает?
- В 1.8 монитор закрывают руками, иначе порт занят. В 2.x панель закрывается на время прошивки и открывается обратно. закрывается сам и возвращается после заливки
- Ноутбук с 4 ГБ оперативы и открытым браузером. Что выбрать?
- Electron-редактор ест сотни мегабайт. Меньше 8 ГБ — линейка 1.8 живее; правило с условием, не догма. линейку 1.8 — на этом железе она отзывчивее