0,0
рейтинг
11 декабря 2013 в 11:28

Разработка → 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 Появилось новое видео, показывающее, как написать простой скрипт и запустить его на плате.
Константин Уфимцев @KestL
карма
10,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (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
        Поменял первое предложение, надеюсь, так более точно

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