Документация Engee
Notebook

Генерация кода для Arduino (мигающий светодиод)

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

В этом примере мы покажем, как в Engee можно сгенерировать программный код для Arduino из графической модели на примере одной из самых простых задач в схемотехнике. Создадим модель, которая будет мигать "бортовым" светодиодом платформы Arduino с некоторой заданной частотой.

Введение

Решени задачи переноса модели на аппаратную платформу, изложенное в этом примере, можно разбить на несколько шагов:

  1. Создание или изменение модели Engee
  2. Описание интерфейса модель-Arduino
  3. Скачивание папки с проектом и загрузка на платформу через Arduino IDE

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

Подготовка платформы

Для этого примера нам потребуется только Arduino-совместимая платформа (Uno, Leonardo, Iskra и другие) и подходящий у ней шнур USB.

Также нужно будет установить на ваш компьютер среду Arduino IDE, найти и поставить дополнительные драйверы (если необходимо) и подключить имеющуюся плату через порт USB.

image_2.png

Поиск и установка драйверов для соединения с внешним оборудованием обычно требует некоторых усилий. Приведенный выше драйвер должен позволить вам работать с Arduino Uno, Arduino Leonardo и со многими другими схожими с ними платами, например Iskra Neo. Тем не менее, в случае возникновения любых трудностей рекомендуем обратиться к справочным статьям или в сообщество Engee за помощью.

Описание модели

Мы будем генерировать код из модели blink.engee.

На каждом шаге, она выполняет описанные в ней вычисления и возвращает два значения:

  1. out_LED_BUILTIN – состояние светодиода (изначально равно 1, с каждым циклом меняется на "противоположное"),
  2. param_WAIT_MS – постоянно возвращаемое значение 500 (количество миллисекунд между двумя обращениями к коду нашей модели).

image_2.png

Одним из условий генерации кода является использование в модели решателя с постоянным шагом.

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

Генерация кода

Получить код для этой модели можно, нажав кнопку в правом верхнем углу рабочего пространства Engee (тогда нужно будет перенести папку blink_code внутрь папки sketch_blink_custom).

В этой демонстрации мы предлагаем сделать это при помощи следующей команды:

In [ ]:
engee.generate_code( "$(@__DIR__)/blink.engee",
                     "$(@__DIR__)/sketch_blink_custom/blink_code" )
Out[0]:
"Created directory - /user/start/examples/codegen/arduino_blink/sketch_blink_custom/blink_code"

В итоге, в каталоге sketch_blink_custom повяляется папка blink_code, в которой мы находим .c и .h файлы с кодом нашей системы.

Файлы проекта

В нашем проекте только одна модель. Из сгенерированных файлов нам нужны будут только файлы с кодом этой модели: исходный код blink.c и заголовочный файл blink.h.

Стоит обратить внимание на структуру файлов и каталогов проекта:

image_2.png

  • файл 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 к себе на локальный компьютер. Архивирование и скачивание можно осуществить одним действием контекстного меню.

image_2.png

Распаковав полученный архив, вы найдете в нем файл sketch_blink_custom.ino, который можно открыть в Arduino IDE.

image_2.png

Вы получили готовый проект, открытый в Arduino IDE, который осталось отправить на целевую платформу при помощи кнопки "Upload".

image.png

Типичный результат запуска примера показан на следующем видео:

20240126_122454_2_30fps.GIF

Заключение

Работа с низкоуровневым кодом обычно требует некоторых технических навыков и дополнительных манипуляций.

Кроме разработки модели вам нужно будет, как минимум:

  • создать интерфейс между моделью Engee и функциями Arduino,
  • скачать проект и запустить его на локальной, целевой платформе.

При реализации отдельных прикладных задач могут возникнуть и более сложные проблемы – например, соотнесение скорости работы модели и тактовой частоты процессора Arduino.

Однако оптимизированный вами рабочий процесс, выстроенный в Engee и подходящий для ваших нужд, позволит сэкономить много сил в сложном проекте, автоматизировав многие рутинные действия:

  • синхронизация кода проекта в соответствие с математическими моделями,
  • создание наглядной документации – в Engee вы можете автоматически, при помощи команд, добавить в скрипты фотографии схем и выходные графики и сгенерировать отчет в HTML или PDF,
  • и значительно упростить полунатурное тестирование.

Блоки, использованные в примере