MicroPython симулятор онлайн: проверка кода для ESP32 и Pico
MicroPython — Python для микроконтроллеров: тот же синтаксис, что в большом Python, но в 100 КБ флеша и с библиотеками для GPIO. На нём пишут для ESP32 и Raspberry Pi Pico, когда C++ пугает: нет компиляции, REPL в терминале, быстрый цикл правка-запуск.
У нас самоучитель по Arduino C++, но в симуляторе теперь есть и режим MicroPython: кнопка над редактором переключает язык, и machine.Pin с time.sleep исполняются на том же стенде — разбор режима в лендинге MicroPython-симулятора. Этот лендинг — обзор внешних инструментов для MicroPython. Ниже — таблица сред, пробный код MicroPython, граница «браузер против платы» и грабли перехода с Arduino C++.
Зачем MicroPython для Arduino-разработчика
MicroPython на ESP32 запускается за минуту: прошивка .bin через esptool, REPL в терминале по USB, и вы пишете `from machine import Pin; Pin(2, Pin.OUT).value(1)` — светодиод горит. Сравните с C++: #include, setup, loop, компиляция, заливка — тот же эффект занимает 30 строк. Цена — память: MicroPython занимает 1 МБ флеша и 50 КБ SRAM, а C++ скетч под мигалку влезает в 1 КБ. Для прототипа — Python, для продукта — C++.
- REPL в терминале: правка кода без перезагрузки, мгновенный отклик — главная прелесть MicroPython.
- Библиотека machine: Pin, PWM, ADC, I2C, SPI, UART — то же API, что в Arduino, в Python-обёртке.
- Прошивка .bin: 1 МБ firmware + ваши .py файлы на файловой системе платы — без компиляции под каждую правку.
- Таймеры и асинхронность: uasyncio для нескольких задач — короче, чем FreeRTOS на C++.
- Цена: ESP32 с 4 МБ флеша удерживает MicroPython + пару скриптов; на ESP8266 с 1 МБ тесно.
Пробный код MicroPython
from machine import Pinimport time led = Pin(2, Pin.OUT) while True: led.value(1) time.sleep(0.5) led.value(0) time.sleep(0.5)Тот же скетч на Arduino C++ в нашем симуляторе: `void setup() { pinMode(2, OUTPUT); } void loop() { digitalWrite(2, HIGH); delay(500); digitalWrite(2, LOW); delay(500); }`. Разница в длине — Python короче. Разница в исполнении — наш симулятор исполняет C++ в браузере, а в режиме MicroPython (кнопка над редактором) — и Python-мигалку тоже.
Где проверять MicroPython в браузере
| Среда | Что поддержано | Без платы |
|---|---|---|
| Wokwi (XIAO/PI Pico) | MicroPython + визуальная схема | да — онлайн-эмулятор платы |
| MicroPython-unicorn | API machine, REPL в браузере | да — без железа |
| Pyboard.js | базовый Python + uasyncio | частично — без peripheral |
| Raspberry Pi Pico Online | Pico-симулятор с примерами | да — встроенные демо |
| Thonny + физическая плата | REPL + отладка | нет — нужна плата |
Внешние онлайн-симуляторы закрывают базовый GPIO и I2C; реальные датчики (DHT, DS18B20, MPU6050) и WiFi-стек в них либо заглушки, либо отсутствуют. На живой плате всё работает как ожидается. Проверяйте логику в браузере (например, в Wokwi — он поддерживает Raspberry Pi Pico и MicroPython), а окончательную интеграцию — на ESP32 или Pico с USB-кабелем. Ссылки на наши материалы по выбору платы — в блоке ниже.
Честная граница: модель против живой платы
| Проверка | Онлайн-симулятор | Только железо |
|---|---|---|
| GPIO: Pin, value, toggle | да: в Wokwi, Pyboard.js | то же, плюс реальные токи |
| PWM и ADC | да: в Wokwi | то же, плюс шум и просадки |
| I2C, SPI, UART | частично: Wokwi поддерживает LCD, BME280 | да — реальные датчики |
| WiFi и сетевые запросы | нет: нет эмуляции сети | да — через network.WLAN |
| Прошивка платы .bin | не эмулируется | да — через esptool, mpremote |
| REPL через USB | частично: в браузере | да — через терминал по USB |
Онлайн-среды покрывают базовый GPIO и часть периферии — I2C-датчики в Wokwi работают. WiFi и сетевые запросы в браузере не эмулируются — это разъём с живой платой. Сравните с нашим Arduino-симулятором, где WiFi, MQTT и HTTP-запросы поддержаны через фейковый стек движка — у нас своя архитектура под C++, и она закрывает сетевые сценарии без железа.
Грабли перехода с Arduino C++ на MicroPython
- setup() и loop() нет: в Python вы сами пишете while True или используете uasyncio. Привычка из Arduino ломается.
- Типы не задаёшь: x = 0 — это int, а не «int x = 0;». На ESP32 Python сам решает, во что превратить.
- Библиотеки Adafruit/Arduino не работают: нужны аналоги из micropython-lib или свой код. DHT-датчик — другой класс, не DHT.h.
- Прошивка .bin под каждый чип: ESP32, ESP8266, RP2040 — три разные прошивки. Скетч Arduino C++ компилируется под все три с минимальными правками.
- REPL зависает при ошибке: в отличие от C++ с его «ошибка компиляции», Python падает с traceback в терминале, и плата ждёт перезагрузки.