Симулятор ESP32 онлайн: WiFi и GPIO без платы
ESP32 я собирался купить три месяца, пока копил на «нормальную» плату с WiFi. Секрет, который мне никто не сказал заранее: для первых недель ESP32 плата не нужна вообще. Сетевая логика — подключение, статус, ожидание, печать IP — это код, и код исполняется в браузере. Я прогнал первые шесть сетевых скетчей в симуляторе, а когда DevKit V1 всё-таки приехал за 600 рублей, осталось только поменять SSID на настоящий и воткнуть кабель. Разница оказалась в двух местах: реальная сеть падает, а эмуляция нет, и на живой плате Serial начинает печатать только после перезаливки скетча.
Ниже — скетчи, которые можно запустить в симуляторе прямо сейчас (мигалка на GPIO2 и WiFi-подключение с эмулируемой сетью), карта GPIO DevKit V1 с красными флажками, таблица того, что эмулируется честно, а что остаётся территорией железа. Распиновка платы построчно с опасными пинами разобрана в шпаргалке по ESP32 — здесь я про код и симуляцию.
DevKit V1 за 600 рублей: что это за плата
ESP32 DevKit V1 — самая ходовая обвязка чипа ESP32-WROOM-32: два ядра Xtensa LX6 на 240 МГц, 520 КБ SRAM, 4 МБ флеш, WiFi 2.4 ГГц и Bluetooth в одной детали за цену двух кофе. На плате 25 выведенных GPIO, кнопки EN и BOOT, конвертер CP2102 (на клонах — CH340) и мост USB-UART, который требует драйвера так же, как на Nano. Логика 3.3 В — это главный отличительный факт против Uno и Nano: подали 5 В на обычный GPIO, и выход умирает без вопросов и возврата денег.
| Параметр | ESP32 DevKit V1 | Arduino Uno |
|---|---|---|
| Чип | ESP32-WROOM-32, 2 ядра, 240 МГц | ATmega328P, 1 ядро, 16 МГц |
| SRAM | 520 КБ | 2 КБ |
| Флеш | 4 МБ | 32 КБ |
| Радио | WiFi b/g/n + Bluetooth | Нет |
| Логика | 3.3 В — 5 В на пины убивает порт | 5 В |
| АЦП | 12 бит, значения 0-4095 | 10 бит, значения 0-1023 |
| Цена клона | 500-700 руб. | 700-1200 руб. |
Первый скетч: мигалка на GPIO2 в симуляторе
У DevKit V1 встроенный светодиод сидит на GPIO2 — и это первый сюрприз для тех, кто пришёл с Arduino: в скетчах с Uno пишут 13 по привычке, а на ESP32 пин 13 — обычный GPIO, и ничего не мигает. Ниже мигалка на GPIO2: вставьте в симулятор, нажмите «Запустить» — код для браузера и для настоящей платы один и тот же:
// Встроенный светодиод DevKit V1 сидит на GPIO2 (не 13!).// В симуляторе светодиод соберётся сам по pinMode+digitalWrite.int led = 2; void setup() { pinMode(led, OUTPUT); Serial.begin(115200); Serial.println("ESP32 стартовал");} void loop() { digitalWrite(led, HIGH); Serial.println("GPIO2 = HIGH"); delay(400); digitalWrite(led, LOW); Serial.println("GPIO2 = LOW"); delay(400);}Скорость Serial на ESP32 — 115200 бод по привычке всего сообщества: 9600 тоже заработает, но каждый туториал и каждый лог в интернете шлёт на 115200, и новичок, поставивший 9600, читает кракозябры и винит плату.
WiFi-скетч: как эмулируется сеть в браузере
Сетевой код — то, ради чего ESP32 и берут, и именно его я советую прогонять в симуляторе до покупки платы. Сеть в браузере эмулируется: WiFi.begin() подключает плату за одну-две секунды, localIP() возвращает фиксированный адрес, статус-машина работает как на железе. Логика ожидания, таймауты и переподключение отрабатываются полностью — это и есть то, чему сетевой скетч учит.
// В симуляторе сеть эмулируется: WiFi.begin() «подключает» за 1-2 секунды.// На реальной плате код тот же, сверху добавьте #include <WiFi.h>.String ssid = "MoyaSetka";String password = "parol12345";bool led = false; void setup() { Serial.begin(115200); pinMode(2, OUTPUT); Serial.print("Подключаюсь к "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); led = !led; // светодиод дёргается, пока нет связи digitalWrite(2, led); } Serial.println(); Serial.println("WiFi подключён!"); digitalWrite(2, HIGH); Serial.print("IP-адрес: "); Serial.println(WiFi.localIP());} void loop() { delay(1000); // сеть уже настроена в setup()}Карта GPIO DevKit V1: что можно, что нельзя, что убьёт порт
- безопасная рабочая лошадка: GPIO4, GPIO5, GPIO12-GPIO19, GPIO21-GPIO23, GPIO25-GPIO27 — обычные входы/выходы
- только входы: GPIO34, GPIO35, GPIO36, GPIO39 — выход на них физически не подключён, digitalWrite бесполезен
- страпповые: GPIO0, GPIO2, GPIO5, GPIO12, GPIO15 — их уровень при подаче питания выбирает режим загрузки; прижимать реле или кнопку с притяжкой к земле туда не стоит
- I2C по умолчанию: GPIO21 (SDA) и GPIO22 (SCL) — датчики с шиной вешаются сюда
- АЦП1 (GPIO32-GPIO39) живёт при включённом WiFi; АЦП2 (GPIO0, 2, 4, 12-15, 25-27) замирает при активном WiFi — аналоговые датчики вешайте на первую группу
Полная карта платы с картинкой и списком «красных флажков» — в распиновке ESP32; какие GPIO жалить опаснее прочих, разобрано в уроке про распиновку и опасные пины. По проводнику распиновки в симуляторе можно кликать по пинам и читать подсказки — удобнее, чем держать таблицу открытым окном.
30 пинов DevKit: strap-ловушки, ADC при WiFi, подтяжки и питание — по клику на вывод.
Подгружаем интерактив…
Честная таблица: что эмулируется, а что нет
| Возможность | В симуляторе | На реальной плате |
|---|---|---|
| GPIO и digitalWrite/Read | Честно, та же логика | Честно, плюс дребезг и наводки |
| WiFi-подключение | Эмуляция: статус-машина и IP за 1-2 с | 2-6 с, зависит от роутера, бывают отказы |
| HTTP-запросы и веб-сервер | Эмуляция ответов и кодов | Настоящие таймауты, 404 и SSL-ошибки |
| АЦП 12 бит | Слайдер 0-4095 | Шум, нелинейность, ADC2 молчит при WiFi |
| Драйвер CP2102/CH340, порты | Не касается: портов в браузере нет | Ставится драйвер, как у Nano с CH340 |
| Deep sleep и энергопрофиль | Логика кода исполняется | Микроамперы и пробуждение — только железо |
Мой расклад после полугода с платой: сетевую логику и меню я довожу в браузере, а энергетику, антенны и ADC-шум проверяю только на железе. Так первый вечер с ESP32 уходит на эксперименты, а не на чтение стектрейсов.
Как перенести скетч из симулятора на настоящую плату
- шаг 1: установите Arduino IDE и пакет плат ESP32 через Boards Manager — пошагово в уроке про установку пакета ESP32
- шаг 2: в Tools → Board выберите DOIT ESP32 DEVKIT V1, в Port — появившийся COM-порт (без драйвера CP2102 его не будет)
- шаг 3: верните в скетч #include <WiFi.h> и настоящий SSID с паролем — в симуляторе include не нужен, на плате обязателен
- шаг 4: скорость монитора — 115200 бод, иначе чтение лога превратится в расшифровку кракозябр
- шаг 5: если заливка стоит на «Connecting…», удержите кнопку BOOT на плате: у некоторых клонов вход в загрузчик требует ручного нажатия
Куда двигаться после подключения к сети: включить светодиод из браузера в уроке про веб-сервер со светодиодом, поднять собственную точку доступа по уроку про SoftAP и собрать первый IoT-проект по уроку с датчиком и облаком. Выбор между ESP32 и ESP8266, если дочитали до покупки, — в сравнительной шпаргалке.