MicroPython:Введение/MicroPython

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


MicroPython[1]

MicroPython – это минимизированная и эффективная реализация языка программирования Python 3, включающая в себя небольшую часть стандартной библиотеки Python и оптимизированная для работы на микроконтроллерах и в ограниченных условиях.

MicroPython PyBoard – это компактная электронная печатная плата, позволяющая запустить MicroPython на «голом железе», что дает вам низкоуровневую ОС на Python, которую можно использовать для управления самых разных электронных проектов.

В MicroPython имеется широкое разнообразие продвинутых функций: интерактивная командная строка, поддержка целых чисел произвольной точности, замыкания, списковое включение, генераторы, обработка исключений и многое другое. Но при этом он достаточно компактен, чтобы уместиться в пределах 256 Кб кодового пространства и 16 Кб памяти RAM.

MicroPython нацелен на максимальную совместимость с обычным Python, чтобы вы могли без труда перенести код с ПК на микроконтроллер или встраиваемую систему.

Полноценный Python с аппаратно-зависимыми модулями

MicroPython – это полноценный компилятор и среда выполнения Python, который можно запустить на «голом железе» (т.е. на устройстве, на котором не установлено никакого ПО). Установив MicroPython, вы сразу же получаете интерактивную командную строку (REPL), с помощью которой можно выполнять различные команды, а также возможность запускать и импортировать скрипты из встроенной файловой системы. REPL оснащена такими функциями как история, заполнение с помощью клавиши  Tab ⇆ , автоматический отступ и режим вставки.

MicroPython пытается быть максимально совместимым с обычным Python (известным как CPython), так что если вы знаете Python, то точно знаете и MicroPython. С другой стороны, чем больше вы узнаете о MicroPython, тем лучше ваш навык в Python.

Вдобавок к реализации нескольких ключевых библиотек Python в MicroPython есть модули вроде machine для доступа к низкоуровневым аппаратным компонентам.

Пример 1

import pyb

# включаем светодиод:
pyb.LED(1).on()

# печатаем текст в последовательную консоль:
print('Привет, MicroPython!')

Пример 2

from machine import Pin

# создаем I/O-контакт в режиме вывода данных:
p = Pin('X1', Pin.OUT)

# переключаем контакт:
p.high()
p.low()

Пример 3

from machine import Pin, I2C

# создаем I2C-шину:
i2c = I2C(scl=Pin('X1'), sda=Pin('X2'))

# сканируем подключенные устройства 
# (они будут возвращены в виде списка): 
dev_list = i2c.scan()

# записываем и считываем данные с устройства:
i2c.writeto(0x42, b'4')
data = i2c.readfrom(0x42, 4)

# групповые операции обращения к памяти:
i2c.writeto_mem(0x42, 0x12, b'')
data = i2c.readfrom_mem(0x42, 0x12, 2)

Пример 4

# весь спектр типов числовых значений

# малые целые числа (помещаются в машинное слово):
>>> 123
123

# большие целые числа:
>>> 1 << 160
1461501637330902918203684832716283019655932542976

# числа с плавающей точкой:
>>> 1.23e6
1230000.0

# сложные числа:
>>> (1 + 2j) * 4j
(-8+4j)

Пример 5

# В MicroPython есть ассемблерная вставка

import micropython

# функция, созданная с помощью ассемблерной вставки MicroPython,
# для архитектуры Thumb:
@micropython.asm_thumb
def asm_add(r0, r1):
    add(r0, r0, r1)

# используем ее как обычную Python-функцию:
total = asm_add(1, 2)

Пример 6

# печатаем список с содержимым корневой директории:
print(os.listdir('/'))

# распечатываем содержимое текущей директории:
print(os.getcwd())

# открываем и считываем файл с SD-карты:
with open('/sd/readme.txt') as f:
    print(f.read())

Пример 7

import machine

# задаем частоту процессора на 84 МГц:
machine.freq(84000000)

Плата PyBoard

PyBoard – это официальная микроконтроллерная плата проекта MicroPython с полной поддержкой его программных функций. Вот компоненты, которыми она оснащена:

  • Микроконтроллер STM32F405RG.
  • Flash-память ROM (1024 Кб) и память RAM (192 Кб)
  • Коннектор Micro-USB для питания и последовательной коммуникации
  • Слот для карты Micro SD, поддерживающий стандартные SD-карты и SD-карты большой вместимости
  • 3-осевой акселерометр MMA7660
  • Часы реального времени с опциональной резервной батарейкой
  • Двадцать четыре GPIO-контакта на левом и правом краях и пять GPIO-контактов в нижнем ряду плюс GPIO-контакты для светодиода и кнопки-переключателя в нижнем ряду
  • Три 12-битных аналогово-цифровых преобразователя (АЦП), доступные на 16 контактах, 4 из которых защищены от заземления
  • Два 12-битных цифро-аналоговых преобразователя (ЦАП), доступные на контактах X5 и X6
  • Четыре светодиода (красный, зеленый, желтый и синий)
  • Одна кнопка сброса и одна пользовательская кнопка-переключатель
  • Встроенный 3.3-вольтовой LDO-регулятор напряжения, способный давать 250 мА; входное напряжение варьируется между 3.6 и 16 вольтами
  • DFU-загрузчик в ROM, облегчающий обновление прошивки

MicroPython в действии

https://www.youtube.com/watch?v=5LbgyDmRu9s

Полностью бесплатное ПО с открытым кодом

MicroPython написан в C99, и все ядро MicroPython полностью распространяется по очень свободной лицензии Массачусетского технологического университета (MIT) и доступно для общего пользования. Большинство библиотек и модулей расширения (некоторые из которых созданы сторонними разработчиками) тоже распространяются по лицензии MIT или похожим лицензиям.

Вы можете свободно использовать и адаптировать MicroPython для личных нужд, в образовательных целях и для коммерческих продуктов.

MicroPython разрабатывается открыто на GitHub, а его исходный код доступен на этой GitHub-странице и на странице загрузок. К разработке проекта приглашаются все желающие.

Передовой и крайне надежный код

В MicroPython реализовано много продвинутых техник программирования плюс ряд приемов, позволяющих обеспечить компактность кода и наличие большого количества функций.

Вот некоторые из наиболее примечательных функций MicroPython:

  • Высокая адаптивность, обеспечиваемая множеством параметров конфигурации на стадии компиляции.
  • Поддержка многих архитектур (x86, x86-64, ARM, ARM Thumb, Xtensa).
  • Широкий набор тестов (более 590) и более 18500 тестовых сценариев.
  • Покрытие кода для ядра составляет 98.4%, а для ядра плюс модули расширения – 96.3%.
  • Короткое время запуска с момента старта до загрузки первого скрипта (150 микросекунд, чтобы дойти до «boot.py» на PyBoard v1.1, работающей на 168 МГц).
  • Простой, быстрый и надежный сборщик мусора для кучи.
  • При нехватке места в куче будет возбуждено исключение MemoryError.
  • При достижении предела стека будет возбуждено исключение RuntimeError.
  • Минимальная задержка работы Python-кода во время аппаратных прерываний.
  • Ошибки оснащены обратной трассировкой и умеют сообщать номер проблемной строчки исходного кода.
  • Свертка констант в парсере/компиляторе.
  • Тегированные указатели, позволяющие уместить малые целые числа, строки и объекты в машинное слово.
  • Прозрачный переход от малых целых чисел к большим целым числам.
  • Поддержка 64-битной NaN-упаковки (боксинга).
  • Поддержка 30-битного «втискивания» чисел с плавающей точкой в машинные слова, позволяющая не использовать память в куче.
  • Генерирование кросс-компиляторного и замороженного байт-кодов, что позволяет получить заранее скомпилированные скрипты, не занимающие память RAM (кроме создаваемых ими динамических объектов).
  • Многопоточность при помощи модуля _thread с глобальной блокировкой интерпретатора («global-interpreter-lock» или GIL). Разработка этой функции пока не завершена – в данный момент она доступна лишь на некоторых портах.
  • Эмиттер нативного кода напрямую генерирует машинный код, а не код для байт-кодной виртуальной машины.
  • Ассемблерная вставка (в данный момент есть команды только для Thumb и Xtensa).

Онлайн-материалы

Ниже – ссылки на несколько ресурсов, на которых можно более подробно узнать о MicroPython и следить за его разработкой:


См.также

Внешние ссылки