Скорее всего, если вы программируете встроенные устройства, то пишете код на языке C/C++. C был создан в начале 1970-х годов, однако только в 1990-х начался переход от ассемблера к более высокоуровневому языку C для программирования встроенных устройств. В последующие 30 лет C/C++ оставался безоговорочным лидером в разработке встроенных приложений благодаря своей высокой производительности как в скорости, так и в компактности. Сегодня мы наблюдаем новую тенденцию — рост популярности встроенных версий языка программирования Python.
Python появился в 1990-х годах и с тех пор стабильно набирал популярность среди разработчиков. В 2020 году Python занял первое место в ежегодном рейтинге популярности языков программирования по версии IEEE Spectrum. Изначально Python использовался встраиваемыми разработчиками как скриптовый язык для тестирования электронных устройств. Однако со временем он стал продвигаться всё глубже в стек разработки. Существует несколько реализаций Python, при этом CPython является эталонной версией, широко используемой в настольных приложениях.
PyMite и Tiny Python стали одними из первых попыток создать облегчённые версии Python для работы на микроконтроллерах. PyMite включает только виртуальную машину и среду выполнения, но не компилятор. Это означает, что он может выполнять только байт-код, предварительно скомпилированный в CPython. Tiny Python, напротив, включал компилятор байт-кода, но занимал всего около 64 килобайт ОЗУ. Оба проекта базировались на Python 2 и больше не развиваются, но они стали первыми шагами к использованию Python в сфере встроенных систем.
MicroPython — это захватывающая альтернатива языку C в разработке встроенных систем. Он переносит многие возможности настольного CPython на различные популярные архитектуры микроконтроллеров, включая платы STM32, TI CC3200/WiPy, Teensy, Nordic nRF, SAMD21, SAMD51, ESP8266, ESP32, RISC-V и даже платформу Lego Mindstorms EV3. С момента запуска в 2014 году популярность MicroPython неуклонно растёт, что отражает общий рост интереса к CPython. Дополнительным преимуществом является то, что исходный код MicroPython распространяется по открытой лицензии MIT и доступен на GitHub.
CircuitPython — это образовательная и ориентированная на разработчиков-любителей версия Python, являющаяся форком MicroPython. Разработку CircuitPython поддерживает компания Adafruit Industries, и он стал стандартным языком для многих её продуктов на микроконтроллерах. Сейчас более 100 плат совместимы с CircuitPython, в основном на базе микроконтроллеров Microchip SAMD21/SAMD51 и Nordic Semiconductor nRF52840. Одной из ключевых особенностей CircuitPython является возможность просто перетащить исходный код (.py) на совместимую плату, как на USB-накопитель. Нет необходимости компилировать код или использовать сложные и дорогостоящие программаторы/отладчики. Кроме того, исходный код остаётся доступным на устройстве и может быть открыт на любом компьютере, что позволяет легко редактировать и перезаписывать программу.
Zerynth — это набор инструментов в составе программного комплекса (SDK), ориентированный на разработчиков устройств Интернета вещей (IoT). Он упрощает взаимодействие 32-битных микроконтроллеров (ESP32, ESP8266, ARM Cortex M0+/M3/M4) с облачными сервисами (AWS, Azure, Google Cloud Platform, Ubidots, The Things Network). С помощью нескольких строк кода можно передавать данные с датчиков периферийных устройств в облако для последующего анализа и хранения. В экосистему Zerynth входят командная строка (CLI), интегрированная среда разработки (Zerynth Studio IDE), операционная система Zerynth OS и диспетчер устройств Zerynth Device Manager. Всё это доступно для Windows, macOS и Linux. Виртуальная машина Zerynth занимает всего 80 КБ флеш-памяти и 5 КБ ОЗУ. Код можно писать полностью на Python или использовать гибридный подход Python/C, если требования к производительности этого требуют.
CPython. Одноплатные компьютеры (SBC) представляют собой полноценные настольные компьютеры в форм-факторе кредитной карты (например, Raspberry Pi, BeagleBone). Благодаря низкой стоимости они всё чаще используются в встраиваемых приложениях. Современные SBC достаточно мощные и имеют достаточный объём памяти и хранилища, чтобы запускать полноценную реализацию CPython (или её облегчённую версию с удалёнными ненужными модулями). Ранее существовали реализации Python для ARM Linux, адаптированные под ARM-архитектуры (в отличие от x86/x64). Более новые реализации, такие как PyPy (с JIT-компиляцией вместо интерпретации), уже портированы на Raspberry Pi и обеспечивают улучшенную производительность.
Разработчикам следует помнить, что не существует единственной «версии» Python. Есть множество реализаций, и некоторые из них специально адаптированы для работы на встроенных устройствах. Будущее Python в профессиональной разработке встроенных систем зависит от его способности конкурировать с C по производительности. История показывает, что переход с ассемблера на C не произошёл мгновенно. Ассемблер по-прежнему используется в критически важных участках C-кода. Аналогично, Python и C могут эффективно работать вместе.
Кроме того, современные микроконтроллеры значительно мощнее, чем 10-20 лет назад. Тактовые частоты выросли с нескольких мегагерц до гигагерца. Флеш-память, измерявшаяся в десятках килобайт, теперь составляет несколько мегабайт. И, что важно, рост производительности не привёл к значительному увеличению стоимости. Это позволяет разработчикам встроенных приложений писать код более высокого уровня, не беспокоясь о каждом такте процессора и байте памяти, при этом создавая качественные и отзывчивые продукты.
Итоги
Языки программирования, как и естественные языки, эволюционируют, чтобы соответствовать требованиям времени. Производные CPython, разработанные специально для встроенных систем, такие как MicroPython и CircuitPython, играют ключевую роль в будущем встроенной разработки, поскольку делают этот процесс доступным для всех. В сочетании с базовыми знаниями электроники встроенные версии Python позволяют людям, независимо от уровня подготовки, объединять физический и цифровой миры. Эти возможности ещё несколько лет назад казались немыслимыми.
Благодаря доступности открытых языков программирования и встраиваемых платформ локальные сообщества по всему миру могут разрабатывать инструменты, адаптированные под их потребности, экономически выгодные и устойчивые. От мониторинга влияния транспорта на окружающую среду в мегаполисах до контроля качества воды в лагерях беженцев — встроенный Python помогает сделать мир лучше, одна строка кода за раз.