Публикации сообщества

Александр Григорьев • 22 декабря 2018

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

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

Внимание! На сайте www.lab169.ru сделан репост этой публикации с полно-
размерными иллюстрациями и возможностью скачать все файлы проектов:

www.lab169.ru/2018/12/25/обзор-визуальных-средств-программирования-микроконтроллеров-часть-2

В прошлый раз мы обсудили особенности программ MicroBlocks и MakeCode. На повестке дня сегодня следующие визуальные среды.

  1. KittenBlock
  2. MindPlus
  3. Snap4arduino
  4. mBlock5
  5. mBlock3

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

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

Но даже если не обращаться к компьютерным играм, интерактивность очень помогает осваивать работу с микроконтроллерами. Достаточно щелкнуть по блоку "digitalWrite" мышкой, и светодиод на плате загорится. А если щелкнуть по блоку "analogRead", мы сразу увидим цифровое значение, возвращаемое аналоговым портом, к которому подключен датчик (датчик освещённости, например).

analogRead

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

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

 

KittenBlock

www.kittenbot.cc

KittenBlock

При описании этого программного продукта мне придётся упомянуть о массе "хитростей", но результат того стоит.

Текущая версия - 1.8.1 (не изменялась с момента прошлой публикации). Однако на web-сайте очень долго лежала лишь версия 1.6.5. Не так давно сайт обновился, на нём пропала информация о "старых" (но для нас более чем интересных и актуальных) продуктах компании KittenBot, зато появился инсталлятор программы KittenBlock версии 1.8.0. И не исключено, что ссылок на новые версии тоже долго не будет.

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

KittenBlock базируется на Scratch 3, при этом работает не только в Windows 10, но и в Windows 7, позволяет интерактивно взаимодействовать с некоторыми контроллерами на базе Arduino, а также с Micro:bit. Иными словами, у нас появился инструмент, позволяющий писать игры, в которых Micro:bit либо Arduino Uno с подключенными сенсорами будут играть роль игрового пульта. И писать программы автономной работы для устройств на базе этих контроллеров, само собой.

Следующая хитрость. Щелкнув по списку устройств (изначально отображается как "Нет устройства") и выбрав Arduino Uno, а затем установив соединение с нужным коммуникационным портом (щёлкнув по надписи "Не подключено"), Вы НЕ сумеете добиться того, чтобы Ваша плата управлялась интерактивно.

Uno

Но данная возможность всё-таки существует! Нужно лишь выбрать вместо Arduino Uno устройство под названием KittenBot. Собственно, именно для управления этим интересным робототехническим набором среда KittenBlock и была изначально создана. Итак, выбираем "KittenBot", нужный коммуникационный порт (который будет помечен как "UNO" или как "CH340"), а затем нажимаем кнопку "Обновить прошивку".

Firmware KittenBlock

Робоплатформа KittenBot базируется на UNO-совместимом контроллере RosBot. На палитре блоков мы видим теперь множество специфических команд, но главное, присутствуют и базовые команды работы с цифровыми и аналоговыми портами.

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

KittenBlock test1

При тестировании с платой Arduino Uno скорость чтения состояния двух аналоговых портов составила 151 цикл за 10 секунд. А вот с измерением скорости записи возникли проблемы.

Когда я тестировал одну из старых версий, я получил вполне разумный результат около 150 циклов за 10 секунд. Но среда 1.8.1 демонстрирует 1460 циклов за 10 секунд! Вспоминается старая фантастическая комедия, в которой приборная панель на космическом корабле была промаркирована следующим образом: "Разумная скорость", "Световая скорость", "Безумная скорость".

Число "1460" в данном случае говорит нам лишь об одном: программная среда на самом деле не проверяет, действительно ли плата выполнила отправленную команду, или нет. Реальная скорость выполнения команд много ниже. По результатам других тестов она не превышает 120-160 циклов записи за 10 секунд. Иначе говоря, на практике удаётся мигнуть лампочкой не более, чем 12-16 раз в секунду.

Для оценки реальной интегральной производительности системы "KittenBlock + Arduino Uno" пришлось использовать другой метод, опирающийся на измерение частоты автоколебаний, возникающих при отрицательной обратной связи. Результат - 22 переключения состояния в секунду (11 колебаний в секунду), что вполне годится для неспешной езды по линии, например. Скрипт представлен ниже.

KittenBlock test2

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

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

Как уже было сказано, подготовка контроллера к использованию в интерактивном режиме достаточно проста, хоть и необходимо помнить о некоторых тонкостях. И стандартная прошивка, и пользовательские программы на плату Micro:bit грузятся быстро и просто.

Процесс создания собственных расширений для среды KittenBlock еще предстоит освоить. Но уже сейчас это неплохой инструмент для изучения текстового программирования контроллеров Arduino с помощью языка Wire (по сути это диалект языка C). При сборке графического скрипта мы не только сразу видим изменения в тексте создаваемой программы, её можно нажатием мыши загрузить в Arduino IDE для дальнейшего редактирования.

Достаточно важно с точки зрения изучения языка Wire то, что разработчики KittenBlock не стали идти по пути неоправданного упрощения. В своих программах необходимо явно указывать нужный режим работы того или иного порта ("Вывод режим INPUT/OUTPUT/INPUT_PULLUP"), а также скорость работы последовательного соединения. Все эти требования обусловлены использованием среды Arduino IDE, об этом мы будем говорить чуть подробнее, когда зайдёт речь о среде mBlock3 с расширением AdvancedArduino.

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

А ещё благодаря разработчикам компании KittenBot у нас есть возможность загрузить дистрибутив MakeCode for Micro:bit, работающий без интернет-соединения под управлением операционной системы MS Windows 7.

kittenbot.cc/software

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

 

MindPlus

www.mindplus.cc

MindPlus

ОЧЕНЬ китайская программа, продукт компании DFRobot. Этот производитель предлагает массу интересных товаров. И "китайское" в данном случае означает качественное, поскольку это то, что китайцы делают для себя, а не для всего остального мира.

Когда Вы зайдете на сайт MindPlus, не пугайтесь и не ищите кнопку перевода на русский язык, просто скачайте дистрибутив (этот квест будет совсем несложен). После запуска инсталлятора нужно будет выбрать английский язык. После запуска программы тоже, и это будет чуть сложнее (из окна выбора устройств выйти и нажать на значок с шестерёнкой).

MindPlus eng

Текущая версия программы - 1.5.0, раньше на сайте лежала версия 1.2.1, и результаты замера скорости работы именно этой старой версии вошли в таблицу в первой части обзора. Новая таблица с результатами и новой и старой версии в конце статьи.

MindPlus также базируется на Scratch 3 и позволяет создавать для плат Arduino Uno и Micro:bit программы для работы в интерактивном и в автономном режимах.

После того, как Вы настроили язык, подключить плату Arduino Uno будет совсем несложно. Следует щёлкнуть по значку "Extensions" в левом нижнем углу, выбрать вкладку "Board", затем "Arduino Uno". И как только Вы укажете коммуникационный порт ("Connect device", порт, помеченный как UNO или CH340), Вы увидите, что MindPlus попытается соединиться с платой, и спустя несколько секунд самостоятельно начнёт загрузку собственной прошивки (этот процесс отображается над областью Сцены). Пожалуй, с точки зрения удобства подготовки платы Arduino к использованию, всё реализовано наилучшим образом.

MindPlus firmware

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

О скорости работы. MindPlus показывает отличные результаты при чтении показаний датчиков, и это позволяет с успехом использовать его для программирования различных игр. За 10 секунд происходит 322 цикла чтения состояния двух аналоговых портов!

MindPlus test1

Но вот со скоростью записи всё грустно. За 10 секунд удаётся мигнуть светодиодом всего лишь 46 раз. Ужасающе плохой результат. Ни о какой программе езды по линии в интерактивном режиме управления робоплатформой речи не идёт (разве что о программе переползания по линии). Интегральный показатель - 8 переключений состояния в секунду при автоколебаниях. Но даже такой скорости работы более чем достаточно для того, чтобы проверить, загорится ли светодиод, если щелкнуть мышкой по графическому блоку, изменяющему состояние порта.

MindPlus test2

Предоставляемых разработчиками расширений достаточно много, и хотя все они предназначены для работы с продукцией компании DFRobot, могут использоваться и с товарами других производителей. Например, датчик температуры DHT11/22 работает одинаково, независимо от того, кем именно он произведён.

Возможность изучать языки текстового программирования Wire и Python тут тоже присутствует, хотя на мой взгляд, у MindPlus в этом плане больше шероховатостей, чем у KittenBlock. Кстати, оба программных продукта пока не позволяют запускать несколько параллельных процессов на Micro:bit (надеюсь, Вы помните, что MakeCode и MicroBlocks умеют это делать, и насколько это важно).

Обзор программы MindPlus можно было бы закончить словами: "Несмотря на недостатки, отлично подходит для программирования игр, в остальных случаях лучше всё-таки выбрать что-то иное". Однако существует один дополнительный неожиданный аспект, который нельзя не учитывать, когда мы говорим о MindPlus. Эта программа использует для коммуникации с платой Arduino один из вариантов протокола Firmata, а именно этот протокол требуется для работы уникальному продукту в нашем обзоре - среде Snap4arduino.

 

Snap4arduino

snap4arduino.rocks

Snap4arduino

С точки зрения задачи создания программ автономной работы для микроконтроллеров возможности этой графической среды очень скромны. Да действительно, получается преобразовать графический скрипт в текстовой скетч, а потом найти его на диске и загрузить в Arduino IDE. И только. Никаких проработанных библиотек для подключения разнообразных датчиков и исполнительных устройств, присутствует лишь минимальная функциональность. Даже последовательное соединение использовать нельзя, а как без этого отлаживать программы? По сути, таким образом мы можем создать лишь заготовку будущего проекта, которую потом придётся "дорабатывать напильником".

Однако у среды Snap4arduino есть неоспоримое достоинство: идеальная, скоростная и надежная работа с микроконтроллерами в интерактивном режиме. И при чтении состояния портов, и при их изменении. Для проектов, в которых необходима достаточная скорость работы с большим количеством портов, среда Snap4arduino совершенно незаменимый инструмент.

Snap4arduino test1

Есть у программы и огромный недостаток: для подготовки платы необходимо загрузить на нее прошивку StandartFirmata с помощью того же Arduino IDE.

"Хардкорные ардуинщики" лишь снисходительно улыбнутся, прочитав такое. "Вот ведь проблема!" Но это не отменяет того факта, что для большинства начинающих это действительно может оказаться непреодолимым препятствием. И уж тем более для учеников начальной школы. Особенно когда нет возможности прошить плату один раз и навсегда. Ведь достаточно загрузить на нее альтернативную программу, и процедуру прошивки придётся повторять.

Но теперь появился выход: оказывается, после того, как мы прошьём плату Arduino Uno в среде MindPlus, становится возможно работать и в среде Snap4arduino!

Таким образом, программы MindPlus и Snap4arduino представляют собой отличную "связку", хорошо работают вместе, дополняя возможности друг друга.

Среда Snap4arduino работает чрезвычайно быстро с платой, на которую загружена прошивка StandartFirmata, и медленнее (но всё равно очень быстро) с платой, на которую загружена прошивка MindPlus, и в режиме чтения, и в режиме записи. Парадоксальным образом прошивка MindPlus ничуть не ухудшает общую интегральную производительность системы. Конкретные цифры можно посмотреть в таблице.

Snap4arduino test2

Нужно сказать, что всё вышеизложенное даёт основания для уверенности в том, что проблемы со скоростью записи в среде MindPlus будут скоро устранены.

 

mBlock5 for PC

www.mblock.cc/mblock-software

mBlock5

Разработка компании MakeBlock, новая версия (5.0.0-RC) легендарной программы mBlock, теперь на базе Scratch 3. Чрезвычайно ожидаемый многими продукт, который этих ожиданий пока так и не оправдал.

В настоящий момент позволяет программировать лишь контроллеры Arduino Uno и Mega2560 (но лишь оригинальные Uno и Mega2560) и Micro:bit, но лишь для работы в автономном режиме. Поддержку интерактивного режима обещают.

Для чего пока действительно подходит mBlock5, это для программирования собственных робототехнических наборов компании MakeBlock: mBot, mBot Ranger, Neuron и особенно, Codey Rocky. Причём последний имеет забавную разъёмную конструкцию из головы (Codey) и шасси (Rocky), базируется на ESP32, и при создании программ есть возможность использовать несколько параллельных процессов.

 

mBlock 3 for PC

www.mblock.cc/mblock-software

mBlock3

Текущая версия 3.4.11, и таковой, судя по всему, и останется. Продукт уже достаточно старый, базируется на Scratch 2, и в этом есть как свои недостатки, так и свои достоинства.

Скорость работы маловата, но в большинстве случаев её хватает (чтение - 14,4 цикла в секунду, изменение - тоже 14,4 цикла в секунду). Если проект предполагает исключительно чтение состояния и только лишь одного сенсора - вообще нет проблем.

mBlock3 test1

Интегральная производительность на минимально приемлемом уровне (16 переключений состояния в секунду).

mBlock3 test2

Это ПЕРВАЯ визуальная среда, в которой стало возможно использовать и интерактивный режим, и режим создания программ автономной работы ("Arduino mode"). Именно для среды mBlock3 к настоящему моменту написано максимальное количество разнообразных методических материалов, а также разнообразных расширений, некоторые из которых трансформируют продукт до неузнаваемости.

mBlock3 с современными 32-разрядными контроллерами работать (считается, что) неспособен, и в настоящий момент представляет собой реализацию идеи "с минимальными усилиями выжать из Arduino Uno почти максимум". А это значит, что программная среда mBlock3 годится и для знакомства с платформой Arduino, и для того, чтобы создавать на базе Arduino Uno проекты, значительно превышающие по сложности основную массу тех, что наводнили Youtube и руководства по программированию Arduino IDE.

Здесь следует упомянуть об одном принципиально неустранимом недостатке сочетания "Scratch+Arduino". Восьмиразрядные платы Arduino имеют существенно меньшую производительность, чем любой компьютер, на котором "крутится" Scratch, а это значит, что поддержку всех возможностей настолько высокоуровневого языка как Scratch на платформе Arduino обеспечить просто не получится. Мы можем составлять программы с использованием блочного языка Scratch. Но вместо списков нам придется создавать массивы, и придумывать для этого специальные блоки. Вместо универсальной переменной с динамической типизацией, которая может хранить и строку, и целое число, и действительное число, нам придётся использовать специальные придуманные самостоятельно блоки для создания типизированных переменных (byte, int, float).

Единственный способ радикального преодоления вышеописанной проблемы - повышение производительности микроконтроллеров и отказ от языков низкого уровня в пользу таких, которые обладают теми же самыми свойствами, что язык Scratch (например, возможность работы со списками, как в Python). Что мы можем сделать пока? До тех пор, пока жизнь заставляет использовать низкоуровневые языки (в том числе при обучении детей), хотя бы немного попытаться нивелировать их недостатки. Ведь за высокоуровневыми языками будущее! Программирование на языках низкого уровня тоже будет использоваться. Но ОЧЕНЬ редко и лишь ОЧЕНЬ узкими специалистами.

"Плохая" (условно) новость: чтобы перейти к "продвинутому" программированию микроконтроллеров Arduino в среде Scratch язык Wire учить придётся. Хорошая новость заключается в том, что теперь его не требуется зубрить! Требуется просто понимание особенностей языка: чем локальная переменная отличается от статической или глобальной, например. Или что произойдёт, если переменной типа byte присвоить значение 255, а потом увеличить её значение ещё на единицу. Кстати, для ответов на подобные вопросы незачем штудировать толстенные фолианты, достаточно посетить сайт arduino.ru, раздел "Программирование".

arduino.ru/Reference

Именно для нивелирования недостатков низкоуровневого языка Wire было создано расширение для среды mBlock 3, которое называется AdvancedArduino. И до тех пор, пока мы в нашей стране не перейдём поголовно к использованию в процессе обучения контроллеров, подобных Micro:bit, Calliope, Adafruit Circuit PlayGround Express и т.д., это расширение будет позволять детям извлекать из программирования удовольствие и пользу.

Итак, сегодня я хочу рассказать не просто о программе mBlock3, а о связке  "mBlock3 + AdvancedArduino Extension".

Процесс установки расширения AdvancedArduino чрезвычайно прост и описание его по ссылке ниже.

www.lab169.ru/mblock/advanced-arduino-extension-v1-0/rus

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

www.lab169.ru/mblock/advanced-arduino-extension-c-v

Первая версия расширения отличается от всех последующих тем, что в ней отсутствует команда явного переключения режима работы порта из состояния "вход" (INPUT) в состояние  "выход" (OUTPUT) или в состояние "вход с подтягиванием к высокому уровню" (INPUT_PULLUP). Опыт показал, что операция переключения режима работы является базовой, критически важной для понимания принципов работы микроконтроллера, и полезно, если дети будут с самого начала использовать эту команду в явном виде, поскольку это требуется средой Arduino IDE. А среда mBlock перестанет ошибаться, когда мы начнём использовать номер порта в качестве параметра.

Sample4

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

 Самая свежая версия расширения "AdvancedArduino" в настоящий момент - 2.5, и она включает в себя (помимо заголовка) 10 блоков, работающих как в интерактивном режиме, так и в режиме "Arduino mode" (базовые блоки из расширения "Arduino", но исправленные для устранения ошибок), 1 блок, который можно использовать как в одном, так и в другом режиме ("pinMode", в интерактивном режиме никак не влияет на работу программы, mBlock сам при необходимости переключает порт в другой режим), и 57 блоков, которые следует использовать лишь в режиме "Arduino mode".

Demo

На любой компьютер с выходом в интернет можно буквально за несколько секунд добавить расширение AdvancedArduino при помощи менеджера расширений среды mBlock3 (не забывайте о наличии поля Search, очень помогающего быстро найти то, что нужно). Кроме того, если возникают вопросы с использованием того или иного блока, в любой момент времени можно обратиться к примерам, воспроизвести их по образцу, либо скачать целиком в готовом виде и проверить, как они работают. Для этого не обязательно запоминать названия сайтов, достаточно в том же менеджере расширений выбрать AdvancedArduino (в списке доступных или в списке установленных расширений) и щёлкнуть по ссылке "More Info". Страница с примерами откроется в окне браузера.

More Info

Что же становится доступным после установки? Использование переменных различных типов, массивов, произвольных функций, графических блоков, включающих фрагменты текстового кода, процессов, запускаемых в фоновом режиме и по расписанию, создание процедур обработки аппаратных прерываний, и т.д. Всё это вплотную приближает связку "mBlock3+AdvancedArduino" к профессиональным системам программирования по набору предоставляемых возможностей.

Bit piano

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

 

Приложение.

Таблица результатов тестирования скорости работы Scratch-подобных программных сред.

Название

Чтение

Запись

Интегральный тест

KittenBlock 1.8.1

15,1

146

22

MindPlus 1.2.1

18

4,4

7

MindPlus 1.5.0

32,2

4,6

8

Snap4arduino 1.2.7
(StandartFirmata)

86

28,6

41

Snap4arduino 1.2.7
(MindPlus Firmata)

45,4

22

42

mBlock 3.4.11

14,4

14,4

16

 

Внимание! На сайте www.lab169.ru сделан репост этой публикации с полно-
размерными иллюстрациями и возможностью скачать все файлы проектов:

www.lab169.ru/2018/12/25/обзор-визуальных-средств-программирования-микроконтроллеров-часть-2

Кол-во комментариев: (5)

Юрий Винницкий
На всякий случай: вторично (! подчеркиваю, первое размещение всегда на Новаторе))) разместил статью Александра у нас на сайте https://www.lab169.ru/2018/12/25/обзор-визуальных-средств-программирова… Там лучше видно иллюстрации и есть все файлы тестовых скриптов.
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии
  • Юрий Винницкий
    Кстати, тема была замечательно представлена Александром Григорьевым на городском семинаре "Scratch-подобные визуальные среды программирования микроконтроллеров: обзор, сравнение, расширение возможностей, опыт использования" https://clck.ru/ExPkP Нам вообще нравятся традиционные декабрьские семинары, проходящие в 169-ой. В основном рассматриваются очень практикоориентированные вопросы, по времени - кто только "посмотреть", уходит через 2 часа, кому интересно... ну, иногда мы и на 6 часов засиживаемся с чаем, пирожками и обсуждениями. Присоединяйтесь, информация всегда заранее висит на http://spospb.blogspot.com
  • Войдите или зарегистрируйтесь, чтобы оставлять комментарии