Глава 2. Установка и настройка программного обеспечения
Программируемый контроллер IoT ESP-JS-AR построен на базе модуля ESP32 WROVER, в связи с чем, обладает рядом более продвинутых функциональных возможностей, по сравнению с классическими Arduino-контроллерами – это и увеличенная вычислительная мощность, и дополнительные интерфейсы, а также более сложная архитектура самого контроллера. Краткие характеристики модуля приведены ниже:
-
Wi-Fi 802.11 b/g/n до 150 Мбит/с
-
Bluetooth classic BR/EDR + BLE v.4.1
-
Интерфейсы: UART, SPI, SDIO, I2C, SD-карта, I2S, АЦП, ЦАП,GPIO и др.
-
Протоколы: IPv4, IPv6, SSL, TCP/UDP/HTTP/FTP/MQTT
-
Рабочее напряжение питания: 2,3…3,6 В
-
Средний потребляемый ток: 80 мA
-
Рабочий температурный диапазон: -40°C…85°C
Данный модуль относится к семейству модулей ESP32, нацеленных на применение во встраиваемых решениях, которые в настоящее время широко развиваются в рамках концепции «Интернета Вещей». Как следствие, существует множество способов и сред разработки, позволяющих программировать сами модули семейства ESP32. Однако, надо понимать, что функционал контроллера ESP-JS-AR (в состав которого входит модуль ESP 32 WROVER) значительно расширен, по сравнению с базовыми возможностями модуля. В связи с этим, необходимо помнить, что если возникнет потребность программирования данного контроллера из произвольной среды разработки, то нет никакой гарантии, что удастся использовать весь функционал контроллера, либо что вообще получится это сделать. Применительно к контроллеру ESP-JS-AR, производителем заявляется совместимость со средой разработки Arduino IDE (при условии подключения дополнительных библиотек), а также операционной системой Mongoose OS с инструментом разработки mos (так же при использовании дополнительных библиотек). Рекомендуемые языки программирования для работы с контроллером ESP-JS-AR: С/С++ и JavaScript.
Настройка среды разработки Arduino IDE
Для работы с контроллером ESP-JS-AR в среде разработки Arduino IDE требуется установить на ПК "десктопную" версию Arduino IDE (рекомендуется версия не выше 1.8.19), а также добавить в нее поддержку
плат семейства ESP32 (рекомендуется версия 1.0.2) (см. рисунок 2.1) из сторонней библиотеки (например: https://dl.espressif.com/dl/package_esp32_index.json):

Рисунок 2.1. Добавление в Arduino IDE поддержки семейства плат ESP32
После добавления пакета поддержки плат, во вкладке "Инструменты" требуется выбрать тип платы – "ESP32 Wrover Module", а также выбрать параметр "Flash mode" – "DIO". Затем необходимо указать номер COM-порта, под которым подключенное устройство определилось в системе. В результате, параметры для работы с контроллером будут выглядеть следующим образом (Рисунок 2.2):

Рисунок 2.2. Настройки среды Arduino IDE для программирования модуля ESP32 Wrover
На этом этапе среда разработки готова к взаимодействию с модулем ESP32 Wrover, однако, только в пределах его базовой функциональности. Поскольку контроллер ESP-JS-AR существенно расширяет базовый функционал модуля, то необходимо интегрировать в среду разработки Arduino IDE библиотеку для поддержки полного функционала контроллера. Такой библиотекой является библиотека JsAr, предоставляемая производителем контроллера. Библиотеку можно найти на официальном сайте компании, Аppliedrobotics.ru, в разделе "Учебные материалы" или с официального GitHub компании: https://github.com/orgs/AppliedRobotics/. После успешной интеграции библиотеки в среду разработки, во вкладке "Примеры" появится большое количество примеров по работе с контроллером ESP-JS-AR, раскрывающих его особенности (Рисунок 2.3):

Рисунок 2.3. Состав примеров библиотеки JsAr
Basic **– вкладка содержит базовые примеры по работе с аналоговыми и цифровыми портами.
DriversMotorsKeys – вкладка содержит примеры по работе с подключаемыми моторами, настройке PID-регуляторов, работе с энкодерами.
Dynamixel* – вкладка содержит примеры по работе с Dynamixel-совместимыми устройствами.
Expander – вкладка содержит примеры по работе с расширителем GPIO.
Interfaces – вкладка содержит примеры по работе с различными интерфейсами, расположенными на контроллере.
Power – пример содержит в себе настройку UVLO, т.е. можно задавать порог напряжения на включение и выключение с учетом гистерезиса.
Update – скетч для обновления прошивки расширителя GPIO. Файл прошивки уже встроен в библиотеку. Таким образом, для обновления до последней версии необходимо установить последнюю версию библиотеки и загрузить скетч в контроллер.
При возникновении каких-либо дополнительных вопросов, всегда можно обратиться к примерам и узнать о возможности его решения.
Для корректного компилирования скетчей необходимо установить, либо обновить до последней версии библиотеку DxlMaster, даже в том случае, если использование Dxl шины не предполагается.
Настройка среды разработки Mongoose OS
Mongoose OS - это среда разработки управляющих программ, в данном случае - прошивок для устройств «Интернета Вещей». Данная среда разработки поддерживает большое количество платформ «Интернета Вещей», а также адаптирована для применения с современными популярными аппаратными платформами, основанными на ESP32 и ESP8266. Из особенностей можно выделить поддержку разработки на JavaScript, а также C/C++.
Для облегчения знакомства с контроллером был разработан ряд примеров, раскрывающих особенности OS. Данные примеры можно скачать либо с официального сайта разработчика (appliedrobotics.ru раздел
«Учебные материалы»), либо с официального GitHub компании (https://github.com/AppliedRobotics ).
Структура примеров аналогична предлагаемым в Arduino IDE, отличием являются только особенности самой среды разработки – все используемые библиотеки, в отличие от Arduino IDE, подгружаются самой средой при компилировании. Таким образом, для облегчения вхождения в разработку под Mongoose OS рекомендуется использовать готовые примеры, а затем их модифицировать, нежели создавать проекты с нуля (описание примеров будет показано далее).
Перед началом работы в Mongoose OS рекомендуется пройти обучение на сайте производителя (https://mongoose-os.com/docs/mongooseos/quickstart/setup.md ).
Для начала работы с данной средой необходимо сделать следующее:
-
Создать папку "mos" в корне диска С:.
-
Скачать в эту папку файл "mos.exe" c официального сайта разработчика (https://mongoose-os.com/downloads/mos-release/win/mos.exe).
-
Запустить скачанный файл (рекомендуется использовать Google Chrome). После запуска откроется окно браузера со средой разработки (Рисунок 2.4):

Рисунок 2.4. Окно среды разработки Mongoose OS
В верхней части окна во вкладке "Choose port" необходимо выбрать COM-порт, под которым в системе идентифицировался контроллер, а во вкладке "Choose board" выбрать тип микроконтроллера, который установлен в контроллере – в случае контроллера ESP-JS-AR, это ESP32 (Рисунок 2.5):

Рисунок 2.5. **Элементы настроек среды разработки Mongoose OS
После выполнения данных манипуляций среда разработки готова к использованию.
Краткое описание структуры проекта в среде Mongoose OS
Для создания проекта в среде Mongoose OS необходимо сформировать файл "mos.yml" или использовать готовый файл проекта. Расположить его нужно в корневой папке, указанной ранее.

Рисунок 2.6. Командная строка среды разработки Mongoose OS
Файл "mos.yml" содержит информацию об авторе проекта, его описание и служебную информацию для работы кода. В большинстве случаев типовое содержание файла "mos.yml" соответствует показанному на рисунке 2.7:

Рисунок 2.7. Содержимое файла mos.yml
Основной код для проекта должен находиться в каталоге.
Папка "src", если для написания кода используется C (Рисунок 2.8).

Рисунок 2.8. Структура каталога для разработки на С в среде разработки Mongoose OS
Папка "fw", если для написания кода и спользуется JavaScript (Рисунок 2.9).

Рисунок 2.9. Структура каталога для разработки на JavaScript в среде разработки Mongoose OS
Краткая инструкция по работе в среде Mongoose OS
Среда разработки Mongoose OS **является интерфейсом онлайн-компилятора. В результате чего, функционал основного рабочего окна минимизирован и предназначен для компиляции уже готового проекта (рисунок 2.10):

Рисунок 2.10. Описании окон среды разработки Mongoose OS
Для сборки и загрузки в контроллер управляющей программы необходимо:
-
Поместить готовый проект в папку "mos".
-
В интерфейсе, используя команду cd, перейти в папку с проектом, например: cd c:/mos/app1.
-
Командой mos build* выполнить сборку.
-
При успешной сборке загрузка в плату выполняется командой mos flash.
-
Контроллер (в случае предусмотренного соответствующего функционала) будет выводить данные в окно консоли устройства.
Для написания или редактирования кода проекта рекомендуется использовать IDE, например: PyCharm, текстовый редактор (Sublime) и др.
Описание примеров по работе с контроллером ESP-JS-AR
В архиве "mgos-jsar-examples" содержатся примеры как на языке "С", так и на JavaScript. Структура каталогов и описание содержимого показана в таблицах, приведенных ниже. Аналогичные примеры содержатся в библиотеке для Arduino IDE.
| C:\MOS\MGOS-JSAR-EXAMPLES-MASTER\JAVASCRIPT |
|---|
| Basic | Каталог примеров простейшего функционала контроллера | |
|---|---|---|
| AnalogRead | Чтение аналогового порта | |
| AnalogWrite_PWM | Управление ШИМ сигналом | |
| BareMinimum | Шаблон для написания скетча | |
| Blink | Пример управления красным светодиодом | |
| DigitalRead | Чтение состояния цифровой линии | |
| DigitalWrite | Управление цифровым сигналом | |
| DriversMotorsKeys | ||
| Keys | ||
| KeysAdvanced | ||
| KeysPWM | ||
| KeysQuadMotors | ||
| MotorsAdvanced | ||
| MotorsPower | ||
| MotorsPowerAdvanced | ||
| MotorsSpeed | ||
| MotorsSpeedAdvanced | ||
| Dynamixel | Каталог примеров по работе с Dynamixel совместимыми устройствами | |
| DxlChangeBaudrate | Пример изменения скорости обмена данными между устройством и контроллером | |
| DxlConsole | Скетч, формирующий консоль для обмена данными с устройством в режиме командной строки | |
| DxlJointMode | Пример управления DYNAMIXEL сервоприводом в режиме позиционного управления | |
| DxlWheelMode | Пример управления DYNAMIXEL сервоприводом в режиме управления по скорости | |
| DxlWheelModeLowLevel | Пример низкоуровневого управления DYNAMIXEL сервоприводом в режиме управления по скорости | |
| Expander | Каталог простейших примеров работы с расширителем | |
| ExpanderAnalogRead | Чтение расширителем аналогового порта | |
| ExpanderAnalogWrite_ PWM | Управление ШИМ сигналом с помощью расширителя | |
| ExpanderBlinkLed | Пример управления зеленым светодиодом | |
| ExpanderDigitalRead | Пример считывания расширителем состояния цифровой линии | |
| ExpanderDigitalWrite | Управление цифровой линией с помощью расширителя | |
| Interfaces | Каталог примеров по работе со встроенными интерфейсами | |
| IrRx | Пример работы с ИК передатчиком | |
| IrTxRx | Пример работы с ИК передатчиком и приемником | |
| LanClient | ||
| SD | Пример работы с картой памяти | |
| Basic | Каталог примеров простейшего функционала контроллера | |
| AnalogRead | Чтение аналогового порта | |
| AnalogWrite_PWM | Управление ШИМ сигналом | |
| BareMinimum | Шаблон для написания скетча | |
| Blink | Пример управления красным светодиодом | |
| DigitalRead | Чтение состояния цифровой линии | |
| DigitalWrite | Управление цифровым сигналом | |
| DriversMotorsKeys | ||
| Keys | ||
| KeysAdvanced | ||
| KeysPWM | ||
| KeysQuadMotors | ||
| MotorsAdvanced | ||
| MotorsPower | ||
| MotorsPowerAdvanced | ||
| MotorsSpeed | ||
| MotorsSpeedAdvanced | ||
| Dynamixel | Каталог примеров по работе с Dynamixel совместимыми устройствами | |
| DxlChangeBaudrate | Пример изменения скорости обмена данными между устройством и контроллером | |
| DxlConsole | Скетч, формирующий консоль для обмена данными с устройством в режиме командной строки | |
| DxlJointMode | Пример управления DYNAMIXEL сервоприводом в режиме позиционного управления | |
| DxlWheelMode | Пример управления DYNAMIXEL сервоприводом в режиме управления по скорости | |
| DxlWheelModeLowLevel | Пример низкоуровневого управления DYNAMIXEL сервоприводом в режиме управления по скорости | |
| Expander | Каталог простейших примеров работы с расширителем | |
| ExpanderAnalogRead | Чтение расширителем аналогового порта | |
| ExpanderAnalogWrite_ PWM | Управление ШИМ сигналом с помощью расширителя | |
| ExpanderBlinkLed | Пример управления зеленым светодиодом | |
| ExpanderDigitalRead | Пример считывания расширителем состояния цифровой линии | |
| ExpanderDigitalWrite | Управление цифровой линией с помощью расширителя | |
| Interfaces | Каталог примеров по работе со встроенными интерфейсами | |
| IrRx | Пример работы с ИК передатчиком | |
| IrTxRx | Пример работы с ИК передатчиком и приемником | |
| Lan | ||
| LanClient | ||
| SD | Пример работы с картой памяти | |
| SDMMC | ||
| Power | Power |