Генерация кода для Arduino (мигающий светодиод)¶
Платформа Arduino сегодня является самой распространённой платформой для учебной робототехники, автоматизации простых процессов. Она используется для макетирования во множестве прикладных областей.
В этом примере мы покажем, как в Engee можно сгенерировать программный код для Arduino из графической модели на примере одной из самых простых задач в схемотехнике. Создадим модель, которая будет мигать "бортовым" светодиодом платформы Arduino с некоторой заданной частотой.
Введение¶
Решени задачи переноса модели на аппаратную платформу, изложенное в этом примере, можно разбить на несколько шагов:
- Создание или изменение модели Engee
- Описание интерфейса модель-Arduino
- Скачивание папки с проектом и загрузка на платформу через Arduino IDE
В процессе модельно-ориентированного проектирования мы стараемся сосредоточить все усилия на первом этапе – моделировании алгоритма, который будет перенесен на Arduino. Этап настройки интерфейса требует очень редкого вмешательства, а генерации кода и его загрузка на целевую платформу, пусть и не автоматизирована, но не включает никаких сложных операций.
Подготовка платформы¶
Для этого примера нам потребуется только Arduino-совместимая платформа (Uno, Leonardo, Iskra и другие) и подходящий у ней шнур USB.
Также нужно будет установить на ваш компьютер среду Arduino IDE, найти и поставить дополнительные драйверы (если необходимо) и подключить имеющуюся плату через порт USB.
Поиск и установка драйверов для соединения с внешним оборудованием обычно требует некоторых усилий. Приведенный выше драйвер должен позволить вам работать с Arduino Uno, Arduino Leonardo и со многими другими схожими с ними платами, например Iskra Neo. Тем не менее, в случае возникновения любых трудностей рекомендуем обратиться к справочным статьям или в сообщество Engee за помощью.
Описание модели¶
Мы будем генерировать код из модели blink.engee
.
На каждом шаге, она выполняет описанные в ней вычисления и возвращает два значения:
out_LED_BUILTIN
– состояние светодиода (изначально равно 1, с каждым циклом меняется на "противоположное"),param_WAIT_MS
– постоянно возвращаемое значение500
(количество миллисекунд между двумя обращениями к коду нашей модели).
Одним из условий генерации кода является использование в модели решателя с постоянным шагом.
Стоит также иметь в виду, что не из всех блоков технически возможно (и даже целесообразно) получить код. Перечень допустимых блоков все же очень большой, но всегда полезно свериться с документацией по генератору кода Engee.
Генерация кода¶
Получить код для этой модели можно, нажав кнопку в правом верхнем углу рабочего пространства Engee (тогда нужно будет перенести папку blink_code
внутрь папки sketch_blink_custom
).
В этой демонстрации мы предлагаем сделать это при помощи следующей команды:
engee.generate_code( "$(@__DIR__)/blink.engee",
"$(@__DIR__)/sketch_blink_custom/blink_code" )
В итоге, в каталоге sketch_blink_custom
повяляется папка blink_code
, в которой мы находим .c
и .h
файлы с кодом нашей системы.
Файлы проекта¶
В нашем проекте только одна модель. Из сгенерированных файлов нам нужны будут только файлы с кодом этой модели: исходный код blink.c
и заголовочный файл blink.h
.
Стоит обратить внимание на структуру файлов и каталогов проекта:
- файл
sketch_blink_custom.ino
содержит описание интерфейса Модель-Arduino, - каталог уровня
sketch_blink_custom
должен называться так же, как и файл*.ino
(требования Arduino IDE), - каталог
blink_code
содержит файлы со сгенерированным кодом, которые мы будем включать в файл*.ino
.
Интерфейс Модель-Arduino¶
Интерфейс между портами нашей модели и точками входа в разные функции Arduino описан в файле sketch_blink_custom.ino
. Предлагаем вам открыть его прямо в Engee и изучить его содержимое.
В этом коде реализован бесконечный цикл, в котором запускается сгенерированный код модели. выходные значения помещаются в структуру blink_Y
, после чего каждое значение передается нами в нужную функцию из стандартной библиотеки Arduino.
Перенос модели на Arduino¶
Осталось упаковать каталог с демонстрацией в архив и скачать его из файлового менеджера Engee к себе на локальный компьютер. Архивирование и скачивание можно осуществить одним действием контекстного меню.
Распаковав полученный архив, вы найдете в нем файл sketch_blink_custom.ino
, который можно открыть в Arduino IDE.
Вы получили готовый проект, открытый в Arduino IDE, который осталось отправить на целевую платформу при помощи кнопки "Upload".
Типичный результат запуска примера показан на следующем видео:
Заключение¶
Работа с низкоуровневым кодом обычно требует некоторых технических навыков и дополнительных манипуляций.
Кроме разработки модели вам нужно будет, как минимум:
- создать интерфейс между моделью Engee и функциями Arduino,
- скачать проект и запустить его на локальной, целевой платформе.
При реализации отдельных прикладных задач могут возникнуть и более сложные проблемы – например, соотнесение скорости работы модели и тактовой частоты процессора Arduino.
Однако оптимизированный вами рабочий процесс, выстроенный в Engee и подходящий для ваших нужд, позволит сэкономить много сил в сложном проекте, автоматизировав многие рутинные действия:
- синхронизация кода проекта в соответствие с математическими моделями,
- создание наглядной документации – в Engee вы можете автоматически, при помощи команд, добавить в скрипты фотографии схем и выходные графики и сгенерировать отчет в HTML или PDF,
- и значительно упростить полунатурное тестирование.