Модули
Скетч Arduino Mega Server разделён на структурно-логические блоки, называемые модулями. Каждый такой модуль выполняет какую-либо одну, чётко выраженную функцию, например, обслуживание контактных датчиков (contacts), работа со временем (rtc) или управление силовыми ключами (keys) и т. д. В папке скетча каждому модулю соответствует свой .ino
файл.
Все модули делятся на системные, т. е. неотключаемые и необходимые для функционирования Arduino Mega Server и пользовательские, которые можно отключать, если их функциональность не нужна.
Существует два варианта отключения модулей.
Отключение компиляции модуля
В этом варианте отключение происходит комментированием соответствующей строки в скетче Arduino Mega Server на этапе компиляции и код модуля не попадает в микроконтроллер, что позволяет сэкономить его память.
//#define PING_FEATURE
Динамическое включение и отключение модулей
В этом варианте вы можете включать и выключать модули прямо во время работы системы. Это позволяет освободить процессорное время, затрачиваемое на работу модуля, но не освобождает память, занимаемую им.
Этот вариант управления работой модулей осуществляется в коде скетча и индивидуален для каждого модуля. В качестве примера вы можете посмотреть, как организовано управление модулем «Электро», который можно включать и отключать прямо с веб-страницы.
Браузерная часть
Браузерная часть интерфейса Arduino Mega Server автоматически распознаёт состояние модуля и корректно обрабатывает это событие. В шапке сайта AMS находится приборная панель на которой отображается текущее состояние всех модулей системы.
Возможны три состояния:
- Включён (синий)
- Выключен (коричневый)
- Неоткомпилирован (тёмно-серый)
Модули системы
Модуль | Назначение | Отключаемый |
---|---|---|
Doc | Файл документации | — |
Generic | Общие функции | Нет |
Strings | Функции работы со строками | Нет |
Timers | Работа с таймерами | Нет |
SD | Функции работы с microSD | Частично |
RTC | Функции работы с временем | Частично |
Upload | Загрузка файлов на сервер по Serial | Да |
Ethernet | Поддержка работы с сетью | В разработке |
Send | Посылка GET запросов | Да |
Ping | Доступность сетевых устройств | Не работает |
Server | Модуль сервера | В разработке |
Server Ajax | Парсинг запросов и ответы сервера | В разработке |
Server Maker | Сборка страниц | В разработке |
Server Commands | Парсинг сетевых команд | В разработке |
Temperature | Работа с температурными датчиками | Да |
Contacts | Работа с контактными датчиками | Да |
PIR's | Работа с PIR датчиками | Да |
Electro | Работа с Power Monitor | Да |
Keys | Работа с силовыми ключами | Да |
LED's | Работа со светодиодными лентами | Да |
MajorDoMo | Работа с системой MajorDoMo | Да |
Laurent | Работа с модулями Laurent | Да |
nooLite | Работа с оборудованием nooLite | Да |
Программирование модулей
Включение и отключение модулей осуществляется при помощи т. н. макросов и директив условной компиляции. Например, в модуле «contacts» весь код заключён между двух директив условной компиляции
#ifdef CONTACTS_FEATURE ... #endif
и от того, будет ли закомментирован макрос
#define CONTACTS_FEATURE
зависит будет ли откомпилирован это код и попадёт ли он в микроконтроллер.
Здесь есть один тонкий момент, который нужно понимать. Если вы выключили модуль из компиляции, а в других модулях встретиться код, зависимый от выключенного, то произойдёт ошибка на этапе компиляции. Поэтому, нужно обрамлять в такие же директивы и весь зависимый код в других модулях, чтобы всё, относящееся к выключаемому модулю, выключалось синхронно.
Именно так спроектирована система Arduino Mega Server и отключение, например, модуля «contacts» приводит и к выключению из компиляции зависимого кода в модуле «server_ajax». При разработке нужно предусматривать, чтобы «исчезновение» модуля из системы, вместе со всем зависимым кодом, не приводило к каким-либо проблемам.
Определение макросов модулей
В главном файле скетча Arduino Mega Server определяются макросы при помощи которых осуществляется включение или отключение модулей системы.
// modules #define ETHERNET_FEATURE #define SERVER_FEATURE #define RTC_FEATURE #define SEND_FEATURE //#define MAJORDOMO_FEATURE #define UPLOAD_FEATURE #define SD_INFO_FEATURE //#define SD_FILES_FEATURE //#define PING_FEATURE //#define LAURENT_FEATURE #define PIRS_FEATURE #define CONTACTS_FEATURE #define TEMP_FEATURE #define ELECTRO_FEATURE #define LEDS_FEATURE //#define KEYS_FEATURE #define NOO_FEATURE
Все незакомментированные модули будут откомпилированы вместе с зависимым кодом, а все закомментированные — нет.
Динамическое состояние модулей
В главном файле переменным модулей присваивается статус MODUL_NOT_COMPILLED
, который означает, что модуль не откомпилирован. Затем, в процессе инициализации, модулям присваивается статус MODUL_ENABLED
(но только после успешной инициализации).
// modules byte const MODUL_DISABLE = 0; byte const MODUL_ENABLE = 1; byte const MODUL_NOT_COMPILLED = 2; byte modulEthernet = MODUL_NOT_COMPILLED; byte modulRtc = MODUL_NOT_COMPILLED; byte modulSdCard = MODUL_NOT_COMPILLED; byte modulId = MODUL_NOT_COMPILLED; byte modulServer = MODUL_NOT_COMPILLED; byte modulSend = MODUL_NOT_COMPILLED; byte modulMajor = MODUL_NOT_COMPILLED; byte modulLaurent = MODUL_NOT_COMPILLED; byte modulPing = MODUL_NOT_COMPILLED; byte modulUpload = MODUL_NOT_COMPILLED; byte modulPirs = MODUL_NOT_COMPILLED; byte modulContacts = MODUL_NOT_COMPILLED; byte modulTemp = MODUL_NOT_COMPILLED; byte modulElectro = MODUL_NOT_COMPILLED; byte modulLeds = MODUL_NOT_COMPILLED; byte modulKeys = MODUL_NOT_COMPILLED; byte modulNoo = MODUL_NOT_COMPILLED;
Во время работы программы статусы MODUL_ENABLE
и MODUL_DISABLE
можно менять, тем самым управляя включением и отключением модулей. Если модуль имеет статус MODUL_NOT_COMPILLED
, то работать с ним нельзя — его код отсутствует в системе.
Обратите внимание. Система Arduino Mega Server непрерывно развивается и в код проекта постоянно вносятся изменения и улучшения, поэтому, описание и документация может не соответствовать вашей конкретной версии системы. Последняя правка этой страницы относится к 0.14 версии системы.