Что такое MicroPython и чем он отличается от обычного Python
Знакомимся с языком, который превращает микроконтроллер в устройство, программируемое на Python.
MicroPython — это компактная реализация языка Python 3, оптимизированная для запуска на микроконтроллерах с килобайтами памяти.
Зачем Python внутри микросхемы
Классический Python (CPython) рассчитан на компьютеры с гигабайтами оперативной памяти и операционной системой. Микроконтроллер — это крошечный чип, у которого нет ни ОС, ни жёсткого диска, а оперативной памяти бывает 100–500 килобайт. MicroPython решает задачу: дать на таком чипе знакомый, читаемый синтаксис Python, чтобы школьник или инженер мог управлять светодиодами, моторами и датчиками, не погружаясь в язык C и регистры процессора.
Идея появилась в 2013 году: австралиец Дэмьен Джордж написал реализацию Python, которая помещается в пару сотен килобайт и работает прямо «на голом железе». Сегодня MicroPython поддерживает десятки плат, и ESP32 — одна из самых популярных.
Что урезано, а что добавлено
MicroPython — это почти Python 3. Работают переменные, циклы, функции, классы, списки, словари, генераторы, исключения, срезы, f-строки. Но есть отличия от «большого» Python.
| Что убрали | Почему |
Большинство стандартных библиотек (нет numpy, requests) | Не помещаются в память |
| Многие методы строк и часть встроенных функций | Экономия флеш-памяти |
| Полноценный сборщик мусора как в CPython | Упрощён под малую RAM |
| Часть синтаксического сахара редко используемых модулей | Чтобы прошивка влезла в чип |
Зато добавлены аппаратные модули, которых нет в обычном Python: machine (доступ к ножкам, таймерам, АЦП), network (Wi-Fi), esp32 (специфика чипа). Именно ради них всё и затевалось.
Урезанные имена модулей
Многие знакомые модули в MicroPython называются с буквой u впереди (от «micro»): utime, ujson, usocket, uos. Часто доступны и привычные имена-алиасы (time, json), но в примерах вы будете встречать оба варианта.
# Так выглядит типичный импорт в MicroPython
import machine # доступ к железу
import network # Wi-Fi
import time # или utime
import ujson as json # или просто jsonКак работает под капотом
Когда вы пишете led.value(1), MicroPython не превращает это в машинный код заранее, как Arduino C. Внутри чипа крутится интерпретатор: он читает ваш .py-файл (точнее, заранее скомпилированный байткод) и выполняет команды по одной. Поэтому MicroPython медленнее «голого» C — но для управления реле, опроса датчиков раз в секунду и отправки данных в сеть скорости хватает с огромным запасом. А выигрыш в простоте разработки колоссальный: меняете строчку и сразу видите результат, без долгой компиляции и прошивки.
Частые ошибки
- Ожидать, что заработает любой Python-код из интернета. Пример с
import pandasна ESP32 не запустится — таких пакетов в прошивке нет. - Путать MicroPython и CircuitPython. Это родственные, но разные проекты; код часто похож, но модули и подходы отличаются.
- Думать, что MicroPython — это «не настоящий Python». Синтаксис тот же; различается только набор библиотек и аппаратная часть.
Итог
- MicroPython — компактная реализация Python 3 для микроконтроллеров.
- Синтаксис почти полностью совпадает с обычным Python.
- Нет тяжёлых библиотек, зато есть аппаратные модули
machine,network,esp32. - Код интерпретируется на лету — медленнее C, но разрабатывать намного проще.