Что такое 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, но разрабатывать намного проще.
Проверьте себя
1. Что такое MicroPython?
AОтдельный новый язык, не похожий на Python
BКомпактная реализация Python 3 для микроконтроллеров
CГрафический редактор схем
DВерсия Python для суперкомпьютеров
2. Почему в MicroPython нет numpy и requests?
AИх забыли добавить
BОни платные
CЭти библиотеки слишком тяжёлые и не помещаются в память чипа
DОни написаны не на Python
3. Какой модуль MicroPython даёт доступ к ножкам и таймерам чипа?
Amachine
Bpandas
Cos.path
Dtkinter