EVIA Paradigma — визуальное программирование: перетащите блоки из палитры на холст, соедините их связями и нажмите Run. Ту же программу можно превратить в код на C (C99, C11, C17) или C++ (от C++98 до C++20) и собрать с помощью Clang или GCC, а также в код для плат Arduino и ESP32. Интерфейс программы на английском, поэтому названия меню и кнопок даны так, как они выглядят на экране.
Сам интерфейс тоже бывает на английском, русском или армянском: Настройки > Общие > Язык интерфейса. Меню, кнопки, палитра и названия на блоках меняются вместе с ним; созданный код и сообщения компиляторов остаются на английском. Изменение вступает в силу при следующем запуске EVIA Paradigma.
Вид и язык. View > Theme выбирает светлую тему IntelliJ, тёмную тему Darcula или настройку вашей системы; тема меняется сразу и запоминается. Над списком разделов можно выбрать язык этого руководства: английский, русский или армянский.
| Блок | Код | Что делает |
|---|---|---|
| Start / End | - | Где главная программа начинается и заканчивается. |
| Set | x = x + 1 | Присваивает значение переменной (или полю: this.count = 0). |
| Input | n | Запрашивает значение и сохраняет его. |
"x = " + x | Печатает значение выражения. | |
| If / Else | x > 10 | Два выхода: then и else. |
| For | i = 1; i <= 10; i = i + 1 | Выход body выполняется, пока условие верно; конец тела цикла соедините обратно с блоком For. done продолжает программу после цикла. |
| While | n > 0 | Проверяет условие перед каждым проходом. |
| Do-While | n > 0 | Выполняет тело один раз, затем проверяет. |
| Enter / Exit | имя выхода | Только внутри метода класса: где он начинается и какими способами может закончиться. |
Блоки Board (Pin Mode, Digital Write, Digital Read, Analog Read, Analog Write, Delay, Millis, UART, SPI, I2C) нужны для микроконтроллеров; см. раздел Платы Arduino и ESP32.
Значения — это числа или текст. Операторы, от низшего приоритета к высшему:
|| &&== != < <= > >= (тексты сравниваются по алфавиту)+ - (+ склеивает текст, если хотя бы одна сторона — текст)* / %- и !, скобкиТекст пишется в двойных кавычках; допустимы escape-последовательности \", \\, \n.
Условие истинно, если это ненулевое число или непустой текст.
Класс объединяет поля (данные, которые хранит каждый объект) и методы (блок-программы, работающие с этими данными). Создать класс можно через Edit > New Class, кнопкой + New class в палитре или выделив блоки и нажав Ctrl+G, чтобы превратить их в класс.
this.имя.n читается как this.n.init (кнопка + Constructor). При создании объекта его поля
сначала получают начальные значения, затем один раз выполняется init.Перетащите метод из раздела Classes палитры на холст, чтобы вызвать его. Правый щелчок по блоку или двойной щелчок позволяют выбрать метод, объект и аргументы. Блоки с одинаковым именем объекта работают с одним объектом (и его полями); у блока без имени объекта объект свой собственный. Объекты создаются при первом использовании.
Модуль (*.eviam) — это файл с классами, которые могут использовать несколько программ.
File > New Project создаёт папку со всем, что нужно программе:
MyProject/ MyProject.eviaproj настройки проекта main.evia главная программа modules/ модули классов build/ сгенерированный код (не попадает в коммиты) README.md .gitignore
Откройте проект снова через File > Open Project (выберите папку или файл .eviaproj). В проекте модули
импортируются из modules/ и экспортируются в неё, а Generate code дополнительно записывает
build/<имя>.c или .cpp. Проект запоминает свой язык.
Меню Git запускает git, установленный на вашем компьютере, и использует уже настроенный вход
(Git Credential Manager, SSH-ключ или gh auth login). EVIA Paradigma никогда не запрашивает и не хранит
пароли или токены.
git init в ветке main (новые проекты делают это сами, если git установлен).владелец/репозиторий или URL для клонирования. Create repository on GitHub
открывает github.com в браузере с уже заполненным именем; создайте пустой репозиторий и нажмите OK.Установите git с git-scm.com, если в меню написано, что его нет.
Generate code (F7) превращает всю программу в один исходный файл. Три выпадающих списка на панели инструментов (и в окне кода) определяют результат; те же варианты есть в Run > Code Language and Mode. Если изменить их в окне кода, код генерируется заново.
| Список | Варианты | Что меняется |
|---|---|---|
| Language | C99, C11, C17 C++98, C++11, C++14, C++17, C++20 |
C: struct для каждого класса и функции Class_m_method(self, ...), небольшая библиотека
времени выполнения только с теми помощниками, которые нужны программе. C++: struct для каждого класса с
функциями-членами; C++98 использует обычные указатели, C++11/14 — std::unique_ptr, C++17/20 —
std::variant и std::to_chars. |
| Flow | Structured Goto |
Structured: if/else, for, while, do/while
и switch (метки только там, где связи не укладываются в блочную структуру). Goto: каждый блок — метка,
а каждая связь — переход; ближе всего к схеме. |
| Values | Safe Fast |
Safe: числа и текст со всеми проверками интерпретатора (неопределённые переменные, деление на ноль, текст, который
не является числом, бесконечная рекурсия). Fast: простые переменные и поля double, текст только в
Print, без проверок во время выполнения. Программа, которая хранит текст в переменной, не может использовать
значения Fast; Generate code укажет, какой блок мешает. |
Каждое сочетание проверено: вывод совпадает с выводом интерпретатора (для значений Fast — у программ, которые выполняются без ошибок). Правый щелчок по блоку, методу или классу → View source code показывает код, в который он превратился, с подсветкой, на выбранном вами языке.
Окно кода умеет сохранять файл, компилировать его и запускать. Для C используется подходящий компилятор C (clang, gcc),
нужные -std= и -lm. Компилятор выбирается в Settings: Clang (clang++ / clang) или
GCC (g++ / gcc, версия 13 или новее). В Windows EVIA Paradigma может установить любой из них сам: llvm-mingw
(Clang) или WinLibs (GCC, MinGW-w64). Visual Studio не нужна.
Ещё три языка, для компьютеров и телефонов. Как и в Python, в них нет goto: при структурном потоке
получаются вложенные if/else и циклы while, а там, где соединения не
складываются в блоки (и всегда при потоке Goto), схема становится конечным автоматом: по одной ветке на блок.
Безопасные и быстрые значения работают как в C++, с выводом, сообщениями об ошибках и кодом выхода интерпретатора.
| Язык | Что получается | Что нужно |
|---|---|---|
| Java | Один файл с class Program. Собрать и запустить компилирует его javac и
запускает. Без EVIA Paradigma: java Program.java. | JDK версии 17 или новее |
| Kotlin | Один файл .kt. Собрать и запустить делает исполняемый jar с помощью kotlinc и
запускает его. | JDK и kotlinc |
| Android | Приложение: строки Print на экране, Input в текстовом поле с кнопкой OK, и кнопка Run again. Собрать делает APK; Установить на телефон ставит его через adb и запускает. | JDK, kotlinc и Android SDK |
Настройки > Java и Kotlin: JDK (находится сам по JAVA_HOME или PATH; Get скачивает Eclipse Temurin) и
kotlinc (Get скачивает компилятор JetBrains). Настройки > Android: папка SDK (SDK из Android Studio
находится сам; Скачать Android SDK... показывает лицензию Google и, если вы её принимаете, скачивает с сайта Google
платформу, build-tools и adb), идентификатор приложения (например am.evia.counter), название под значком и
телефон. На телефоне включите отладку по USB: Настройки > О телефоне, семь раз нажмите Номер сборки,
затем Для разработчиков > Отладка по USB.
EVIA Paradigma собирает приложение сама, инструментами SDK, за несколько секунд и без Gradle. Папка, которую она
пишет (build/android проекта или EVIA Projects/Android/), это ещё и обычный проект Android
Studio: File > Open и Run.
Датчики телефона. Блок Датчик телефона (группа палитры «Телефон») сохраняет показание в переменной:
ax = ACCEL_X. Он читает ACCEL_X, ACCEL_Y, ACCEL_Z (м/с²),
GYRO_X, GYRO_Y, GYRO_Z (рад/с), LATITUDE, LONGITUDE,
ALTITUDE, GPS_ACCURACY и GPS_FIX (1, когда положение известно). Run имитирует
телефон, лежащий на столе; язык Android читает настоящие датчики, а приложение, читающее положение, запрашивает
разрешение на геолокацию. Delay и Millis тоже работают в Java, Kotlin и Android. Примеры: Файл >
Открыть пример > Телефоны Android (Hello world, GPS-координаты, тест движения).
Ещё три языка создают код для микроконтроллеров. Оба используют быстрые значения (числа; текст только в Print), а Print и Input работают через последовательный порт на скорости 115200 бод.
| Язык | Платы | Чем собирается |
|---|---|---|
| Arduino | Arduino Uno, Nano, Mega 2560, Leonardo, Micro, Pro Mini; ESP32, ESP32-S2, -S3, -C3, -C6, -H2 |
Один скетч (.ino) с setup() и loop(); arduino-cli с ядрами arduino:avr
и esp32:esp32. |
| AVR C | шесть плат Arduino на AVR (ATmega328P, ATmega2560, ATmega32U4) | Bare-metal C без ядра Arduino. Пины, таймеры, ШИМ, АЦП и UART управляются через регистры микросхемы. Собирают avr-gcc и avr-libc, загружает avrdude. |
| PIC32 C | девять микросхем PIC32MX: MX1xx/2xx (PIC32MX150F128B, 250F128B, 270F256B), MX3xx/4xx (320F128H, 340F512H, 440F256H, 460F512L), MX5xx/6xx/7xx (695F512L, 795F512L) PIC32 Ethernet Starter Kit II (LED1 на RD0) и chipKIT Pro MX7 (LD1 на RG12, Ethernet) | Bare-metal C для Microchip XC32: тактирование, пины, ШИМ, АЦП, UART, SPI и I2C управляются через регистры; без Harmony и plib.
Собирает xc32-gcc, .hex создаёт xc32-bin2hex, а загружает команда на ваш выбор (по умолчанию pic32prog). Платы, которые pic32prog не умеет программировать, например PIC32MX Ethernet Starter Kit II (встроенный программатор), PICkit 4/5, ICD 4/5 и Snap, используют ipecmd от Microchip: Настройки > PIC32 > Получить MPLAB IPE устанавливает IPE из установщика MPLAB X v6.20, скачанного с microchip.com, а Программатор задаёт команду загрузки, например ipecmd -TPPKOB -P{chip} -M -F{hex} -OL. |
| STM32 C | Blue Pill (STM32F103C8), Black Pill (STM32F411CE), Nucleo-F401RE, Nucleo-F411RE, STM32F4DISCOVERY (STM32F407VG), 32F429IDISCOVERY (STM32F429ZI, светодиод LD3 на PG13) | Bare-metal C для arm-none-eabi-gcc: тактирование, пины (PA0 ... PI15), ШИМ, АЦП, USART, SPI1 и I2C1 управляются через регистры, а таблица векторов, код запуска и скрипт компоновщика находятся в самом файле; без HAL. Загружает OpenOCD через ST-Link (встроен в платы Nucleo и Discovery; для Pill нужен отдельный ST-Link V2). Те же платы принимают и скетчи Arduino с ядром STMicroelectronics: Settings > STM32 > Install устанавливает его один раз. |
Плату выбирают в списке Board рядом с языком (также в Settings). Build в окне кода компилирует программу для неё; Upload собирает и отправляет программу на плату через последовательный порт, указанный в Settings.
| Блок | Код | Что делает |
|---|---|---|
| Pin Mode | LED_BUILTIN, OUTPUT | OUTPUT, INPUT или INPUT_PULLUP (кнопка на землю при нажатии читается как LOW). |
| Digital Write | LED_BUILTIN, HIGH | HIGH для любого ненулевого значения, LOW для 0. |
| Digital Read | pressed = 4 | Сохраняет 1 (HIGH) или 0 (LOW). |
| Analog Read | level = A0 | 0..1023 на платах AVR, 0..4095 на ESP32. |
| Analog Write | 5, brightness | ШИМ, от 0 (выключено) до 255 (всегда включено). |
| Delay | 500 | Ждёт столько миллисекунд. |
| Millis | t | Сохраняет миллисекунды с начала работы программы. |
| UART Open | 9600 | Запускает последовательный порт для блоков UART с этой скоростью в бодах. |
| UART Write | 65 | Отправляет один байт (0..255). |
| UART Read | c | Сохраняет следующий принятый байт или -1, если ничего не пришло. |
| SPI Open | 1000000 | Запускает шину SPI как ведущий с этой частотой в Гц (режим 0, старший бит первым). |
| SPI Transfer | reply = 66 | Отправляет байт и сохраняет байт, пришедший одновременно с ним. |
| I2C Open | 100000 | Запускает шину I2C как ведущий с этой частотой в Гц. |
| I2C Write | 80, 0, 42 | Записывает значение в регистр устройства с этим 7-битным адресом: адрес, регистр, значение. |
| I2C Read | v = 80, 0 | Сохраняет значение регистра или -1, если устройство с таким адресом не отвечает. |
| MQTT Connect | "network", "password", "broker.example.com", 1883 | Подключается к сети и к брокеру MQTT. |
| MQTT Publish | "evia/temperature", t | Отправляет сообщение в тему: число или текст. |
| MQTT Subscribe | "evia/command" | Запрашивает у брокера сообщения этой темы (до четырёх тем). |
| MQTT Has Message | waiting = "evia/command" | Сохраняет 1, если сообщение этой темы ждёт, и 0, если нет. |
| MQTT Read | cmd = "evia/command" | Сохраняет число из следующего сообщения или -1, если ничего не пришло. |
MQTT. Имя сети, пароль, брокер и темы — это фиксированные тексты: они попадают в программу при сборке. PIC32 C управляет модулем ESP8266 или ESP32 с прошивкой AT через UART2 (RB5/RB1 на 28-выводных чипах, RF4/RF5 на остальных), поэтому Print остаётся на UART1. Arduino на плате ESP32 использует собственный WiFi платы. Запуск отвечает из брокера на вашем компьютере: публикация в тему, на которую вы подписаны, возвращает сообщение. Плата AVR отказывается от блоков MQTT (один последовательный порт, его занимает Print), FPGA тоже. Сообщение — это число, записанное так же, как его печатает Print; поскольку -1 означает ещё и «ничего не пришло», MQTT Has Message отличает настоящую -1. MQTT может идти и через собственный порт Ethernet чипов MX695F512L, MX795F512L и Ethernet Starter Kit II: выберите в настройках MQTT на PIC32 через → Ethernet, и сгенерированный файл становится приложением для проекта MPLAB X Harmony, который приносит с собой стек TCP/IP. Этот путь экспериментальный: он компилируется здесь с заглушками заголовков, но ни разу не собирался с настоящей Harmony и не запускался на плате, поэтому проверенным остаётся модуль WiFi.
MQTT через Ethernet (экспериментально). Для MX695F512L, MX795F512L и PIC32 Ethernet Starter Kit II пункт Настройки > PIC32 > PIC32 MQTT over > Ethernet делает полученный файл приложением для проекта MPLAB X Harmony: стек TCP/IP даёт Harmony, конфигурация, тактирование и main() остаются за проектом, а вы вызываете из него app_run(). Включите TCP, клиенты DHCP и DNS, драйвер Ethernet MAC и PHY платы (LAN8740 на этом наборе). Адрес выдаёт DHCP, поэтому имя сети и пароль не используются. Этот путь компилируется в проверках с заглушками заголовков, но не собирался с настоящим Harmony и не запускался на плате: проверенный путь — модуль WiFi.
Пины могут быть числами, выражениями или именами платы LED_BUILTIN, A0 ... A15;
HIGH и LOW работают в любом выражении. Эти имена нельзя использовать как переменные.
Блоки шин работают в Run и во всех трёх языках для плат. Перед использованием шину нужно открыть; адреса 7-битные, числа десятичные (80 — это 0x50). На PIC32 пины фиксированы для семейства микросхем и перечислены в начале созданного кода (встроенные UART1, SPI и I2C1). Run имитирует шины: передатчик UART соединён с его приёмником, поэтому байты из UART Write возвращаются через UART Read (и также появляются в выводе как текст), вход SPI соединён с его выходом, а по адресу 80 отвечает одно устройство I2C с 256 регистрами.
Run имитирует Arduino Uno: изменения пинов появляются в выводе в виде board [500 ms] pin 13 HIGH,
время идёт вперёд только в Delay (главное окно при этом реально ждёт, если ползунок скорости не стоит на полной
скорости), кнопка на каждом входном пине нажимается во второй половине каждых 2 секунд, а аналоговые пины читают
медленную волну 0..1023..0. Программа выполняется один раз, как будто из setup(); после этого пины
сохраняют своё состояние. В File > Open Example > Arduino Boards, ESP32 Boards, PIC32 Boards и STM32 Boards есть примеры: blink, button,
fade, analog meter, класс Led и примеры UART, SPI и I2C.
Языки для компьютера (C, C++) не могут использовать блоки Board; Generate code укажет, какой блок нужно заменить.
Наборы инструментов — это пакеты сервера EVIA (evia.am): arduino-cli, avr-gcc с avrdude, Arm GNU Toolchain, OpenOCD и OSS CAD Suite. При первом запуске установленной копии программа спрашивает, какие из них скачать; Settings > Packages and Updates (или Help > Check for Updates) показывает, что установлено и что доступно, и устанавливает, обновляет или удаляет их. Кнопки Get в Settings так же скачивают один инструмент. Каждая загрузка проверяется перед использованием, и права администратора не нужны: пакеты лежат в вашей собственной папке данных.
Новая версия EVIA Paradigma — тоже пакет: она устанавливается рядом с вашей и запускается в следующий раз (или сразу
кнопкой Restart Now). Ничего не удаляется. В командной строке: --packages, --install ID
(или --install updates) и --remove ID.
Terminal (панель инструментов или Help > Terminal) открывает настоящий терминал на последовательном порту платы (UART: порт, скорость, что отправляет Enter, локальное эхо) или на другом компьютере по SSH (пароль или ключ). У каждого сеанса своя вкладка; перед Upload закройте вкладку, так как ему нужен порт.
Ещё три языка, SystemVerilog, Verilog-2001 и VHDL (VHDL-2008), превращают ту же схему в аппаратуру. Каждый блок становится одним состоянием конечного автомата и занимает один такт. Переменные — знаковые 32-битные регистры.
| Плата | Микросхема | Частота | Доступные выводы |
|---|---|---|---|
| Digilent Nexys A7-100T | Artix-7 XC7A100T | 100 МГц | LED0-15, SW0-15, BTNC/U/L/R/D, JA-JD, USB-UART |
| Digilent Arty A7-35 / A7-100 | Artix-7 | 100 МГц | 4 светодиода, 4 переключателя, 4 кнопки, JA-JD, USB-UART |
| Digilent Basys 3 | Artix-7 XC7A35T | 100 МГц | 16 светодиодов, 16 переключателей, 5 кнопок, JA-JC, USB-UART |
| Olimex GateMateA1-EVB | GateMate CCGM1A1 | 10 МГц | LED0, BTN0, отладочный UART |
| Cologne Chip GateMate A1 evaluation board | GateMate CCGM1A1 | 10 МГц | только LED0 |
Выводы фиксируются при сборке, поэтому вывод должен быть числом или именем: LED0, SW3, BTNC, BTN0, JA1. Если на плате нет такого вывода, будет ошибка со списком имеющихся. Вывод нельзя одновременно читать и записывать.
Целые числа. Арифметика переполняется по модулю 32 бит; / и % округляют к нулю, деление на 0 даёт 0. Запуск использует числа double, поэтому 5 / 2 в Запуске равно 2.5, а на FPGA — 2. Пока не поддерживаются: классы, Input, Analog Read, SPI, I2C и текст в переменных (в Print текст работает).
Сборка и загрузка. Artix-7: Vivado в пакетном режиме или открытая цепочка (yosys, nextpnr-xilinx, Project X-Ray), выбирается в Настройки > FPGA. GateMate: yosys, nextpnr-himbaechel, gmpack. Загрузка — Vivado или openFPGALoader. Ограничения выводов лежат в первом комментарии файла, а -o в командной строке также записывает файл .xdc или .ccf.
Проверено: моделирование в сравнении с Запуском и синтез открытыми средствами. Не проверено: Vivado, openXC7 и реальные платы.
Примеры: Файл > Открыть пример > FPGA Boards.
Меню Linux собирает собственный Linux для BeagleBone Black или Raspberry Pi 5 и записывает его на SD-карту. Выберите систему сборки:
| Система сборки | Что получится | Первая сборка |
|---|---|---|
| Buildroot 2026.02 (LTS) | Небольшая система: ядро, BusyBox и выбранные пакеты | около 1 часа, 15 ГБ |
| Yocto 5.0 Scarthgap (LTS) | Полноценный дистрибутив (core-image-base или core-image-minimal) | несколько часов, около 90 ГБ |
| OpenWrt 25.12 (Image Builder) | Сетевая ОС с веб-интерфейсом (LuCI) из готовых пакетов | минуты, 3 ГБ |
| OpenWrt 25.12 (из исходников) | OpenWrt с любыми параметрами (menuconfig) | около 2 часов, 30 ГБ |
Linux > Новый образ Linux открывает окно: плата, папка (без пробелов в пути), имя хоста, пароль root, SSH-сервер, Python 3, дополнительные пакеты (по именам системы сборки). Собрать образ в первый раз скачивает исходники, затем применяет настройки и собирает; вывод идёт в окне. Menuconfig открывает терминал с меню самой системы сборки для всего остального. Записать на SD-карту показывает только SD-карты и USB-накопители, спрашивает дважды и просит ваш пароль для записи.
Всё хранится в папке: evia-linux.json (настройки) и build.sh, который можно запускать и
самостоятельно: ./build.sh all. Пароль root хранится в secrets/ и доступен только вам; в образ
попадает лишь его хеш. Без пароля root входит без пароля (Buildroot, Yocto) или OpenWrt попросит его задать.
Сборка работает в Linux (в Windows — WSL 2, на Mac — виртуальная машина с Linux). Проверить компьютер
показывает, чего не хватает, и команду для установки. На плате: BeagleBone Black загружается с карты, если при включении
держать кнопку S2; Raspberry Pi 5 загружается с неё сам. Затем Терминал подключается через UART (115200) или SSH.
В командной строке: --linux DIR --system yocto --board bbb.
Исходники как пакеты. Buildroot, Yocto (Poky и meta-raspberrypi) и OpenWrt (с Image Builder для обеих плат) —
пакеты сервера EVIA: кнопка Получить исходники в окне или Настройки > Пакеты и обновления, группа
«Linux images». build.sh берёт исходники из установленного пакета; без него скачивает те же закреплённые
файлы и проверяет их SHA-256. Сама сборка по-прежнему скачивает нужные ей компиляторы и пакеты.
| Ctrl+N | Новая программа |
| Ctrl+Shift+N | Новый проект |
| Ctrl+O | Открыть программу |
| Ctrl+S / Ctrl+Shift+S | Сохранить / Сохранить как |
| Ctrl+A | Выделить все блоки |
| Delete | Удалить выделенные блоки |
| Ctrl+G | Сгруппировать выделенные блоки в класс |
| F5 / Shift+F5 | Запуск / Остановка |
| F7 | Сгенерировать код |
| Колесо мыши | Приблизить или отдалить схему к указателю (от 25% до 300%) |
| Shift+колесо / Ctrl+колесо | Прокрутка вбок / вверх и вниз |
| Средняя кнопка + перетаскивание | Двигать холст (можно начать и с блока) |
| Ctrl+= / Ctrl+- | Приблизить / отдалить |
| Ctrl+0 / Ctrl+9 | Реальный размер (100%) / вписать схему в окно |
| Ctrl+K | Git commit |
| F1 | Это руководство |
| Shift+щелчок, рамка выделения | Выделить несколько блоков |
| Правый щелчок по блоку | Меню блока (правка, View source code, удаление ...) |
Поля кода, окно кода и редактор сообщения коммита работают с клавишами Vim (отключаются в Settings). Текст открывается в режиме вставки; Esc переключает в нормальный режим.
h j k l, w b e, 0 ^ $, gg G, %, f ti a I A o O, x, dd, cw, yy, p, u, Ctrl+R, .v, V; поиск: /текст, n N, *:w принять/сохранить, :q закрыть, :wq, :s/a/b/g, :make скомпилировать и запустить (окно кода), :vim открыть в настоящем Vim