Симулятор Arduino Nano онлайн: скетчи в браузере без платы
Nano я купил раньше, чем разобрался в портах: плата приехала с AliExpress за 350 рублей, IDE её не видела, и я три вечера подозревал брак. Виноват оказался не брак, а CH340 — сторонний USB-конвертер, которого нет в драйверах Windows. Пока шёл разбор, весь код гонялся в браузере: мигалка, кнопка, потенциометр — всё то же, что на настоящей плате, только без проводов и риска спалить пин. Симулятор не заменит макетку, но закрывает первые две недели знакомства с Nano: пока плата едет, скетчи уже написаны и проверены.
Ниже — чем Nano V3 отличается от Uno (короткий ответ: почти ничем, кроме формата и USB-чипа), какие пины где искать, скетчи, которые можно вставить в симулятор прямо сейчас, и честный список того, что в браузере не покажешь. Устройство самой платы с полной распиновкой разобрано в отдельной шпаргалке по Nano — здесь же я держу фокус на симуляции.
Nano V3 в двух словах: та же Uno, но в колодке для макетки
Arduino Nano V3 держит тот же чип ATmega328P на 16 МГц, что и Uno: 32 КБ флеша, 2 КБ SRAM, 14 цифровых пинов и 8 аналоговых входов. Логика 5-вольтовая, скетчи от Uno компилируются без единой правки. Разница в упаковке: вместо крупных колодок — шаг 2,54 мм под прямую втыкалку в макетку, mini-USB (или micro-USB на клонах) вместо type-B и CH340 вместо ATmega16U2 на борту. Из-за CH340 и рождаются 90% вопросов «почему плата не видна в портах» — лечение занимает две минуты и описано ниже.
| Параметр | Nano V3 (клон) | Uno R3 |
|---|---|---|
| Чип | ATmega328P, 16 МГц | ATmega328P, 16 МГц |
| Флеш / SRAM / EEPROM | 32 / 2 / 1 КБ | 32 / 2 / 1 КБ |
| Цифровые / аналоговые пины | 14 + 8 (A0–A7) | 14 + 6 (A0–A5) |
| USB-конвертер | CH340 (нужен драйвер) | ATmega16U2 (работает из коробки) |
| Разъём USB | mini-USB или micro-USB | USB type-B |
| Формат | DIP-колодка, втыкается в макетку | Шилд-формат, макетка сбоку |
| Цена клона | 350-500 руб. | 700-1200 руб. |
Вывод из таблицы прост: для учёбы и макетирования Nano выигрывает по цене и посадке в макетку, Uno — по живучести у новичка. Китайский Nano с завязанными глазами воткнуть в 5V вместо GND я успевал дважды; Uno прощает такое чаще, а Nano обычно умирает молча. Ещё нюанс: на Nano есть два пина, которых у Uno нет физически — A6 и A7. Они работают только как входы analogRead(A6), digitalWrite на них не заведётся никогда, и это первая ловушка при переносе скетчей туда-обратно.
Скетч для проверки: мигалка на встроенном светодиоде
Первый скетч я гоняю везде одинаково — мигалка на пине 13, где у Nano сидит встроенный светодиод L. Он отвечает сразу на три вопроса: код компилируется, пин живой, порт дышит. Вставьте его в симулятор и нажмите «Запустить» — та же мигалка исполняется в браузере без платы:
// Встроенный светодиод Nano сидит на D13.// В симуляторе peripheral соберётся сам: digitalWrite -> светодиод.int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); Serial.println("Nano жив, начинаю мигать");} void loop() { digitalWrite(ledPin, HIGH); Serial.println("свет"); delay(500); digitalWrite(ledPin, LOW); Serial.println("тьма"); delay(500);}Монитор порта в симуляторе печатает те же строки, что и на настоящей плате. Если на реальном Nano текст превратился в кракозябры — скетч шлёт на 9600 бод, а монитор открыт на 115200: скорости должны совпадать, и это первый затык, который я лечу за новичком.
Второй скетч: кнопка и потенциометр — вся классика за вечер
После мигалки я даю новичку связку «кнопка + потенциометр»: она покрывает digitalRead, analogRead и map() — три кирпича, из которых собрано полсамоучителя. Кнопка на D2, потенциометр на A0, светодиод на D12: скетч зажигает светодиод по нажатию и печатает яркость потенциометра в монитор.
// Кнопка D2, потенциометр A0, светодиод D12.// В симуляторе кнопка появляется сама, слайдер A0 крутится мышкой.int buttonPin = 2;int potPin = A0;int ledPin = 12; void setup() { pinMode(buttonPin, INPUT_PULLUP); pinMode(ledPin, OUTPUT); Serial.begin(9600);} void loop() { int btn = digitalRead(buttonPin); if (btn == LOW) { // нажата: пин притянут к земле digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } int raw = analogRead(potPin); // 0-1023 int shim = map(raw, 0, 1023, 0, 255); // растягиваем в 0-255 Serial.print("сырое: "); Serial.print(raw); Serial.print(" ШИМ: "); Serial.println(shim); delay(100);}Что симулятор покажет, а что — нет: честный список
- покажет: логику скетча, цифровую и аналоговую логику, Serial-обмен, тайминги millis() и delay() — всё, что живёт в коде
- покажет: подключение WiFi на ESP32 в виде эмуляции — сеть «подключается» за пару секунд, IP выдаётся фейковый
- не покажет: дребезг кнопки, наводки на длинных проводах, просадку питания от серво — физику железа эмулировать бессмысленно
- не покажет: CH340, порты, загрузку скетча по USB — это территория Arduino IDE и настоящего кабеля
- не покажет: пониженные 3.3 В, подтяжки вне кода, глюки конкретных клонов — с этим и идём на макетку
CH340: почему Nano не видна в портах и как лечится
Мой первый Nano упёрся именно сюда: плата в диспетчере устройств висела как «USB2.0-Serial» с жёлтым знаком, а IDE показывала пустой список портов. Диагноз — нет драйвера CH340. Лечение под Windows: скачать драйвер CH341SER с сайта производителя чипа, поставить, переткнуть кабель — в списке появится USB-SERIAL CH340 (COM3 или COM4). Под macOS драйвер обычно уже есть, под Linux CH340 подхватывается ядром сам. Полный разбор с версиями под все системы — в шпаргалке по драйверу CH340.
Второй слой той же беды — старый загрузчик. Клоны Nano V3 с рынка идут с bootloader'ом старого образца: если заливка падает с ошибкой таймаута, выберите в IDE плату Arduino Nano и процессор ATmega328P (Old Bootloader) — скорость заливки сменится с 115200 на 57600 бод, и скетч уходит с первого раза. Приёмы диагностики портов и заливки — в уроке про выбор платы и порта и в уроке про старый загрузчик Nano.
Распиновка Nano: что куда втыкать, когда соберёте схему
- питание: 5V и 3V3 — выходы стабилизаторов, VIN — вход от 7-12 В, GND два рядом для удобства
- цифровые D0-D13: D0/D1 заняты USB-обменом (Serial), D3, D5, D6, D9, D10, D11 умеют ШИМ analogWrite
- аналоговые A0-A5 — обычные analogRead; A6/A7 — только входы, digitalWrite на них мёртв
- D13 — встроенный светодиод L: удобно для первой проверки без макетки
- RESET и GND — пара для перезагрузки кнопкой; ICSP-гребёнка снизу — для прошивки bootloader'а
Полная таблица с картинкой платы и расшифровкой каждого вывода — в распиновке Arduino Nano; соседний Nano Every на чипе ATmega4809 разобран в отдельной шпаргалке, если дойдёте до апгрейда. Сборку первой цепи на макетке по шагам ведёт урок про светодиод на макетке, а привычки цифрового входа закрепляет урок про digitalRead и кнопку.
Соберите цепь по условной схеме: светодиод, резистор, кнопка, земля.
Подгружаем интерактив…