Реклама ⓘ
Главная » Arduino
Призовой фонд
на июнь 2024 г.
1. 50 руб.
От пользователей

Реклама ⓘ

Знакомство с платой MicroPython

MicroPython - проект, ставящий перед собой целью портирование Python на микроконтроллеры STM. В ноябре прошлого года Damien George, британский физик-теоретик, увлекающийся электроникой и робототехникой, опубликовал на Kickstarter проект платы с микроконтроллером STM, писать код для которой возможно на языке Python. Проект резко набрал популярность и сборы в 6 раз превысили ожидаемые. За полгода автору удалось сделать и отослать поддержавшим его проект энтузиастам рабочие прототипы, а также запланировать новый цикл производства для тех, кто заинтересован в получении платы. Проект получил довольно большое количество разработчиков как версии Python для микроконтроллеров STM, так и для библиотек для работы с внешними устройствами. 

Каковы преимущества платы MicroPython? Во-первых, цена оригинальной платы сравнима с ценами на оригинальные платы Arduino - и это при кардинально различающихся возможностях. Во-вторых, Python - язык более высокоуровневый и простой, чем Wiring для Arduino или же C для AVR, что, несомненно, является плюсом для начинающих. После нового цикла производства, когда платы будут доступны всем желающим, ожидается ещё больший приток популярности и дальнейшее увеличение ниши MicroPython в электронных проектах. В-третьих, для использования программного обеспечения MicroPython необязательно иметь оригинальную плату - можно скомпилировать ПО под другой подходящий МК от STM (об этом расскажу позднее) или даже использовать как минималистичную и очень быструю версию Python на ПК. На данный момент заявлена начальная поддержка для плат NetDuino Plus 2, STM Discovery STM32F407 и Teensy 3.1. Более актуальный список поддерживаемых плат доступен здесь.

Возможности

Как можно увидеть, плата имеет огромное количество GPIO и различных интерфейсов. К примеру, можно сравнить её с платой Arduino Uno:

  Arduino Uno MicroPython
Цена 20EUR (оригинальная) 30EUR (оригинальная)
Платформа AVR STM
Язык программирования Wiring, C, Assembler (AVR)  Python, C, Assembler (STM)
Размер 2,7*2,1inch 1,7*1,6inch
ROM для кода 16/32k 91к + расширение SD-картами
GPIO/ADC/DAC 20/8/0 38/16/2
Интерфейсы UART (объед. с USB), SPI, I2C,  6xUART, 2xSPI, 2xI2C, 2xCAN 
Плюсы из коробки 1xLED 2xLED, кнопка и I2C-акселерометр
Дополнительно Унифицированные слоты расширения  USB-OTG, USB-UART/HID/storage

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

Так получилось, что я стал обладателем и, позже, активным пользователем этой платы. Что я могу рассказать об использовании? И как же обстоит дело в реальности?

Unboxing, или самая бесполезная часть


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

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

Уже работающие возможности

  • Интерактивная консоль Python через виртуальный последовательный порт через USB. Это отличная помощь в разработке, которая, естественно, не могла не появиться на этой плате. Все те возможности, которые поддерживаются скриптами, а также новые возможности платы, которые порой появляются при обновлении прошивки, можно перед этим испытать в консоли. USB - хардварный, на самом чипе STM, без посредников типа FT232.  
  • Встроенный акселерометр. Да, это то, с чем можно работать, достав плату из коробки, то, что связывает плату с внешним миром. Что-то похожее я встречал разве что в более специфичных проектах, вроде Arduino Esplora, и это, как по мне, помогает оценить возможности платы, даже ничего не припаивая.
  • USB storage для скриптов. Не нужно подключать карту для более простых проектов - 100 килобайтов для кода к вашим услугам, и они доступны как простая папка с файлами при подключении к компьютеру. Последним порой не могут похвастаться даже самые новые смартфоны ;-)
  • USB HID как приятное дополнение. Пока поддерживается только имитация мыши, клавиатура ожидается в скором времени - и, несомненно, ей найдётся применение. Также скоро обещают сделать USB-OTG - это резко расширит возможности платы, хоть и потребуется дополнительная рабочая сила для разработки драйверов. 
  • Обновление через USB. Для плат STM это довольно стандартная возможность, но не везде она сделана так, чтобы использовать её было реально удобно. 
  • Доступные модули для SPI/I2C/UART/ADC/DAC. В сочетании с интерактивной консолью - можно считать это частичной заменой Bus Pirate (популярный инструмент, использующийся в том числе как консоль для работы с различными протоколами). Конечно, в плане функций Bus Pirate является ещё много чем, но если можно использовать уже существующий инструмент для выполнения части задач - почему бы и нет?
  • Логические уровни - 3.3В, но все GPIO пины, кроме двух, принимают 5В. К слову, на плате установлен линейный регулятор с низким падением напряжения, минимальное напряжение на его входе - 3.6 вольт, что позволяет запитать плату от одной 3.7В LiIon/LiPo батареи или трёх AAA/AA.

Подключил к ноутбуку с Linux, сразу же появился последовательный порт, плюс внешний диск - память самой платы. В памяти хранятся скрипты, readme и драйвер для Windows, что довольно удобно и напоминает USB 3G-модемы.

Обновление прошивки

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

А на этом месте поподробнее...

Инструкция для Windows есть здесь, а для Linux потребуются следующие манипуляции:

  1. Скачать файл последней прошивки отсюда
  2. Установить утилиту dfu-util (в Debian/Ubuntu находится в пакете dfu-util)
  3. Замкнуть на PyBoard контакты DFU и 3V3
  4. Подключить PyBoard к компьютеру
  5. Запустить команду 
sudo dfu-util --alt 0 -D путь/к/файлу/прошивки.dfu

После прошивки и переподключения платы прошивка будет обновлена. В моём случае - после перепрошивки всё заработало нормально.

Оказалось, что плате не нравится горячее извлечение. Если быть точным, то не нравится это встроенной памяти, файловая система которой - FAT. После одного извлечения список файлов перестал читаться, но всё прошло после проверки файловой системы на ошибки. Windows чаще всего предлагает сделать это автоматически, а в Linux всё решается одним запуском fsck. Однако же мне удалось один раз в силу забывчивости потерять пару скриптов, которые набросал на скорую руку и которые просто не успели синхронизироваться с файловой системой из-за внезапного извлечения. При использовании советую учитывать этот маленький нюанс и "извлекать" встроенную память перед отсоединением кабеля.

Написание первого скрипта

Тут всё очень просто. Подключаю плату как диск:

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

Отлично. Теперь открываем файл main.py:

Пишем в нём самый простой код, который зажигает два светодиода и попеременно мигает ими по очереди с интервалом в одну секунду. led.toggle() обозначает переключение состояния светодиода на противоположное. Сохраняем, перезапускаем - мигает. 

К слову, хорошая коллекция демо-скриптов есть в этом репозитории на GitHub

Сброс к заводским настройкам

У PyBoard есть две функции на случай возникновения проблем - безопасный режим (игнорирование файлов boot.py&main.py) или же сброс к чистой ФС. Первый способ полезен, когда из-за бесконечного цикла в коде/неправильного режима USB проблему трудно исправить, но она в целом несущественна. Второй способ полезен в случае каких-либо серьёзных проблем, вроде повреждений ФС, но полностью уничтожает данные на ней. Для перехода к этим функциям отключаем плату от компьютера, затем зажимаем кнопку USR (левая) и подключаем обратно. После этого,  всё ещё держа кнопку USR, щёлкаем кнопкой RST (правая) и дожидаемся момента, когда будут мигать оранжевый и зелёный светодиоды:

  • Для безопасного режима отпускаем кнопку USR в момент, когда будет гореть только оранжевый светодиод. Он мигнёт 4 раза, после этого будет активирован безопасный режим, во время которого можно подключиться к последовательному порту или примонтировать файловую систему.
  • Для сброса к заводским настройкам отпускаем кнопку USR в момент, когда будут гореть и оранжевый, и зелёный светодиоды. Они мигнут 4 раза, после этого загорится красный светодиод. Когда он потухнет, сброс закончится. Для того, чтобы продолжить работу с платой, просто щёлкните кнопкой RST. 

Последняя заметка - имеющуюся у меня плату не удастся просто так подключить к какому-нибудь устройству. Почему? Не напаяны контакты. Это можно и нужно исправить, официальный совет - напаять контактные группы типа "мама" так, чтобы контакты приходились на лицевую сторону платы, к примеру, так:

Или так:

MicroPython

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

Плата MicroPython

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



Полезна ли мне эта плата как разработчику? Да, несомненно. У меня есть проекты, где Raspberry Pi/любой другой SoM на Linux/OpenWRT - оверкилл, а Arduino - уже недостаточно, к примеру - обработка данных с датчиков положения и корректировка положения в пространстве, синтез звука, контроль большого числа устройств на I2C/SPI или же устройств с высокой скоростью передачи и т.п. В процессе работы оказалось, что эта плата - отличный инструмент для прототипирования благодаря простому ЯП и возможности интерактивной отладки - теперь, прежде чем создавать библиотеку Arduino для какого-то нового проекта, я создаю модуль Python для MicroPython и проверяю на нём, так как таким образом уменьшается число ошибок при конвертации данных из даташита в код. В следующих статьях я обязательно расскажу и об этом подходе.

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

Теги:

Опубликована: 0 1
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (8) | Я собрал (0) | Подписаться

0
maxim #
А сам питон там статически типизированый? Какое-то подмножество или каноничный CPython?
Ответить
0

[Автор]
CRImier #
Типизирован по-прежнему динамически, CPython там не используется - слишком мало памяти у МК, вместо этого разработан свой интерпретатор, заточенный специально под МК. Интерпретатор основан на Python версии 3.4. Только что нашёл презентацию, где кратко описаны нюансы создания интерпретатора, а тут видео выступления, где всё ещё подробнее.
Ответить
0
kobzar #
Ждем продолжения!
Ответить
0
я #
Вот интересно, есть-ли прошивка, хотелось-бы такую штуку самому собрать.
Ответить
0
kobzar #
Прошивка и что самое главное вроде даже как сама плата есть на гите! Кроме того - уже готова версия для платы STM32-Discovery F4 осталась одна проблема - все это еще слишком дорого.
Так что ждем продолжения и может кто таки нарисует свое устройство с блекджеом и девицами :)
Ответить
0
dog17 #
На плате MicroPython, напряжение на 3u3 упало до 1.7 В, и при подключении USB кабеля к компьютеру, плата никак не реагирует. Можно ли это как то исправить?
Ответить
0
kobzar #
Так а что затихло то все? Где продолжение банкета?
Ответить
0
Bass85 #
Очень интересно особенно про запуск на других платах. Жаль продолжения так и нет.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Arduino UNO
Arduino UNO
iMAX B6 - зарядное для Lion, LiPo, LiFe, Pb, NiCd и NiMH аккумуляторов Модуль измерения тока на ACS712 (30А)
вверх