Беспроводное оборудование noolite и умный дом (часть 1). arduino

Беспроводное оборудование noolite и умный дом (часть 1). arduino

Здравствуйте глубокоуважаемые читатели Geektimes! В этом случае я желаю представить вашему вниманию цикл статей об интеграции беспроводного оборудования nooLite в совокупности домашней автоматизации. Данный цикл будет похож на уже вышедшую серию статей (раз, два, три) об интеграции модулей Laurent в совокупности Умного дома, лишь рассказываться в нём будет о совокупности nooLite и по окончании прочтения этого цикла у вас не останется вопросов по управлению устройствами nooLite из вашего Умного дома.
Смотрите кроме этого: AMS и волшебный кристалл

В этом случае предлагаю мало позаниматься волшебством (из-за чего нет?) и создать волшебный кристалл для отечественных повседневных потребностей. Применять его мы будем по прямому назначению — для прорицания разных неочевидных событий и сущностей. И пригодится нам для того чтобы изготовить всего два ингредиента — Arduino Mega Server и беспроводной контроллер светодиодной ленты nooLite SD111-180.Кристалл будет не декоративный (для обмана наивной публики), а действительно функциональный, со множеством волшебных особенностей.

О цикле статейЦикл разбит на три части. В первой части вы определите о правилах работы беспроводного оборудования nooLite и организации управления им из ваших проектов на Arduino. Во второй части будет детально поведано об интеграции управляющего модуля MT1132 в Arduino Mega Server и об раскрывающихся вследствие этого возможностях по управлению Умным домом. А третья статья цикла будет повещена весьма увлекательной теме — концепции создания устройств «100 в 1» на базе Arduino Mega Server.

Будет детально разобран пример создания беспроводной паяльной станции на AMS практически из ничего — на базе всего одного беспроводного димера nooLite.Кстати, паяльная станция, о которой отправится обращение в третьей статье, уже присутствует в последней сборке Arduino Mega Server под номером 0.14. И самые интересные читатели смогут не ждать третьей статьи, а сходу скачать дистрибутив и самостоятельно разобраться с тем, как всё это трудится.И самое превосходное, что таких устройств в AMS может пребывать много, причём в один момент.

К примеру, паяльная станция, метеостанция, охранный блок, контроллер оранжереи и т. д. И трудиться всё это может в один момент либо «запускаться» загрузкой веб-странички либо кроме того целого сайта, посвящённого конкретному устройству.Но не будем забегать вперёд, само увлекательное покинем напоследок, а до тех пор пока займёмся нужной теоретической подготовкой. Обещаю, что всё будет изложено самым несложным и доходчивым образом.

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

Фактически всё. Прелесть совокупности в том, что все компоненты продуманы, как следует изготовлены и делают ровно то, что заявлено — надёжно руководят подключённым оборудованием.Имеется ещё беспроводные датчики, управление устройствами со смартфона и другое, но в одной статье всё охватить нереально, тут мы сосредоточимся лишь на интеграции nooLite с популярной платформой DIY — Arduino.Из всего широкого спектра оборудования nooLite нас будет интересовать управляющий модуль MT1132 вследствие того что он запланирован на подключение к Arduino и одноплатным компьютерам типа Raspberry Pi.

И трудится он по несложному последовательному интерфейсу. Забегая мало вперёд, сообщу, что модуль мне понравился собственной простотой, надёжной работой и предсказуемостью. И я смог по преимуществу оценить эти качества по окончании месяца бесплодной борьбы с сетевым модулем на чипе W5500, что так и не захотел нормально трудиться.И особенно мне понравилось то, что (не считая питания) модуль подключается к Arduino всего одним (!) проводом (RX).

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

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

Единственное, на что хотелось бы обратить внимание, это то, что модули поставляются с перемычкой, которая блокирует режим димирования и, если вы желаете регулировать мощность, то необходимо разрезать эту перемычку (и не забыть заизолировать появившиеся оголённые провода).На пультах я очень останавливаться не буду вследствие того что это «ручное» управление, а нас, в связи с автоматизацией, больше интересует автоматическое. Сообщу лишь, что опыты проводились с пультом PU311-2, выполненным в виде настенного выключателя и он продемонстрировал себя самым наилучшим образом, другими словами чётко и без сбоев включал и выключал свет.

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

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

Это значит, что при помощи этого модуля вы имеете возможность руководить 32 отдельными группами оборудования, что более чем достаточно для квартиры либо маленького дома. В случае если у вас громадный дом, то модули смогут трудиться в связке и масштабироваться на любое количество каналов.Описание протоколаНа сайте компании «Ноотехника» имеется превосходный документ, что исчерпывающе и во всех подробностях обрисовывает протокол управления и подключение модуля им.

Я не буду загромождать статью излишними техническими подробностями, кто угодно может ознакомиться с этим документом, обрисую только главные моменты.Для управления модулем нам необходимо организовать управляющую команду, складывающуюся из 12 байт. Правила формирования данной команды обрисованы в вышеприведённом документе. И как вы заметите ниже, все эти правила уже запрограммированы в управляющих функциях и нам необходимо лишь применять их для отдачи команд в модуль.Тестовые командыnooLite имеет достаточно развитую совокупность команд, из которой мы выберем самые простые и самые употребительные и на их примере проиллюстрируем работу совокупности.

  • Привязка
  • Отвязка
  • Включение
  • Выключение
  • Установка мощности (димирование)

Осознав, как трудятся главные команды, вы сможете легко применять и каждые другие.Подключение модуля MT1132Как я уже сообщил, подключение модуля MT1132 производится практически одним проводом (не считая питания). Питаться модуль может как от напряжения 5 вольт, так и от напряжения 3.3 вольт. Исходя из этого не появилось никаких неприятностей с подключением ни к 5-вольтовой Arduino Mega, ни к 3.3-вольтовой Arduino Due.

Единственный момент содержится в том, что при пониженном питании понижается дальность уверенной работы совокупности. И это необходимо учитывать, если вы желаете питать модуль от напряжения 3.3 вольт.На модуле имеется выводы RX и TX для посылки и приёма сигналов по последовательному интерфейсу. Критичным для работы модуля есть подключение RX, для приёма управляющих команд от контроллера.

Соответственно, контакт RX на стороне модуля соединяется с контактом TX (18) на стороне Arduino. Эта распиновка честна как для Arduino Mega, так и для Arduino Due.Программная частьТеперь давайте разберёмся с тем, как руководить всем этим хозяйством из скетчей на Ардуино.

Сперва инициализируем Serial1, к которому мы подключили модуль МТ1132 (делается это на стандартной частоте 9600):Serial1.begin(9600); Сейчас код основной управляющей функции: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]); } } В принципе, нам кроме того не требуется знать как она трудится, мы её можем применять в режиме «тёмного коробки» либо необычного API, у которого наружу «торчит» определённый интерфейс. Нам достаточно лишь знать, как пользоваться этим интерфейсом.Как видите, в том месте всего четыре параметра — канал, команда, формат и данные.

По какому принципу вырабатывать запросы к этому API, возможно прочесть в вышеупомянутом документе, мы же ещё больше упростим себе задачу и обернём данный интерфейс в простые команды управления устройствами nooLite.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 nooValue (byte ch, byte v) {nooSendCommand(ch,6, v, 1);} Довольно сложной командой есть лишь последняя, в том месте, не считая канала, задаётся ещё и уровень мощности. В скетче имеется ещё команды, на которых мы на данный момент не будем останавливаться, но формируются они так же легко.Фактически… всё!

Несложнее некуда. В коде управляющие команды выглядят так:nooBind(ch); nooUnbind(ch); nooOn(ch); nooOff(ch); nooValue(ch, v); Сейчас давайте на практике потренируемся в управлении силовым модулем nooLite. Итак, привязываем силовой блок на нулевом канале:nooBind(0); На силовом блоке начинает мигать светодиод.

Нажимаем кнопку на блоке — светодиод перестаёт мигать — силовой блок привязан. Вместо нулевого канала возможно применять каждый.

И вы имеете возможность легко вырабатывать номер канала в коде скетча в соответствии с вашими потребностями.Включаем лампу (в случае если мы привязали лампу на нулевом канале, то и команды для неё необходимо отправлять на этом канале):nooOn(0); Устанавливаем мощность (яркость свечения лампы):nooValue(0, 100); Тут необходимо мало сообщить о правилах формирования команды, устанавливающей уровень мощности. Значение мощности изменяется не в пределах от 0 до 255, как возможно было бы поразмыслить, а в пределах от 35 до 155.

В случае если значение будет больше 155, то мощность будет большой, в случае если будет равняется 0, то это будет равнозначно команде выключения.Вот (на всякий случай) формула, которая показывает «стандартные» значения от 0 до 100 в формат, осознаваемый модулем nooLite:v = x * 1.2 + 34; Применяя эту формулу, возможно устанавливать яркость свечения лампы в привычных процентах мощности. И, конечно, в случае если необходимо регулировать мощность нелинейно, то возможно вырабатывать переменную v по любому закону либо кроме того легко подбирая фиксированные значения.

Об этом обращение отправится в третьей части цикла, в то время, когда мы будем юстировать температуру нагрева паяльной станции.Выключаем прибор:nooOff(0); Отвязываем:nooBind(0); На силовом блоке начинает мигать светодиод. Подтверждаем отвязку, нажимая кнопку на силовом блоке.

Всё, сейчас силовой блок прекратил реагировать на отечественные команды и мы можем «привязать» его опять на любом из 32 каналов модуля nooLite MT1132.Вот полный текст скетча.Полный код скетчаbyte const PIN_TX = 18; // TX PIN (to RX noolite)byte const PIN_RX = 19; // RX PIN (to TX noolite)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);}void setup() { Serial1.begin(9600);/* Используем любую нужную команду единовременно либо пишем собственный код в loop(), применяя эти команды *///nooBind(0);//nooOn(0); //nooOff(0); //nooValue(0, 100);//nooUnbind(0); }void loop(){}Промежуточный итогКак вы видите, в управлении силовыми модулями nooLite при помощи Arduino нет ничего сложного, напротив, управление феноменально простое: подсоединяется модуль одним проводом, а команды являются чуть ли не естественный человеческий язык — «включить канал 0», «отключить канал 1», «установить мощность 50% на канале 3» — несложнее вправду некуда.Бонус для тех, кто дочитал до концаБуквально пару дней назад вышла новая версия Arduino Mega Server под номером 0.14, в которой преодолены все детские заболевания разработки и которая трудится скоро и стабильно. И эта же версия содержит интегрированное ядро управления устройствами nooLite и о том, как всё это трудится, вы определите из следующей статьи цикла «Беспроводное оборудование nooLite и Умный дом (часть 2). Arduino Mega Server».

Случайная статья:

Умный дом Беспроводная электрика от nooLite


Похожие статьи:

Комментирование и размещение ссылок запрещено.

Обсуждение закрыто.