· 

Обзор визуальных средств программирования микроконтроллеров (часть 1)

Статья опубликована на "Новаторе"

А.Т.Григорьев

 

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

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

Сразу оговорюсь, что упомянуть все программные продукты не получится, нам придётся ограничиться рассмотрением лишь наиболее перспективных графических сред. Давайте обозначим список необходимых требований.

  1. Возможность работы с универсальными микроконтроллерами, а не только лишь с частными специализированными контроллерами. В первую очередь нас интересует Arduino Uno как самый распространённый и доступный контроллер на сегодняшний день, во вторую – BBC Micro:bit как представитель универсальных образовательных микроконтроллеров будущего.
  2. Мгновенный отклик при создании программ. Ребенок должен иметь возможность сразу увидеть, что произойдёт, если записать логическую единицу в порт, либо выполнить какую-либо иную команду  (без необходимости ждать, пока откомпилируется и загрузится программа). Особенно это важно на начальных этапах обучения. Реализована данная возможность может быть несколькими способами.
    1. Работа в интерактивном режиме с предварительной загрузкой специальной прошивки на микроконтроллер. Сама программа при этом остаётся работающей на компьютере, а прошивка лишь исполняет полученные от него команды. Данный вариант имеет множество достоинств, так как в результате нам становится доступной многозадачность, управление дополнительными игровыми персонажами (спрайтами Scratch) и т.д. Но существенным недостатком является значительное время отклика системы на изменение условий. Сигнал от датчика вначале должен добраться до компьютера, после этого компьютер определит необходимое управляющее воздействие, и лишь спустя какое-то время обратный сигнал возвратится к устройству. В данном обзоре мы будем сравнивать время реакции системы при использовании разных программных сред.
    2. Работа с микроконтроллерами, которые интерпретируют программы, написанные на языках высокого уровня. В данном случае компилировать программу не требуется, её загрузка в память контроллера происходит очень быстро, в некоторых случаях прямо в процессе создания.
    3. Поддержка программной эмуляции работы устройства. Можно посмотреть, как (предположительно) будет работать реальное устройство, исполняя написанный код, проверить всё на эмуляторе вместо того, чтобы загружать в устройство на самом деле.
  3. Программная среда должна предоставлять возможность создания программ для автономной работы контроллера, в противном случае она просто не может называться инструментом, выполняет исключительно учебно-ознакомительные функции, и непонятно, зачем её использовать, когда есть альтернативы.
  4. Должна быть предусмотрена возможность лёгкого переключения между интерактивным режимом работы и режимом создания автономных программ. Подготовить микроконтроллер к использованию должно быть просто.
  5. Желательно. Использование подключаемых расширений с дополнительными визуальными блоками, поддерживающими разнообразное периферийное оборудование сторонних производителей, а также прочие дополнительные возможности.
  6. Желательно. Возможность создания собственных графических блоков, расширяющих функциональность (с использованием текстового программирования, например), возможность включения произвольных фрагментов текстового кода в графический скрипт.
  7. Желательно. Возможность загрузки текста программы, сгенерированного из графического скрипта, внутрь редактора для дальнейшей доработки.

Пару лет назад всем перечисленным выше требованиям соответствовала лишь одна единственная программная среда – mBlock for PC, разработка компании Makeblock, а также, с некоторой натяжкой, Snap4arduino. Менее года назад на сцене появились другие программные продукты, но они поначалу были весьма сырыми, демонстрировали недостаточную производительность и функциональность. Сегодня уже можно сказать, что у программы mBlock есть серьёзные конкуренты. Однако у каждого продукта существуют свои достоинства и недостатки.

Итак, список рассматриваемых сегодня программных средств.

  1. mBlock v.3.4.11
  2. mBlock v.5.0.0 RC
  3. Snap4arduino v.1.2.7
  4. MindPlus v.1.2.1
  5. KittenBlock v.1.8.1
  6. MakeCode for Micro:bit (v. 1.2.13 / 4.4.7 / 2.1.1 )
  7. MicroBlocks v.0.1.27 (alpha)

Программные среды, позволяющие работать с платой Arduino Uno в интерактивном режиме, тестировались на производительность с замером трёх показателей: скорость чтения состояния портов, скорость отправки команд на изменение состояния портов, интегральная скорость (чтение/запись). Описание процедуры и программные скрипты  будут приведены далее.

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

Название

Микро­контрол­леры

Мгновен­ный отклик, (скорость)

Автоном­ные прог­раммы, функцио­нальность

Подготовка контрол­лера, смена режимов работы

Библио­те­ки расши­рений

Свои блоки кода

Загрузка в редактор

mBlock 3

Arduino Uno, Nano, Leonardo, Mega 2560

Интерак­тивный режим,
R - 14.4
W - 14.4
I - 16

+++

++

+++

+++

+++

mBlock 5

Arduino Uno, Mega 2560;
Micro:bit

-
(пока)

++

-

+

+

+

Snap4arduino

Все клас­сичес­кие платы от Arduino Uno до Due

Интерак­тивный режим,
R - 86
W - 28.6
I - 41

+

+/-

+

++

+

MindPlus

Arduino Uno, Nano, Leonardo; Micro:bit

Интерак­тивный режим,
R - 18
W - 4.4
I - 7

++

+++

++

+

++

KittenBlock

Arduino Uno, Nano, Pro, Mega 2560, LGT; Micro:bit

Интерак­тивный режим (UNO-совм.),
R - 15.1
W- 146(?!)
I - 22

++

++

++

+

+++

MakeCode

Micro:bit,
Adafruit CPE

Эмулятор

+++

-

+++

+

+++

MicroBlocks

Micro:bit,
Adafruit CPE, Arduino Due, ESP8266, ESP32 и др. 32-bit

Загрузка и испол­не­ние програм­мы прямо во время редакти­рования

+++

+/-

+

+++

-

 

Несколько слов о процедуре тестирования.  В программных средах mBlock3, Snap4arduino, KittenBlock и MindPlus были написаны одинаковые скрипты, позволяющие замерить производительность. В таблице представлены результаты по трём показателям.

Первый показатель – количество циклов чтения значений двух аналоговых портов (A0 и A1) за 1 секунду. Скрипт отображает показания за 10 секунд тестирования, для занесения в таблицу эти результаты были поделены на 10. Если трансформировать скрипт таким образом, чтобы запрашивалось значение лишь одного порта, показания удвоятся.

Второй показатель – количество циклов записи в порт за 1 секунду с переключением в состояние HIGH и обратно в LOW. Если говорить проще, сколько раз за 1 секунду можно мигнуть лампочкой (в теории, на практике всё оказалось несколько сложнее, но об этом позже).

 Третий – максимальное количество переключений состояния за 1 секунду при автоколебаниях, интегральный показатель реального быстродействия системы с отрицательной обратной связью. Для замера значений пришлось собрать простой испытательный стенд: к порту 13 подключен светодиод, а к порту A0 – фоторезистор. Когда светодиод не горит, освещённость ниже критической, система даёт команду включить светодиод. Когда светодиод горит, освещённость выше критической, система даёт команду выключить светодиод. В случае использования простого релейного регулятора возникают автоколебания, точно такие же, как при использовании релейного регулятора в алгоритме движения робоплатформы с одним датчиком по границе линии.

Перейдём к рассмотрению программных продуктов и их особенностей.

 

MicroBlocks v.0.1.27 (alpha)

microblocks.fun

MicroBlocks

На мой взгляд, самый перспективный для использования в учебном процессе и самый ожидаемый лично мной программный продукт. К сожалению, пока еще находится на стадии альфа-тестирования, и самое главное ограничение заключается в том, что беспроблемно устанавливается лишь среда на базе GeneralPurposeBlocks, не позволяющая работать дополнительно со спрайтами и со сценой (stand-alone system). Программная среда на базе “Snap!” всё ещё разрабатывается, хотя в Youtube есть впечатляющие ролики, демонстрирующие её работу. Но даже в существующем виде это уже вполне серьёзный продукт, который годится для использования во многих случаях, и обладает совершенно уникальными особенностями.

Поддерживается Micro:bit и множество других 32-разрядных микроконтроллеров, их список непрерывно растёт. К сожалению, производительности классических Arduino Uno и Mega 2560 недостаточно для работы виртуальной машины MicroBlocks, но 8-разрядные микроконтроллеры сегодня всё ещё актуальны, а завтра уже станут архаизмом.

Как сказано выше, пока ещё нет возможности работать в интерактивном режиме и создавать игровые проекты.  Но «интерактивность» в понимании «мгновенный отклик» микропроцессора уже существует. Да еще какая! Можно щёлкнуть по блоку и сразу же увидеть, как он сработал, например, появилось изображение на светодиодной матрице. И если запустить программу, все изменения при её редактировании тут же будут влиять на работу устройства!

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

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

Смена режимов работы не предусмотрена, в данном случае это один и тот же режим, а подготовка платы к использованию предполагает загрузку на неё специальной прошивки, виртуальной машины MicroBlocks. Для разных плат этот процесс осуществляется с разной степенью удобства и требует разной квалификации. Контроллер Micro:bit без проблем прошивается непосредственно из программной среды.

Готовых библиотек расширений пока не так много, но самые насущные вещи реализованы. Главное, что без проблем и с удобством можно создавать собственные библиотеки блоков. Правда, использовать классические текстовые языки программирования для этого не только не нужно, но и не получится. Графический скрипт транслируется непосредственно в базовые команды виртуальной машины MicroBlocks. Разработчики обещают добавить поддержку (с учебными целями) текстовых языков программирования (таких, как Python) в будущем.

 

MakeCode for Micro:bit

makecode.com

MakeCode

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

Поддерживает программирование лишь избранных продуктов, среди которых есть Lego Mindstorms EV3, игра Minecraft, а также симпатичный и необычный робот Wonder Cue (весьма разношёрстная подборка). Но нас сейчас интересует Adafruit Circuit Playground Express, и главное, BBC Micro:bit. По сути, в настоящий момент MakeCode – самое полнофункциональное и проработанное средство создания программ автономной работы для платы Micro:bit.

Запускается из браузера, но для операционной системы MS Windows 10 с официального сайта можно скачать дистрибутив версии, работающей без интернет-подключения. Забегая вперёд скажем, что подобный дистрибутив существует и для операционной системы Windows 7.

Специальная подготовка контроллера не нужна. Но ценой этому будет то, что удобство загрузки подготовленной программы на плату оставляет желать лучшего. Реальной интерактивности, такой, как при использовании MicroBlocks, нет и в помине. Зато существует очень забавный симулятор платы Micro:bit. И страшно даже подумать, сколько сил и времени потратили разработчики на его создание.

По мере сборки графического скрипта виртуальная плата Micro:bit, изображение которой находится сбоку, будет реагировать на наши действия: отображать текст и смайлики на светодиодной матрице, запускать подключенные периферийные устройства и т.д. Всё это позволяет использовать MakeCode для обучения даже в том случае, если реальной платы Micro:bit у нас нет, либо она единственная на весь учебный класс.

Насколько я знаю, средой MakeCode поддерживаются все существующие возможности платы Micro:bit, включая самую главную - запуск нескольких параллельных процессов. Кроме того, теперь для Micro:bit существует огромное количество всевозможных плат расширений, позволяющих подключать практически любые датчики, коллекторные и шаговые двигатели, и прочую периферию. Разработчики этих плат, как правило, не придумывают собственную визуальную среду программирования, а просто предоставляют расширение для MakeCode с дополнительными графическими блоками (правда, в некоторых случаях они всё-таки делают и то, и другое).

На информацию о том, как создавать собственные визуальные блоки с текстовым кодом (такие как в среде Espruino Web IDE, см. на рисунке ниже) и собственные расширения, я пока не натыкался, но данная возможность наверняка существует.

Визуальные блоки с текстовым кодом в Espruino Web IDE
Визуальные блоки с текстовым кодом в Espruino Web IDE

Среда MakeCode подходит для изучения языка JavaScript. Одним щелчком мыши можно переключиться на вкладку с текстовым кодом, посмотреть, как выглядит графическая программа после трансляции, при желании внести коррективы и загрузить в контроллер.

Недостаток у MakeCode тот же самый, что у MicroBlocks на базе GeneralPurposeBlocks: отсутствие спрайтов и сцены, невозможность создавать игры, использующие подключенное устройство как игровой пульт.

Зато это позволяют сделать некоторые другие программные продукты, которые в связи с объемностью материала нам придется рассмотреть в следующей публикации.

Продолжение следует.