Как стать автором
Обновить

Беспроводное оборудование nooLite и Умный дом (часть 2). Arduino Mega Server

Время на прочтение 7 мин
Количество просмотров 14K
image

Итак, переходим ко второй части нашего повествования об интеграции беспроводного управления nooLite в системы домашней автоматизации. И в этой части мы поговорим о управляющем модуле nooLite MT1132 и его интеграции в популярную систему Arduino Mega Server. Это расширяет (и без того очень развитые) возможности AMS беспроводным управлением светом и электроприборами в вашем Умном доме.

О первой части


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

Почему?

Потому, что Arduino Mega Server это и есть Arduino. И всё, что написано в предыдущей статье справедливо и для Arduino Mega Server. Поэтому, перед прочтением этой статьи рекомендуется ознакомиться с первой частью цикла.

Пара слов об Arduino Mega Server


Arduino Mega Server это многофункциональная система со множеством уникальных возможностей. Подробнее об этом можно узнать на сайте проекта. Там доходчиво и с «картинками» описаны его основные возможности. Если говорить коротко, то это операционная система для контроллеров Arduino. И возможности «голого» контроллера отличаются от возможностей контроллера с AMS на борту примерно также, как и возможности «голого» компьютера отличаются от возможностей компьютера с Windows или Linux на борту.

Это образное сравнение, но оно даёт хорошее представление о том, что такое Arduino Mega Server.

Интеграция


Теперь давайте рассмотрим каким образом управляющей модуль MT1132 интегрирован в систему. Физически подключение модуля ничем не отличается от подключения к Arduino Mega или Arduino Due, описанного в предыдущей статье. Поэтому я снова отсылаю вас к предыдущей статье, чтобы не повторять здесь одно и то же.

При провода — питание, земля, и RX для приёма управляющих команд от Arduino и модуль готов к работе. Поистине, nooLite MT1132 чемпион по простоте подключения оборудования к микроконтроллеру.

Софтверная часть тоже очень похожа на описанную в предыдущей статье и на 85% совпадает с ней. Различия заключаются только в специфичных для AMS переменных и функциях, которые мы подробно рассмотрим в этой статье.

Ядро управления nooLite


Под ядром управления nooLite мы будем подразумевать код, который выполняет основные функции по формированию команд и управлению модулем MT1132 (который, в свою очередь, и посылает команды в эфир).

Этот код, в соответствии с идеологией модульной структуры AMS, оформлен в отдельный модуль и является отдельной логической единицей системы. Этот модуль может быть включен (если вам нужно управление nooLite) или выключен (если вам управление nooLite не нужно).

image

Это выгодно тем, что позволяет экономить ценную память микроконтроллера и не задействовать этот модуль тем, кому не нужно управление nooLite. Модуль может выключаться динамически (при этом память не экономится), а может быть выключен на этапе компиляции простым комментированием строки кода.

//#define NOO_FEATURE

И в этом случае вся память, занимаемая модулем, остаётся свободной. Система спроектирована так, что она автоматически распознаёт откомпилирован модуль или нет и корректно обрабатывает это событие.

image

Для удобства пользователей в приборную панель в шапке сайта выведена информация о состоянии всех модулей системы. И там сразу видно их состояние в данный момент. Это работает и в версии для Arduino Mega и в версии для Arduino Due.

Код модуля ядра nooLite


Теперь давайте разберём код модуля «noo» системы Arduino Mega Server. Те функции, которые были разобраны в предыдущей статье, я здесь опущу. Если вам, вдруг, что-то непонятно, то вернитесь к предыдущей статье и ещё раз её просмотрите.

Код модуля обрамлён в директивы условной компиляции, служащие для включения или выключения кода модуля из компиляции в соответствии с вашими указаниями.

#ifdef NOO_FEATURE

…

#endif

Далее задаются выводы, к которым подключён модуль MT1132 (19-й вывод подключать необязательно, он служит для подтверждения модулем успешности отправки команды)

byte const PIN_TX = 18; // TX PIN (to RX noolite)
byte const PIN_RX = 19; // RX PIN (to TX noolite)

И задаются буквенные обозначения каналов (просто для удобства использования)

byte const NOO_CHANNEL_1 = 0;
byte const NOO_CHANNEL_2 = 1;

В данный момент используются всего два канала, но ничто не мешает вам добавить несколько строчек кода и использовать все 32 канала.

Инициализация модуля производится функцией

void nooInit() {
  Serial1.begin(9600);
  modulNoo = MODUL_ENABLE;
  started("nooLite");
}

в которой инициализируется Serial1 на стандартной частоте 9600, модулю присваивается статус «ENABLE» и выводится тестовое сообщение в Serial для контроля процесса инициализации.

«Главная» функция, формирующая команды, и функции «обёртки», упрощающие команды до предела, подробно описаны в предыдущей статье. Вот собственно и всё ядро управления nooLite. Теперь мы можем свободно обращаться к любым управляющим функциям из любого места в коде Arduino Mega Server. И как угодно управлять оборудованием nooLite.

Вот полный код ядра управления nooLite.

Полный код ядра
/*
Modul nooLite
part of Arduino Mega Server project
*/

#ifdef NOO_FEATURE

byte const PIN_TX = 18; // TX PIN (to RX noolite)
byte const PIN_RX = 19; // RX PIN (to TX noolite)

byte const NOO_CHANNEL_1 = 0; // channel (address) 0...31 (MT1132)
byte const NOO_CHANNEL_2 = 1;
byte const NOO_CHANNEL_3 = 2;
byte const NOO_CHANNEL_4 = 3;
byte const NOO_CHANNEL_5 = 4;

void nooInit() {
Serial1.begin(9600);
modulNoo = MODUL_ENABLE;
started(«nooLite»);
}

void nooWork() {

}

void nooSendCommand(byte channel, byte command, byte data, byte format) {
byte buf[12];

for (byte i = 0; i < 12; i++) {
buf[i] = 0;
}

buf[0] = 85;
buf[1] = B01010000;
buf[2] = command;
buf[3] = format;
buf[5] = channel;
buf[6] = data;

int checkSum = 0;
for (byte i = 0; i < 10; i++) {
checkSum += buf[i];
}

buf[10] = lowByte(checkSum);
buf[11] = 170;

for (byte i = 0; i < (12); i++) {
Serial1.write(buf[i]);
}
}

void nooBind (byte ch) {nooSendCommand(ch, 15, 0, 0);}
void nooUnbind (byte ch) {nooSendCommand(ch, 9, 0, 0);}

void nooOn (byte ch) {nooSendCommand(ch, 2, 0, 0);}
void nooOff (byte ch) {nooSendCommand(ch, 0, 0, 0);}
void nooTrigger(byte ch) {nooSendCommand(ch, 4, 0, 0);}
void nooCancel (byte ch) {nooSendCommand(ch, 10, 0, 0);}

void nooUp (byte ch) {nooSendCommand(ch, 3, 0, 0);}
void nooDown (byte ch) {nooSendCommand(ch, 1, 0, 0);}
void nooRevers (byte ch) {nooSendCommand(ch, 5, 0, 0);}

void nooValue (byte ch, byte v) {nooSendCommand(ch, 6, v, 1);}

#endif // NOO_FEATURE

Интерфейс «привязки» и «отвязки»


Поскольку Arduino Mega Server предоставляет нам роскошный интерфейс, то мы можем его использовать для всех функций работы с модулем и самой системой nooLite. Нам не нужно будет ничего делать вручную, общение со всеми функциями системы nooLite будет происходить при помощи стандартных элементов интерфейса, привычных вам по работе с сайтами в сети Интернет. Это будут кнопки, выпадающие списки и т. п.

Давайте начнём с интерфейса «привязки» и «отвязки» силовых блоков. Здесь всё крайне просто: в выпадающем списке вы выбираете нужный номер канала, затем выбираете тип действия — «Привязать» или «Отвязать» и нажимаете «Отправить». Здесь же даны короткие инструкции по тому, что нужно делать после нажатия кнопки «Отправить». В целом, всё сделано очень просто и элегантно.

image

Вы можете «привязывать» и «отвязывать» блоки в любом количестве и на любых каналах (на одном канале может быть сколько угодно силовых блоков и включаться они будут синхронно, поскольку находятся на одном канале).

Здесь нужно только помнить, что в 0.14 сборке реализовано управление по двум каналам. Если двух каналов вам мало, то вы можете, по аналогии, добавить управление по любому нужному вам количеству каналов (вплоть до 32).

Интерфейс управления


Теперь давайте рассмотрим как организован интерфейс управления приборами nooLite в AMS. В меню системы есть пункт «Управление nooLite». При нажатии на него открывается страница с которой можно включать и отключать приборы nooLite беспроводным способом. Как я уже сказал, в 0.14 версии организовано управление по двум каналам. Они называются «Блок 1» и «Блок 2» (имеются в виду беспроводные силовые блоки-димеры nooLite).

image

Нажимаем на «Блок 1» и видим симпатичную кнопку — это и есть интерфейс управления первым силовым блоком. Вы можете подключить к этому блоку освещение или любой электроприбор (соответствующей мощности) и… удобно и комфортно управлять его включением и выключением, нажимая на эту кнопку.

Интерфейс Arduino Mega Server адаптивный, это значит, что вы можете управлять включением и выключением электроприборов прямо со своего смартфона — интерфейс «сложится» и копка окажется большой и удобной для нажатия на смартфоне.

image

Это ещё не всё. Кроме простого включения и выключения приборов, система nooLite позволяет делать ещё многие другие вещи, например, димировать (плавно изменять) яркость свечения ламп или устанавливать необходимую мощность нагрузки. Для этого предназначен ещё один элемент интерфейса — виджет установки мощности и димирования.

Виджет установки мощности и димирования


На втором канале присутствуют два элемента интерфейса — кнопка включения и выключения и виджет установки мощности. При помощи этого виджета можно устанавливать мощность, отградуированную в процентах от максимальной. Это универсальное решение, подходящее для большинства случаев.

Вы с одинаковым успехом можете подключить к беспроводному димеру nooLite (например, SU111-300) люстру в вашей комнате или электроприбор, требующий регулировки мощности (в пределах паспортной мощности вашего силового блока) и можете легко, прямо с веб-странички устанавливать любую желаемую мощность.

image

Если вам нужно регулировать мощность как-то по-другому, например, с большей точностью или нелинейно, то вы можете изменить стандартный виджет, подкорректировав исходный код (который, естественно, полностью доступен).

На картинке показан момент, когда мощность установлена на 20% от максимальной. Одновременно можно менять мощность из скетча на Arduino автоматически. Например, с этой системой ничего не стоит организовать столь модный сейчас «рассветный будильник», когда яркость свечения ламп возрастает медленно и «естественным» образом будит вас по утрам. И без проводов! Силовых и управляющих, достаточно встроить димер в лампу или люстру.

Виджет и кнопка работают независимо. Это значит, что вы можете установить нужную вам мощность (яркость свечения) и после выключения и нового включения, установленная мощность сохранится, что очень удобно.

Другие функции


В документе компании «Ноотехника», описывающем команды управления приборами nooLite, есть ещё множество дополнительных команд, часть из которых уже присутствует в ядре, а часть — нет. Если вам нужны другие команды, то вы можете их добавить самостоятельно, благо это совсем не сложно и в системе уже есть множество примеров.

Заключение


Итак, мы рассмотрели интеграцию управляющего модуля nooLite MT1132 в Arduino Mega Server и принцип организации интерфейса управления оборудованием nooLite. Имея интегрированное ядро управления, вы можете без труда управлять приборами nooLite из AMS в своём Умном доме.

На этом вторая статья подошла к концу, а в третьей статье из цикла вы познакомитесь с совершенно фантастической концепцией системы Arduino Mega Server «100 в 1», когда один контроллер с AMS на борту заменяет вам множество приборов и систем и экономит для вас их стоимость.

И показано это будет на примере паяльной станции, которую мы сделаем буквально из ничего — из одного беспроводного димера nooLite.

P. S.

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

Иметь свой модуль (и сайт) в Arduino Mega Server это очень хорошая идея.

Первая, третья и четвёртая части цикла.

Дополнение. Открыт канал на Youtube и вот промо ролик Arduino Mega Server, который демонстрирует работу с реальной системой.
Теги:
Хабы:
+6
Комментарии 2
Комментарии Комментарии 2

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн