MicroPython — это программная реализация языка программирования , в значительной степени совместимого с Python 3, написанная на языке C , оптимизированная для работы на микроконтроллере . [2] [3]
MicroPython состоит из компилятора Python в байт-код и интерпретатора времени выполнения этого байт-кода. Пользователю предоставляется интерактивное приглашение ( REPL ) для немедленного выполнения поддерживаемых команд. Включен выбор основных библиотек Python; MicroPython включает модули, которые предоставляют программисту доступ к низкоуровневому оборудованию. [4]
В MicroPython есть встроенный ассемблер , который позволяет коду работать на полной скорости, но он непереносим между разными микроконтроллерами.
Исходный код проекта доступен на GitHub по лицензии MIT . [5]
MicroPython изначально был создан австралийским программистом Дэмиеном Джорджем после успешной кампании, поддержанной Kickstarter в 2013 году. [6] Первоначальная кампания Kickstarter выпустила MicroPython с платой разработки "pyboard" на базе STM32F4 . В то же время MicroPython был разработан для поддержки ряда архитектур на базе ARM . [7] Порты, поддерживаемые в основной линии, включают ARM Cortex-M (многие платы STM32 [8] , платы RP2040 , платы TI CC3200/WiPy, платы Teensy, серии Nordic nRF, SAMD21 и SAMD51), ESP8266 , ESP32 , [9] 16-битный PIC, Unix, Windows, Zephyr и JavaScript. [10] Кроме того, существует множество ответвлений для различных систем и аппаратных платформ, не поддерживаемых в основной линии. [11]
В 2016 году была создана версия MicroPython для BBC Micro Bit в рамках вклада Python Software Foundation в партнерство Micro Bit с BBC. [12]
В июле 2017 года MicroPython был форкнут для создания CircuitPython , версии MicroPython с упором на образование и простоту использования. MicroPython и CircuitPython поддерживают несколько разные наборы оборудования (например, CircuitPython поддерживает платы Atmel SAM D21 и D51, но отказался от поддержки ESP8266). Начиная с версии 4.0, CircuitPython основан на MicroPython версии 1.9.4. [13]
В 2017 году Microsemi сделала порт MicroPython для архитектуры RISC-V (RV32 и RV64). [14]
В апреле 2019 года была создана версия MicroPython для Lego Mindstorms EV3 . [15]
В январе 2021 года был создан порт MicroPython для RP2040 (ARM Cortex-M0+, на Raspberry Pi Pico и других). [16]
MicroPython имеет возможность запускать Python, позволяя пользователям создавать простые и понятные программы. [17] MicroPython поддерживает множество стандартных библиотек Python, поддерживая более 80% функций наиболее используемых библиотек Python. [17] MicroPython был разработан специально для поддержки типичного разрыва в производительности между микроконтроллерами и Python. [18] Код Python может напрямую обращаться к оборудованию и взаимодействовать с ним, с расширенными возможностями оборудования, которые недоступны при использовании обычного приложения Python, работающего в операционной системе . [19]
Использование MicroPython технологии слоя аппаратной абстракции (HAL) позволяет переносить разработанный код между различными микроконтроллерами в пределах одного семейства или платформы и на устройства, которые поддерживают и могут загружать MicroPython. Программы часто разрабатываются и тестируются на высокопроизводительных микроконтроллерах и распространяются с использованием конечного приложения на микроконтроллерах с более низкой производительностью. [20]
MicroPython предлагает функционал, после написания нового кода, для создания замороженного модуля и использования его в качестве библиотеки, которая может быть частью разработанной прошивки . Эта функция помогает избежать повторной загрузки одного и того же, уже безошибочного, протестированного кода в среду MicroPython. Этот тип модуля будет сохранен в каталоге модулей микроконтроллера для компиляции и загрузки в микроконтроллер, где библиотека будет доступна с помощью команды импорта Python для многократного использования. [20]
Цикл чтения-вычисления-печати (REPL) позволяет разработчику вводить отдельные строки кода и немедленно запускать их на терминале . [21] В системах на базе Linux и macOS есть эмуляторы терминала , которые можно использовать для создания прямого подключения к REPL устройства MicroPython с помощью последовательного USB- подключения. REPL помогает в немедленном тестировании частей приложения , поскольку каждая часть кода может быть запущена, а результаты визуально проверены. После загрузки различных частей кода в REPL можно использовать дополнительные функции REPL для экспериментов с функциональностью этого кода. [17]
Полезные команды REPL (после подключения к последовательной консоли): [21]
help()
: сообщение справкиhelp("modules")
: список встроенных модулейimport board
↵ Enterdir(board)
: перечисляет все контакты на плате микроконтроллера, которые доступны для использования в коде программыХотя MicroPython полностью реализует версию языка Python 3.4 и большую часть 3.5, он не реализует все языковые возможности, введенные с 3.5 и далее, [22] хотя некоторые новые синтаксисы из 3.6 и более поздние возможности из более поздних версий, например из 3.8 (выражения присваивания) и 3.9. Он включает подмножество стандартной библиотеки. [23]
MicroPython имеет более ограниченную аппаратную поддержку на рынке микроконтроллеров, чем другие популярные платформы, такие как Arduino с меньшим количеством вариантов микроконтроллеров, поддерживающих язык. [18] MicroPython не включает интегрированную среду разработки (IDE) или специальный редактор, в отличие от других платформ. [18]
Синтаксис MicroPython заимствован из Python из-за его ясного и легкого для понимания стиля и мощности. [24] В отличие от большинства других языков программирования, используется меньше знаков препинания и меньше синтаксических манипуляций, чтобы отдать приоритет читабельности. [17]
MicroPython перенимает стиль блока кода Python, при этом код, относящийся к определенной функции , условию или циклу, имеет отступ. [17] Это отличается от большинства других языков, которые обычно используют символы или ключевые слова для разграничения блоков. [17] Это способствует читабельности кода MicroPython, поскольку визуальная структура отражает семантическую структуру. Эта ключевая функция проста, но важна, поскольку неправильное использование отступов может привести к выполнению кода при неправильном условии или к общей ошибке интерпретатора . [ 17]
Двоеточие (:) — это ключевой символ, используемый для обозначения окончания условного оператора. [17] Размер отступа эквивалентен одной табуляции или 4 пробелам.
MicroPython имеет возможность выполнять различные математические операции, используя примитивные и логические операции. [19]
MicroPython — это компактная и эффективная реализация Python с библиотеками, похожими на библиотеки Python. [25] Некоторые стандартные библиотеки Python имеют эквивалентную библиотеку в MicroPython, переименованную для различения этих двух библиотек. Библиотеки MicroPython меньше, в них удалены или изменены менее популярные функции для экономии памяти . [19]
Три типа библиотек в MicroPython: [19]
MicroPython очень настраиваемый и конфигурируемый, язык отличается для каждой платы ( микроконтроллера ), а доступность библиотек может отличаться. Некоторые функции и классы в модуле или во всем модуле могут быть недоступны или изменены. [19]
Когда разработчики начинают создавать новое приложение, стандартные библиотеки и драйверы MicroPython могут не соответствовать требованиям, с недостаточным количеством операций или вычислений. Подобно Python, существует возможность расширения функциональности MicroPython с помощью пользовательских библиотек, которые расширяют возможности существующих библиотек и встроенного ПО. [20]
В MicroPython файлы, заканчивающиеся на .py, имеют приоритет перед другими псевдонимами библиотек, что позволяет пользователям расширять использование и реализацию существующих библиотек. [19]
По мере того, как реализация и популярность MicroPython продолжают расти, все больше плат имеют возможность запускать MicroPython. Многие разработчики создают версии для конкретных процессоров, которые можно загружать на различные микроконтроллеры. [19] Установка MicroPython на микроконтроллеры хорошо документирована и удобна для пользователя. [20] MicroPython позволяет упростить взаимодействие между оборудованием микроконтроллера и приложениями, предоставляя доступ к ряду функций при работе в среде с ограниченными ресурсами, с высоким уровнем реагирования. [17]
Для запуска MicroPython используются два типа плат: [19]
Чтобы переместить программу на плату MicroPython, создайте файл и скопируйте его на микроконтроллер для выполнения. При подключении оборудования к устройству, например, к компьютеру , флэш-накопитель платы появится на устройстве, позволяя перемещать файлы на флэш-накопитель. Будет два существующих файла python, boot.py и main.py, которые обычно не изменяются, main.py можно изменить, если вы хотите запускать программу каждый раз при загрузке микроконтроллера , в противном случае программы будут запускаться с помощью консоли REPL. [19]
Pyboard — это официальная плата микроконтроллера MicroPython, которая полностью поддерживает программные функции MicroPython. Аппаратные функции pyboard включают: [4]
Pyboard содержит внутренний диск (файловую систему) с именем /flash, который хранится во флэш-памяти платы, кроме того, карта microSD может быть вставлена в слот и доступна через /sd. При загрузке pyboard должен выбрать файловую систему для загрузки из /flash или /sd с текущим каталогом, установленным на /flash или /sd. По умолчанию, если вставлена карта SD, будет использоваться /sd, если нет, используется /flash. При необходимости можно избежать использования карты SD для процесса загрузки, создав пустой файл с именем /flash/SKIPSD, который останется на плате и будет существовать при загрузке pyboard и пропустит карту SD для процесса загрузки. [4]
При обычном включении питания pyboard или нажатии кнопки сброса pyboard загружается в стандартном режиме, то есть выполняется файл boot.py, затем настраивается USB и, наконец, запускается программа python. [4]
Существует возможность переопределить стандартную последовательность загрузки, удерживая пользовательский переключатель, пока плата находится в процессе загрузки, а затем нажимая сброс, продолжая удерживать пользовательский переключатель. Светодиоды pyboard будут мигать между режимами, и как только светодиоды достигнут желаемого пользователем режима, он может отпустить пользовательский переключатель, и плата загрузится в определенном режиме. [4]
режимы загрузки: [4]
# печать на последовательной консолипечать ( 'Привет, мир!' )
Импорт + включение светодиода:
импорт pyb# включить светодиодpyb . LED ( 1 ) . on ()
Чтение файла + цикл:
импортировать ос# открыть и прочитать файлс открытым ( '/readme.txt' ) как f :печать ( ф . чтение ())
MicroPython включает кросс-компилятор , который генерирует байт-код MicroPython (расширение файла .mpy ). Код Python может быть скомпилирован в байт-код либо непосредственно на микроконтроллере, либо может быть предварительно скомпилирован в другом месте.
Прошивку MicroPython можно собрать без компилятора, оставив только виртуальную машину , которая может запускать предварительно скомпилированные программы mpy .
MicroPython используется посредством прошивки, загружаемой стандартным программным обеспечением в определенный микроконтроллер во флэш-память, взаимодействуя с помощью терминального приложения, загруженного на компьютер, которое эмулирует последовательный интерфейс. [20]
Основные области применения MicroPython можно разделить на три категории: [20]
Реализация MicroPython может различаться в зависимости от доступности стандартных и поддерживающих библиотек, а также размера флэш-памяти и оперативной памяти микроконтроллера. [20]