MicroPython: Введение в программирование оборудования на Python

Оглавление

Вас интересуют Интернет вещей, домашняя автоматизация и подключенные устройства? Вы когда-нибудь задумывались, каково это - создать бластер, лазерный меч или даже собственного робота? Если это так, то вам повезло! MicroPython может помочь вам сделать все это и многое другое.

В этом руководстве вы узнаете о:

  • История MicroPython
  • Различия между MicroPython и другими языками программирования
  • Аппаратное обеспечение , которое будет использоваться для создания устройств
  • Процесс настройки, написания кода и развертывания вашего собственного проекта на MicroPython

Все идет по плану, Питон

Популярность Python в последние годы резко возросла. В наши дни он используется повсеместно - от DevOps до статистического анализа и даже в программном обеспечении для настольных компьютеров. Но долгое время существовала одна область, где использование Python явно отсутствовало. Разработчики, работающие с микроконтроллерами, еще не освоили этот язык.

Все изменилось в 2013 году, когда Дэмиен Джордж запустил кампанию на Kickstarter. Дэмиен, студент Кембриджского университета, был заядлым программистом роботов. Он хотел перенести мир Python с компьютеров, которые работали с объемами в гигабайты, на компьютеры, работающие с объемами в килобайты. Его кампания на Kickstarter была попыткой поддержать его разработку, в то время как он превратил свое доказательство концепции в законченную реализацию.

Многие разработчики ухватились за возможность не только использовать Python в микроконтроллерах, но и получить раннюю версию собственного эталонного оборудования Damien, созданного специально для этой задачи! Фактически, к концу кампании Дэмиен превысил свою цель в 15 000 фунтов стерлингов. Благодаря более чем 1900 спонсорам он достиг почти £100,000.

Python за пределами рабочего стола

Наконец-то Python перешел с настольных компьютеров и серверов в мир датчиков, приводов, двигателей, жидкокристаллических дисплеев, кнопок и схем. Хотя это и создавало множество проблем, но также открывало широкие возможности. Для настольных компьютеров и серверного оборудования требуются гигагерцовые процессоры, гигабайты оперативной памяти и терабайты хранилища. Им также необходимы полноценные операционные системы, драйверы устройств и настоящая многозадачность.

Однако в мире микроконтроллеров операционной системой является MicroPython. По сути, он работает на базе процессоров, тактовые частоты которых восходят к 1980-м и 90-м годам. MicroPython не может справиться со всеми тонкостями выполнения кода, ввода-вывода, хранения, загрузки и так далее. Если вы хотите взаимодействовать с оборудованием, то вам понадобится весь код, чтобы включить это.

Тем не менее, Дэмиену каким-то образом удалось втиснуть мощную, высокопроизводительную и компактную реализацию Python в эти миниатюрные компьютеры. Это открыло совершенно новый мир возможностей. Если вам интересно узнать больше о различиях между CPython и MicroPython, то вы можете ознакомиться с полным описанием в официальном репозитории на GitHub.

Электроника как хобби и карьерный путь

MicroPython поддерживается разнообразным сообществом питонистов, которые глубоко заинтересованы в успехе проекта. Наряду с тестированием и поддержкой самой кодовой базы, разработчики предоставляют учебные пособия, библиотеки кода и аппаратные порты, выводя проект далеко за рамки того, чего Дэмиен мог бы достичь в одиночку.

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

Итак, готов ли MicroPython к серьезной, критически важной работе? Европейское космическое агентство ESA, похоже, так считает! Они помогли профинансировать работу Дэмиена над MicroPython, потому что хотели использовать Python в космосе. Вы увидите, как критическая масса любителей и обучающихся будет все чаще переходить в академические круги, а оттуда - в профессиональный мир электроники. В этот момент MicroPython по-настоящему наберет обороты.

Python и STEM

Предметы STEM уже несколько лет находятся под пристальным вниманием образовательных учреждений, что привело к появлению огромного количества проектов и продуктов, ориентированных на аудиторию. Python и MicroPython являются удобными языками как для преподавателей, так и для студентов. Базовый синтаксис и встроенный интерпретатор создают для этих языков эффективную среду обучения. Тот факт, что не требуется среда разработки, является лишь дополнительным преимуществом!

Несколько лет назад Би-би-си запустила свой проект Micro:Bit, чтобы привлечь больше детей к компьютерам, выходящим за рамки офисных приложений. Их целью было предоставить микроконтроллерную плату в руки каждого школьника в Великобритании. Дэмиен через своего соседа приобрел одну из таких плат и быстро запустил свой код. Тысячи классов внезапно получили возможность использовать Python на своих уроках!

Совсем недавно в Edublocks был добавлен бит Micro: и появилась возможность использовать Python с помощью перетаскивания с нуля. Это позволило еще большему числу детей впервые познакомиться с микроконтроллерами и программированием робототехники. Пожертвования Patreon поддерживают дальнейший рост проекта.

Физические вычисления

Когда речь заходит о MicroPython, что означает физические вычисления? Обычно ваш проект состоит из трех элементов:

  1. Ввод: Данные вводятся с помощью кнопки, сигнала, интернет-события или показаний датчика.
  2. Обработка: Микроконтроллер обрабатывает входные данные и обновляет выходные данные.
  3. Вывод: Это может быть отправлено в виде запуска двигателя, включения светодиода, изменения счетчика, отправки сообщения или какого-либо подобного события.

Эти элементы обычно соединяются проводами и питаются от какого-либо источника питания.

Что такое микроконтроллер?

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

Микроконтроллеры изо дня в день выполняют относительно простые задачи, надежно и в компактном корпусе. Они объединяют процессор, память и средства ввода-вывода в один чип общего назначения, вместо того чтобы использовать целую плату микросхем, которые объединяются для выполнения задачи. Код, который они запускают, называется прошивка, которая перед выполнением прошивается или записывается в память с возможностью записи.

Хотя те, кто вырос на ранних микрокомпьютерах (таких как ZX81 и Commodore Vic20), могут счесть эти чипы невероятно мощными, технически ваши умные часы обладают гораздо большей мощностью. Тем не менее, микроконтроллеры чрезвычайно полезны, даже если их вычислительная мощность и объем памяти ограничены. С помощью этих маленьких устройств можно многое сделать!

Почему именно MicroPython?

Если эти микроконтроллеры получили широкое распространение задолго до того, как появилась идея MicroPython, то какие преимущества MicroPython дает вам по сравнению с традиционными методами?

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

Во-вторых, Python обеспечивает быструю обратную связь. Это связано с тем, что вы можете интерактивно вводить команды и получать ответ, используя REPL. Вы могли бы даже подправить свой код и запустить его сразу, вместо того чтобы выполнять итерацию по циклам компиляция кода-загрузка-выполнение.

И последнее, богатство кода на Python и накопленный опыт означают, что вы, как программист на Python, можете выполнять некоторые задачи быстрее и проще. Я нахожу, что библиотека Python запросов, обработка строк и инструменты для работы с JSON гораздо проще в использовании в мире MicroPython, чем C++, например.

А как насчет C++?

C++ быстр, компактен и доступен везде. Существует множество программистов на C++ и богатое сообщество разработчиков Arduino и PIC, готовых помочь вам. Таким образом, разве C++ не является лучшим выбором?

На мой взгляд, MicroPython превосходит C++ в простоте использования и удобстве. Синтаксис C++ не так прост для понимания сразу. Более того, код должен быть скомпилирован и затем перенесен на вашу плату, прежде чем вы сможете получить результат, поэтому вам нужен удобный компилятор.

Очевидно, что инструменты становятся все лучше, но преимущество по-прежнему остается за MicroPython. Хотя C++ может иметь преимущество в скорости, MicroPython достаточно быстр для большинства целей. Кроме того, если вам действительно нужен C++, то вы даже можете вызвать свой код на C++ из MicroPython!

А как насчет Ассемблера?

По производительности в чистом виде ассемблер не уступает. Однако это также не исключает возможности использования MicroPython.

Опять же, MicroPython, как правило, работает достаточно быстро. Если вам действительно нужны эти возможности самого низкого уровня, вы можете добавить встроенные ассемблеры в свои проекты на MicroPython.

А как насчет БЕЙСИКА?

Если бы вы включили один из этих старых микрокомпьютеров того времени, то они почти наверняка загрузились бы в BASIC. По крайней мере, у них был бы под рукой диалект БЕЙСИКА. Этот язык послужил введением в программирование для целого поколения. В том числе и для Илона Маска, который, по-видимому, научился программировать на Vic 20.

Сегодня блеск BASIC несколько потускнел. Python и другие языки, основанные на блокчейне, заменили его в образовательных учреждениях, и он практически не оказывает влияния на индустрию высоких технологий. Python обладает всеми преимуществами BASIC, но не имеет никаких ограничений.

А как насчет Raspberry Pi?

Raspberry Pi, работающий под управлением Python, также широко используется в сфере образования. Он нашел свою нишу в электронике и физических вычислениях благодаря своим универсальным выводам ввода-вывода. Raspberry Pi также является полноценным настольным компьютером общего назначения на базе Linux. Он обладает высокой процессорной мощностью, памятью и дисковым пространством и даже оснащен графическим процессором.

Однако этот последний аспект на самом деле может стать причиной того, что не стоит выбирать Pi и вместо него использовать плату с микроконтроллером! Возможность запуска настольных приложений и мультимедиа - это фантастика, особенно когда вашим проектам может потребоваться такая мощность. Это может иметь место, например, для искусственного интеллекта, видеопотоков и проектов с базами данных.

Но это может вызвать проблемы, когда ваш вариант использования требует обработки в реальном времени. Если вам нужно очень точное время, то вы не хотите, чтобы ваш код ждал, пока он догонит десятки различных процессов, которые все хотят выполнить одновременно.

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

Вам не обязательно выбирать то или иное. Возможно, сопряжение Raspberry Pi с микроконтроллером - лучшее решение для вашего проекта. Например, вы могли бы использовать Pi для вычислительной мощности и микроконтроллер для взаимодействия с аппаратным обеспечением.

Аппаратное обеспечение MicroPython

Если вы заинтересованы в том, чтобы попробовать MicroPython, то это здорово! Для установки MicroPython вам понадобится какое-нибудь совместимое оборудование. К счастью, существует множество вариантов, начиная от недорогих продуктов и заканчивая продуктами премиум-класса. Здесь найдется что-то для каждого кошелька и варианта использования, поэтому потратьте некоторое время на то, чтобы выбрать подходящее именно вам решение.

Создан для Python

На Kickstarter, с которого был запущен MicroPython, также было запущено сопутствующее оборудование. Pyboard для MicroPython теперь обновлен до версии 1.1.

Pyboard является одной из наиболее хорошо проработанных плат. Она основана на STM32 и имеет множество графических интерфейсов. Также есть слот для SD-карты, акселерометр и RTC с частотой 168 МГц. Если вы сможете найти его на складе, это обойдется вам примерно в 40 долларов США.

ESP8266 или ESP32

На другом конце ценовой шкалы находятся платы на базе ESP8266. У этих плат только один аналоговый вход, а контактов не так много, как у Pyboard. Тем не менее, у них есть возможность подключения к Wi-Fi. Вы можете найти их в макетных платах (таких как NodeMCU) за 10 долларов или меньше.

ESP32 является старшим братом ESP8266. Он увеличивает мощность и возможности, добавляя к набору функций Bluetooth за небольшую дополнительную плату. Одной из лучших версий таких плат является M5 Stack. Это устройство поставляется с динамиком peizo, аккумулятором, устройством для чтения карт памяти и цветным экраном.

Би-би-си Микро:Бит

Micro:Bit - это компактная плата, основанная на микроконтроллере Nordic nRF51822. Он оснащен встроенным модулем Bluetooth LE и датчиком температуры, а также акселерометром, парой кнопок управления и светодиодной сеткой 5x5.

Если вы живете в Великобритании, то, возможно, у вас уже есть одна из этих досок. Они были розданы школьникам в надежде вдохновить новое поколение программистов. Начинает появляться множество досок, вдохновленных технологией Micro:Bit, так что ее популярность обязательно возрастет!

Платы на базе Adafruit и CircuitPython

Вскоре после того, как MicroPython начал набирать обороты, Adafruit выпустила форк, который они назвали CircuitPython. Однако между ними есть несколько основных различий.

Одним из них является то, что CircuitPython предлагает поддержку аппаратного обеспечения Adafruit. Еще одно отличие заключается в том, что в большинстве реализаций Adafruit плата представлена в виде USB-накопителя, подключенного к компьютеру. В этих случаях добавить свой код так же просто, как перетащить его на диск.

Самой многофункциональной платой в линейке Adafruit premium является CircuitPlayground Express с дополнительным дополнением Crickit. Объединив эти две платы, вы получите контакты, датчики, драйверы двигателей, RGB-светодиоды и многое другое. Если вы ищете решение "все в одном", то это то, что вам нужно.

К сожалению, Adafruit снизила совместимость с ESP8266 даже для своей собственной платы Feather board на базе ESP8266. Вместо этого они решили использовать ESP32 исключительно в качестве сопроцессора Wi-Fi в будущих версиях.

Рабочий процесс MicroPython

Если вы знакомы с программированием на Arduino или PIC, то можете ожидать, что сначала мы поговорим о компиляторах, средах разработки и наборе инструментов. Однако, на первый взгляд, MicroPython немного отличается.

ПОВТОРЕНИЕ

В случае с MicroPython, как и в случае с Python, язык может поставляться вместе с вашим оборудованием, и у вас есть возможность работать с ним в интерактивном режиме. Есть два способа получить интерактивный сеанс:

  1. Используйте последовательное подключение к терминалу: Это часто делается с помощью командной строки или, возможно, с помощью IDE.
  2. Используйте WebREPL: Это опция для плат с Wi-Fi.

Чтобы получить последовательный REPL на Mac, например, вы можете запустить прилагаемую программу терминала Экран и указать свое устройство и скорость передачи данных в бодах:

$ screen /dev/tty.wchusbserial1430 115200

Вы можете найти свое устройство по списку подключенных последовательных соединений:

$ ls /dev/tty.*

Этот процесс аналогичен тому, что вы бы сделали в терминале Linux.

В Windows PuTTY - популярное приложение для терминалов. Есть также приложение под названием Tera Term. В любом случае, просто подключитесь к COM-порту, который появляется при подключении вашего устройства, и выберите скорость передачи данных 115 200 бод.

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

Инструменты командной строки

Программа Дэйва Хайланда RShell - это многофункциональный набор инструментов для работы с вашими проектами на MicroPython.

Есть еще один отличный инструмент командной строки для взаимодействия с платами MicroPython, который называется Ampy. Изначально это было разработано компанией Adafruit, но теперь за это взялся член сообщества, поскольку Adafruit фокусируется исключительно на своем собственном оборудовании.

IDE на MicroPython

Существует плагин для PyCharm, который добавляет поддержку MicroPython в вашу IDE. Он доступен прямо на рынке плагинов:

MicroPython Pycharm

Для плат Micro:Bit и CircuitPython лучшим редактором на данный момент является Mu Editor от Николаса Толлерви. В противном случае, обратите внимание на uPyCraft, который, похоже, многообещающий и уже довольно полезный.

Как только вы подключите правильный последовательный порт и выберете тип устройства, вы сможете просмотреть его:

MicroPython Serial Connection

Тип вашего устройства будет либо ESP8266, либо ESP32, либо Micro:Bit. Теперь вы можете взаимодействовать с REPL!

Настройка MicroPython на вашей плате

У выбора uPyCraft есть одно преимущество - это возможность легко записать прошивку MicroPython на вашу плату без использования инструментов командной строки. Вы можете выбрать встроенное ПО умолчанию программное обеспечение uPyCraft или загруженное вами программное обеспечение:

MicroPython Burn Firmware

BBC Micro:Bit отображается как дисковод. Когда вы используете Mu или веб-редактор, они создают файлы, которые вы можете перенести прямо на этот диск. Если вы используете плату ESP8266 или ESP32 с uPyCraft, то вы также можете установить Python ESPTool с помощью pip и настроить встроенное ПО вашей платы с его помощью.

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

Создание и развертывание вашего кода

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

  1. Используйте свою IDE. Это может быть Mu, uPyCraft или что-то подобное.
  2. Используйте инструмент командной строки. Это может быть RShell, Ampy или что-то подобное.

Когда устройства, работающие под управлением MicroPython, загружаются, они будут искать файл с именем boot.py. Если этот файл будет найден, устройство запустит его автоматически. Вы также можете выполнить .py файлов из запроса REPL:

exec(open('my-program.py').read())

По сути, это похоже на то, что делает uPyCraft, когда вы запускаете свой отредактированный Python. Он передает файл на вашу плату, а затем выполняет его через REPL.

Написание вашего кода на MicroPython

Вы начнете с традиционного проекта “Привет, мир!”. Вы можете сделать это в REPL, подключившись к нужному последовательному порту и введя следующее:

  print("Hello World!")

Вы должны увидеть следующий результат:

MicroPython Hello World

Вы подтвердили, что ваша настройка работает.

Создание цифрового вывода

Теперь давайте изменим тип выходного сигнала. Используя следующий код, вы можете заставить встроенный светодиод мигать:

import time
import machine
blueled = machine.Pin(2, machine.Pin.OUT)

# Blink 10 times
for i in range(1,11):
    blueled.value(0)
    time.sleep(0.5)
    blueled.value(1)
    time.sleep(0.5)

print("DONE!")

Вы импортируете time, что позволяет вставлять временные задержки. Вы также импортируете модуль machine, который обеспечивает легкий доступ к выводам ввода-вывода на вашей плате. Вы используете этот модуль для настройки объекта с именем blueled, который вы определяете как Pin 2. (На других платах это может быть Pin 16). Затем вы устанавливаете его в качестве выходного контакта. Вы должны увидеть следующий результат:

MicroPython Blink LED

Вы можете заметить, что на ESP8266 светодиод загорается, когда он выключен, и гаснет, когда ему присвоено положительное значение. Странно, но это так!

Примечание: Большинство плат имеют один или несколько встроенных светодиодов. Для получения дополнительной информации ознакомьтесь с документацией к вашей конкретной плате.

Что делать, если у вас нет встроенного светодиода или вы хотите подключить светодиод, которого нет на вашей плате? Вам понадобится резистор подходящего размера, например, на 220 Ом. Вам нужно будет подключить его к заземлению и короткому выводу вашего светодиода. Положительный длинный вывод вашего светодиода будет подключен к выводу GPIO 2. На плате Wemos D1 Uno GPIO 2 обозначен цифровым контактом 9 на лицевой стороне платы. Под ним находится номер GPIO.

В случае внешнего светодиода он загорится, когда значение будет равно 1 или включено:

MicroPython LED on a Breadboard

Вы можете видеть, что пин-код загорелся.

Гаснущие светодиоды

В предыдущем примере вы использовали for цикл, но на самом деле ваше оборудование может мигать светодиодом само по себе. Для этого установите вывод pin-кода на PWM, что означает Широтно-импульсная модуляция (ШИМ).

Это позволяет создать сигнал из импульсов включения и импульсов выключения. Когда вы очень быстро, много раз в секунду, включаете и выключаете светодиод, кажется, что он настроен на определенную яркость, обусловленную работой наших глаз. Вот как будет выглядеть ваш код:

from machine import Pin
from machine import PWM
import time

# Set our pin 2 to PWM
pwm = PWM(Pin(2))

# Brightness between 0 and 1023
pwm.duty(700)

# Frequency in Hertz
pwm.freq(1)

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

Вы также можете использовать ШИМ для включения и выключения светодиода:

from machine import Pin
from machine import PWM
import time

# Set our pin 2 to PWM
pwm = PWM(Pin(2))

# Frequency = 100hz
pwm.freq(100)

while 1:
  # Brightness between 0 and 1023
  for brightness in range (0, 1023, 100):
    pwm.duty(brightness)
    print(brightness)
    time.sleep(0.1)

  # Brightness between 1023 and 0
  for brightness in range (1023, 0, -100):
    pwm.duty(brightness)
    print(brightness)
    time.sleep(0.1)

Этот код создает приятный, мягкий эффект:

MicroPython Fade LED PWM

Если вы используете встроенный светодиод, то вместо этого индикатор может погаснуть, а затем включиться.

Заключение

Программирование роботов, микроконтроллеров, электроники и другого оборудования еще никогда не было таким доступным. Традиционно для программирования этих устройств приходилось использовать языки низкого уровня, такие как ассемблер или C++, и жертвовать многими функциональными возможностями. Все изменилось с появлением MicroPython, версии Python 3, втиснутой в крошечные возможности небольших физических вычислительных устройств!

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

MicroPython продолжает развиваться. Сообщество разработчиков постоянно добавляет новый код, инструменты, проекты и учебные пособия. Никогда еще не было более захватывающего времени для того, чтобы стать разработчиком MicroPython!

Back to Top