Python для микроконтроллеров


    На Kickstarter через два дня заканчивается сбор средств на проект по созданию Arduino-подобной платы и специальной версии интерпретатора Python для нее.

    Micro Python — это реализация Python, оптимизированная для работы на 32-битных ARM микроконтроллерах.
    Некоторые особенности реализации:
    • используется синтаксис Python 3.3;
    • может исполнять файлы, а также имеет интерфейс командной строки;
    • оптимизировано использование памяти, компиляция и запуск «hello, world» требуют около 4 КБ;
    • не все стандартные библиотеки Python реализованы;
    • можно использовать ассемблерные вставки;
    • и т.д.


    Вот пример скрипта, который мигает светодиодом раз в две секунды:
    image

    Micro Python board — плата, основанная на микроконтроллере STM32F405, который работает на частоте 168 МГц и имеет 1 МБ flash-памяти и 192 КБ ОЗУ. Плата имеет размер 33 на 40 мм. На плате распаян microUSB-разъем, слот для карт microSD, имеется акселерометр и 30 портов ввода-вывода.
    image

    Теперь немного о финансировании.
    На текущий момент собрано уже более 70 тысяч фунтов стерлингов (запланировано было 15 тысяч), поэтому автор обещает несколько плюшек:
    • подключение к Wi-Fi через модуль CC3000;
    • подключение к ethernet через модуль WIZ820io;
    • поддержка радиопередатчика NRF24L01+.

    На сегодня минимальное вложение, позволяющее получить плату Micro Python — £24.
    Судя по сборам, кампанию можно считать успешной, а, значит, проект будет выложен в общий доступ под лицензиями Open Source Software и Open Source Hardware.

    upd Появилось новое видео, показывающее, как написать простой скрипт и запустить его на плате.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 39
    • 0
      Круто конечно, но АРМ7… кажется перебор. вот бы питончика на контроллеры попроще.
      Получается вроде бы как и не малинка, но уже почти…
      Интересно как с эффективностью выйдет? Получится ли утилизировать 168Мгц по максимуму, или он будет работать на уровне 16Мгц контроллеров из-за реализации языка?

      Да и скрипт будет мигать светодиодом раз в ДВЕ секунды.
      • 0
        В апреле узнаем. Хотя кто-то может и сам сделать плату, исходники вроде бы в январе станут доступны.
        Но я все-таки подожду готового продукта)

        Да, конечно, раз в две секунды, исправил, спасибо
        • +1
          Не получится утилизировать 168Мгц оптимально. Настольные версии питона медленнее кода на сях в 2 -200 раз. Тут скорее всего будет то же самое. Идея питона не в быстродействии, а в простоте написания кода. Это же своего рода basic сегодняшнего дня.
          • –2
            Не понятен выбор имено Python'а. Тот же Lua куда проще.

            Мало того, для eLua уже вон сколько контроллеров есть, в том числе и на ARM7.

            Micro Python предлагают за £20, и это «early bird», то есть только для тех, кто по предоплате, а NetDuino можно взять за $29.95 в розницу и за ~$24 оптом. Уверен, китайцы скоро будут клепать за $12 с бесплатной доставкой.
            • +4
              ИМХО, на вкус и цвет… Кому-то python больше нравится.

              И, пожалуйста, не путайте ARM7, который является семейством ядер (в рамках спецификаций от ARMv3 до ARMv5) и спецификацию ARMv7, по которой сделаны семейства ядер Cortex-M, Cortex-R и Cortex-A.

              eLua работает как на некоторых платах с ARM7, так и на некоторых с Cortex.
              • 0
                Верно, что-то мне подумалось, что тут решили использовать ARM7. Очевидно, что ARM7 Python'а никак не потянуть.

                На M4 есть замечательный и очень популярный STM32F4DISCOVERY, аж за $14.58 за штуку.
                Так что тут возникает вопрос — зачем проектировать плату, если уже есть плата дешевле, которая при этом наверняка ещё и лучше.

                Если кто-то конкретно за Python готов переплатить в 2 с лишним раза это, конечно, его личное дело. С моей точки зрения оба языка сравнимы по возможностям, но Lua более легковесен.
                • 0
                  У этих языков разные задачи и существенно разные возможности.
                  Lua — embedded-язык. Создавался с этой целью, из этого же вытекают его ограничения.
                  Python — general-purpose язык, с неплохой объектной моделью, серьезными возможностями метапрограмирования и т. п.

                  Так что тут возникает вопрос — зачем проектировать плату, если уже есть плата дешевле, которая при этом наверняка ещё и лучше.

                  Данный проект, вероятно, имеет такую не столько из-за железки (которая копеечная), сколько из-за разработки интерпретатора под неё (с соответствующим возможностям железки memory footprint'ом).

                  Кроме того, эта плата — скорее embedded решение, которое можно применить в качестве компонента своего устройства. А stm32*discovery — это evaluation board, чтобы посмотреть возможности процессора.
                  • 0
                    Раз уж затронули тему метапрограммирования, то интересно, как вы видите применение этого в программировании контроллера?
                    Даже при поверхностном изучении Lua можно узнать, что там тоже есть возможность метапрограммирования, начиная от метатаблиц объектов.
                    • +1
                      Дело не в Lua, а в пользовательской базе Питона, в его применении для обучения, в его широкой популярности и т.д.
                    • +5
                      Сухие данные:
                      Фото
                      Плата
                      Чип
                      Процессор
                      Частота, МГц
                      Flash, МБ
                      RAM, КБ
                      Цена


                      Micro Python
                      STM32F405
                      M4
                      168
                      1
                      192
                      ??? £20+


                      DISCOVERY
                      STM32F407VGT6
                      M4F
                      168
                      1
                      192
                      50.8 x 17.78 mm
                      $15


                      MicroElectronica MINI-M4
                      STM32F415RG
                      M4F
                      168
                      1
                      192
                      50.8 x 17.78 mm
                      $29



                      Зачем делать с нуля плату, у которой уже есть аналоги под предлогом возможности запуска урезанного Python, и которая будет дороже аналогов, зачем собирать на это дело £15,000 (да, понимаю, что часть денег уходит на рассылку и производство плат)? Разработка схематики не должна занять много времени у опытного схемотехника, учитывая, что все исходные файлы для железа и софта DISCOVERY выложены (см. gerber files, BOM, schematics, firmware package) в открытом доступе.

                      Ещё хочу обратить ваше внимание вот на это:

                      Micro Python will be ported to run on a microcontroller of your choice. The microcontroller must have the capabilities, and you are responsible for set-up costs for the development board and/or software. Get in touch for details. Also includes a Micro Python board.

                      В чём тогда сакральный смысл проектировать именно плату?
                      • 0
                        Чтобы отдать all-in-one, наверное. Большинство предпочтет не портирование с пересылкой dev-board/eval-board разработчику и оплату ему софта для разработки, а готовую стандартную плату.

                        Разработка схематики не должна занять много времени у опытного схемотехника

                        Здесь скорее опытный программист, а не схемотехник, судя по желанию переписать python для такого footprint'а.

                        Повторюсь:
                        Данный проект, вероятно, имеет такую не столько из-за железки (которая копеечная), сколько из-за разработки интерпретатора под неё (с соответствующим возможностям железки memory footprint'ом).


                        Так что целей может быть и несколько. Challenge, получение заказа на большую партию, чтобы параллельно сделать значительную партию для себя, мотивация написать интерпретатор.

                        Это краудфандинг. Если люди готовы это профинансировать — то это их личное дело. Эффективность никого не волнует.
                • +3
                  Есть еще такая замечательная штука, как 86Duino, она вообще на x86 и с кучей ОЗУ. Или, к примеру, Raspberry Pi. Цены сопоставимые.
                  • 0
                    А я бы MRuby попробовал
                    • 0
                      Я бы тоже попробовал. Но вам шашечки или ехать?

                      This is a preliminary release for internal team review.

                      И так уже год, причём активность заметно спала. Не для embedded систем синтаксис Ruby придумали. Ууда лучше бы слегка упрощённый JS подошёл.
                  • +1
                    Да, но и простоту написания кода можно совместить с быстродействием. Тот же Васик для МК порой весьма быстро работает, как и программа написанная на ассемблере.
                    • +1
                      Я так понимаю, что разница между Python и Micro Python как между JavaScript и asm.js
                    • +2
                      Во первых, ARM7 здесь ни при чём. Только спецификации ARMv6 и ARMv7. ARM7 — это старое ядро, вытесненное Cortex-M.

                      Здесь ядро — ARM Cortex-M4 + DSP (ST STM32F405). Профили (Cortex-R, Cortex-A и Cortex-M) появились в спецификации ARMv7.

                      Raspberry Pi — на ARM11 (Broadcom BCM2835, ARM1176JZFS-based SoC). Это ядро относится к спецификации ARMv6.
                      • 0
                        Using Python decorators, functions can be optionally compiled to native machine code, which takes more memory but runs around 2 times faster than byte code. Such functions still implement the complete Python language.


                        Memory usage is minimised by storing objects in efficient ways. Integers that fit in 31-bits do not allocate an object on the heap, and so require memory only on the stack
                        .

                        There are 4 types of code emitters, selectable per function by function decorators: (compressed) byte code, native code, native code with native types, and inline assembler


                        Python exceptions are handled using a variant of setjmp/longjmp. This reduces the amount of flash and RAM needed to implement exceptions.


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

                        Size of int object: 4 bytes, stored on the stack or directly in a tuple/list/dictionary.

                        Например int в x64 версии питона занимает занчительно больше места:
                        >>> import sys
                        
                        >>> sys.getsizeof(5)
                        
                        24
                        
                      • –1
                        Причём тут питон? Это платка с арм процессором.
                        • +3
                          Как при чем? На микроконтроллер сразу залита специальная версия Python, кидаете просто на флешку тесктовый файл с кодом — и вперед. Не надо никаких сред для программирования, как для Arduino.
                          • +5
                            >>На микроконтроллер сразу залита специальная версия Python

                            Тю :)
                            Есть уже готовая штука с питоном на борту jt5.ru/shields/gsm-shield/
                            В модулях Телит питон прилагается и под пользовательские скрипты тут выделено 1.9 MB
                            Шилд юзается как вместе с Ардуино, так и по отдельности.

                            Помимо I/O эта штука еще умеет:
                            — Синхронизировать время из интернета
                            — Выходить в интернет, слать/получать СМС (GSM, GPRS)
                            — Сканировать GSM-диапазон, показывать доступные соты (разных операторов), уровень сигнала и системную инфу по ним.
                            — Jamming detection (детектор глушения сети)
                            • 0
                              Это будет удобнее традиционной заливки прошивки, если можно будет подключать саму плату как USB mass storage, чтобы не заниматься сексом с платой, пихая и вынимая MicroSD после каждой правки.
                              • 0
                                И так можно подключать. Вообще вот режимы USB: USB serial, USB mass storage и USB HID
                                • 0
                                  Так из коробки умеет LPC1343 цепляешь его в USB и он видится как флешка обьемом 64кб, кидаешь туда хекс файл и считай прошил. Ну и один камрад такой же загрузчик написал для STM32F103C8
                                  • 0
                                    Даже для AVR такое есть.
                                    • 0
                                      Да ладно? массторадж бутлоадер?
                                      • 0
                                        да, видел, но не запомнил где, ибо мне не надо
                                        • 0
                                          Что-то я погуглил, и теперь жалею, что в закладки не положил…
                                      • 0
                                        Про эту фичу я знал, но тогда уж удобнее через JTAG заливать из IDE, нежели собирать прошивку и кидать на «флешку». Я-то про MicroSD говорил: открываешь плату как флешку на компе, дописываешь пару строк, сохраняешь, жмёшь на плате Reset — и всё работает. Чтобы совсем без лишних движений.
                                        • 0
                                          Добавил видео, там прямо как вы написали, «без лишних движений»
                                  • 0
                                    Есть параллельный проект, Micro Python — интерпретатор для embedded сред (точнее сказать для ARM/A32 с набором Thumb-2, т. е. ARM Cortex-M3 и старше).
                                  • 0
                                    Я ничего не понял. 192кб. Питон. А где это все исполняется то? Куда сам питон загружается?
                                    • 0
                                      Написано, что бинарник, включающий парсер, компилятор, среду исполнения и сборщик мусора, весит 60 КБ.
                                      Сколько виртуальная машина занимает в ОЗУ — пока не ясно.

                                      Что значит «куда сам питон загружается»? Там же не просто версия под ARM грузится, а используется своя реализация с оптимизацией по памяти. То есть питон уже будет прошит на плате.
                                    • +5
                                      Я-то думал, это реализация интерпретатора пайтоновского байткода в железе…
                                      • +1
                                        Интересно, можно ли такое сделать на ПЛИС?
                                        • 0
                                          А почему нет? Только .pyd-модули работать не будут без дополнительных костылей, типа запроса на вызов нативного кода на хосте.
                                        • 0
                                          И вы не одиноки в своём заблуждении… :)
                                          • 0
                                            +1, именно этого же и ожидал от поста.
                                            • 0
                                              Поменял первое предложение, надеюсь, так более точно

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