Состояние нации MicroPython

В начале…

Все началось достаточно невинно. Я купил доску Sipeed Maixdruino, чтобы поиграть с ней. Идея заключалась в том, чтобы взять Raspberry PI W, который я использовал для своего проекта камеры с солнечной батареей, и перенести его на эту новую плату. Raspberry PI W зарекомендовал себя ненадежным и энергоемким, и я усомнился в необходимости полноценной ОС Linux для запуска одного простого скрипта Python, который запускал бы все. Maixdruino от Sipeed поставляется с прошивкой MaixPy MicroPython. Поэкспериментировав с образцами сценариев MaixPy, вскоре я начал обрабатывать изображения с помощью ИИ-чипа с функцией распознавания лиц и т.п., что было одной из целей моего проекта камеры на солнечной энергии. Но…

Порт

С этим я начал портировать скрипт Raspberry PI Python, который я создал за несколько месяцев до этого, на MicroPython. У меня была мысль сначала заставить его работать на Unix-версии MicroPython, а затем перенести на Maixdruino. Если бы все было так просто, как я обнаружил, вселенная MicroPython фрагментирована и не существует «стандартной» версии.

Python, старший брат MicroPython, существует уже много лет. Он поддерживается Python Software Foundation, и одна и та же кодовая база работает на нескольких платформах. Хотя существуют и другие реализации Python, наиболее популярной является, как известно, CPython. По большей части Python остается неизменным, независимо от того, установлен ли он на компьютере Linux, Raspberry PI, MacOSX и т. Д. Доступна одна и та же стандартная библиотека, и те же расширения в индексе PyPi.org работают на этих платформах. Приложив минимальные усилия, код, работающий на одной платформе, легко будет работать на другой.

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

Микропифоны

Базовый MicroPython был первоначально создан австралийским программистом и физиком Дэмиеном Джорджем после успешной кампании при поддержке Kickstarter в 2013 году (Википедия). Реализация завершена в том смысле, что код работает и работает на нескольких SOC (Systems-On-a-Chip), а также на Unix. Однако библиотеки и расширения, сравнимые с CPython, доступны, но являются неполными. При поиске на PyPi.org MicroPython большинство библиотек помечены как «Dummy», так как код должен быть заполнен. Конечно, этот код является открытым исходным кодом и находится в свободном доступе, поэтому следует помнить об этом, поскольку все проекты с открытым исходным кодом, нужно где-то начинать. Ядро linux было практически невозможно до версии 1.0, и потребовалось несколько лет, чтобы обернуть его в полноценную ОС. Первоначальная цель MicroPython заключалась в том, чтобы дать преподавателям и начинающим программистам возможность получить некоторый опыт работы с IOT и встроенными системами, и в этом смысле он кажется полезным.

Заглянув дальше, я обнаружил вилку MicroPython, PyCopy, и здесь все становится политическим. PyCopy написан и поддерживается Полом Соколовским. Из PyCopy README могло показаться, что автор много работал над MicroPython, а затем был исключен из проекта. Оттуда он раздвоил код и продолжил работу. По большей части PyCopy - это то же самое, что и MicroPython, за исключением того, что, похоже, он находится в стадии более активной разработки. Pycopy поддерживает больше плат из коробки и поддерживает Windows и другие порты, не основанные на SOC. PyCopy, похоже, философски отклоняется от оригинального MicroPython, полагая, что конкретные модули MicroPython должны иметь префикс «u». Например, json встроен в оба исполняемых файла, но PyCopy называет его ujson и Micropython json. Пол, похоже, проделал некоторую работу над модулями стандартной библиотеки, и некоторые из его библиотек PyPi были заполнены по сравнению с базовым MicroPython (например, выполните поиск на pypi.org модулей pycopy).

Кроме того, Пол ведет список полезных ресурсов MicroPython, проектов MicroPython и библиотек, специфичных для PyCopy, в своем репозитории на github.com (см. Раздел «Ресурсы»).

Например:

  • pycopy-filedb - ORM на основе файлов
  • pycopy-dlman - менеджер загрузок в стиле wget
  • picoweb - минималистичный фреймворк для веб-приложений
  • picotui - Библиотека минималистичного текстового пользовательского интерфейса (Think dialog в Linux)

Реализации поставщика

Здесь все становится сложнее. На github существует более 2000 форков MicroPython. По мере появления на рынке новых плат IOT некоторые производители, похоже, стремятся улучшить исходную реализацию MicroPython. Эти производители плат, похоже, сами разделили MicroPython и создали свою собственную версию.

Несколько примечательных реализаций:

  • CircuitPython от Adafruit для плат, которые они продают и поддерживают
  • MaixPy от Speed ​​для Maixdruino и связанных плат
  • Micro: bit - сотрудничество с BBC в Великобритании по внедрению программирования в образование.

Каждый поставщик предлагает расширения к стандартной библиотеке для поддержки оборудования на своих платах. Платы Maix, например, добавляют поддержку камеры, ЖК-дисплея, KPU (встроенного механизма вывода оборудования), WIFI и т. Д. Эти изменения библиотеки зависят от производителя. Нет никакого гарантийного кода, написанного на одном SOC, который будет работать на другом, даже если есть сходное оборудование. Можно было бы подумать, что это будет одной из целей, поскольку C / C ++ для встраиваемой разработки обычно не переносится между устройствами.

Из всех реализаций CircuitPython кажется наиболее полной и поддерживаемой. Adafruit некоторое время занимается разработкой CircuitPython. Он имеет как лучшую поддержку устройств SOC, так и обширную библиотечную поддержку для многих типов датчиков и аппаратных устройств. Многие библиотеки CircuitPython также работают в Unix и, следовательно, могут использоваться на Raspberry PI и подобных платах. CircuitPython, версия 5, кажется наиболее зрелой реализацией.

MaixPy - это реализация MicroPython от Sipeed. Они создали собственный набор плат на базе процессора Kendryte K210. Kendryte K210 особенный, потому что это 64-битный двухъядерный процессор RISC-V с аппаратным FPU и ускорителем свертки. По сути, в него встроен механизм вывода. Это полезно, поскольку будущее ИИ продвигает все больше и больше с меньшей зависимостью от облака. Sipeed утверждает, что плата Maxdruino до восьми раз быстрее, чем Raspberry PI 4. Их реализация MicroPython особенная тем, что они включают поддержку KPU, OpenCV и эмулятора Nintendo (NES) K210 (да, я вас не шучу. ). В их версию MicroPython встроено множество функций искусственного интеллекта. Это упрощает создание прототипов для обработки видео и аудио с помощью Python, и они приводят множество примеров в своем репозитории MyMaix_scripts Git Repo (см. Ресурсы).

Хотя есть несколько хороших примеров сценариев, документация скудная, неполная и много осталось на китайском языке. Поскольку у меня есть эта плата, мне пришлось просматривать образцы кода и исходный код для реализации MicroPython, чтобы найти информацию о том, какие библиотеки встроены в образ MicroPython. У Sipeed действительно есть активный форум на своем веб-сайте. Тем не менее, использование этой платы и их реализации MicroPython потребует некоторой работы.

micro: bit - еще одна реализация MicroPython. Они сосредоточены на обучении и обучении компьютерным навыкам как таковым, их реализация поддерживает только платы, которые они продают. Тем не менее, созданная ими библиотека является обширной и параллельной реализацией CircuitPython. Документация хорошо продумана и легко читается. Поскольку они сосредоточены на образовании, это хорошее начало для студентов и учителей. Разработчикам встроенных приложений следует учитывать, что они предназначены для работы на платах micro: bit и в противном случае могут оказаться бесполезными.

Еще один…

Еще одна примечательная вилка MicroPython - это реализация Raspberry PI на «голом железе». Да, если вам надоело запускать Python в Linux, вы можете создать SD-карту с помощью MicroPython и загрузить свой любимый Raspberry PI в командной строке MicroPython REPL. Как и другие аппаратные порты, этот MicroPython поддерживает оборудование, специфичное для Raspberry PI. Подробности см. В разделе "Ресурсы".

Отладка

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

Отладка MicroPython возвращает нас в прошлые годы, когда использовались операторы печати. На момент написания этой статьи MicroPython еще не имеет встроенного отладчика. Функциональность, необходимая для поддержки отладчика Python в реальной виртуальной машине MicroPython, находится в стадии разработки, согласно странице проблем MicroPython на GitHub. Были предложения использовать отладчик JTAG для прогона кода на плате, но это отладило бы виртуальную машину Python. Таким образом, на данный момент отладка на уровне исходного кода для MicroPython недоступна.

Вывод

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

Тем не менее, используя стандартный синтаксис Python, разработчик может быстро взломать код, который будет работать на SOC, что сделает его полезным для прототипирования. Для встроенных систем Linux с ограничением памяти MicroPython предлагает альтернативную виртуальную машину Python с портом Unix. Думаю, если бы я начал все сначала, я бы начал с реализации CircuitPython от Adafruit, купив одну из плат, поддерживаемых этой реализацией. Их обширная библиотека драйверов Python и активное сообщество позволяют легко начать работу и найти что-то полезное. Для сред Unix (или Windows) я бы начал с порта PyCopy, поскольку он, похоже, находится в стадии наиболее активной разработки. Что касается моего проекта Solar Power Camera, я к этому и направляюсь, поскольку я попытаюсь перенести свой код Python на MicroPython для Linux, где этап файла будет заключаться в попытке использовать MaixPy на моем Maixdruino. Я ударю головой о реализации MaixPy MicroPython ни по какой другой причине, чтобы использовать аппаратное обеспечение ИИ.

Есть ли будущее у MicroPython? Определенно. По мере его развития можно надеяться, что разработчики внесут микроверсии стандартных библиотек Python, что сделает их использование менее сложным. Можно также надеяться, что разработчики объединятся, чтобы сформировать стандартный выпуск, возможно, под эгидой Python Software Foundation, чтобы уменьшить фрагментацию. А пока, погружаясь в MicroPython, наслаждайтесь танцами с его диким западным характером развития.

Ресурсы

Заявление об ограничении ответственности: подписание журнала IoT Magazine дает массу преимуществ :) Консультации с экспертами из разных отраслей являются важными. Отправьте свой запрос здесь, и мы свяжем вас с нужными экспертами в области Интернета вещей. Он может сидеть по соседству, никогда не знаешь