Беспроводное управление на arduino

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

Итак, переходим ко второй части нашего повествования об интеграции беспроводного управления 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 не нужно).

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

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

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

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

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

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

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

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

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

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

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

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

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

/*
Modul nooLite
part of Arduino Mega Server project
*/

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 nooSendCommand(byte channel, byte command, byte data, byte format) <
byte buf[12];

Источник

Сеть беспроводных устройств на Arduino

Бюджетные радио-модули

За основу нашей сети возьмём бюджетные радио-модули, работающие на частоте 433.90MHz. Стоимость одного такого модуля составляет порядка $2.5, так что невелики затраты для того, чтобы организовать связь с внешним миром. Конечно, для связи можно использовать и готовые ethernet-модули и даже делать симбиоз с беспрводными роутерами на базе альтернативных прошивок, но во многих случаях проще и дешевле всё сделать на вот таких радио-модулях.

Качество работы и дальность связи этих модулей оставляет желать лучшего, и я бы не стал верить оптимистичным заявлениям продавцов о радиусе действия «>500m». В лучшем случае 100 метров на открытой местности, ну и гораздо меньше при наличии бетонных перегородок. Тем не менее, для квартиры или небольшого загородного участка их хватит. Можно использовать и более качественные (соответственно, более дорогие) радио-модули, поэтому статья может рассматриваться как идейная концепция, применимая к многим возможным вариантам реализации.

Важный момент: в данном руководстве я не буду рассматривать вариант создания сети с контролем качества передачи данных. Если сравнение с ethernet-протоколами можно считать уместным, то мы не будем строить сеть передачи TCP-пакетов, а, скорее, UDP.

Каждый из модулей подключается к контроллеру элементарно — питание через Vcc/Gnd и вывод Data подключается к свободному цифровому входу на микро-контроллере. Для повышения качества приёма/передачи рекомендуется дополнительно подключить антенну в виде провода размером 10-15 см. Кстати, дальность связи зависит ещё и от подающегося на модуль питания — если их запитать от 12В, то дальность и надёжность связи значительно возрастает.

Приёмник и передатчик подключенный к микро-контроллеру Arduino UNO R3:

Таким образом, мы сделали два устройства: первое — передатчик, который будет «вещать» в эфир какую-то информацию; второе — приёмник, который, соответственно, будет эфир «слушать». Далее, дело за тем, что бы и передача и приём были осмысленными и полезными для нас.

Библиотека VirtualWire

Чем хороша платформа Arduino, так это наличием огромного количества готовых библиотек для работы с всевозможными устройствами. Можно, конечно, с радио-модулями работать и без каких-либо библиотек, но тогда нужно разрабатывать свой протокол связи с контрольными суммами и прочими вещами. К счастью, есть замечательная библиотека VirtualWire, поддерживающая данные (и им подобные) радио-модули. С помощью этой библиотеки очень легко организовать передачу и приём небольших пакетов информации.

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

Код передатчика с использованием VirtualWire (из примеров использования библиотеки):

Протокол обмена данными

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

Я приведу ту структуру данных, которая показалась мне оптимальной при имеющихся возможностях оборудования. Итак, ниже по тексту список основных параметров, которые отправляются в эфир с каждым пакетом:

device_id — идентификатор устройства, отправившего пакет. Тип данных: unsigned int (длина 2 байта, диапазон значений от 0 до 65535) — как мне кажется, вполне достаточно для домашней сети.

destination_id — идентификатор устройства, кому предназначен пакет. Тип данных тот же, что и у device_id. Важно отметить, что пакеты всё равно будут получаться всеми приёмниками, но уже программой на самом приёмнике можно «отсекать» пакеты, которые устройству не предназначены. Так же можно принять в качестве правила то, что значение «0» в данном поле означает широковещательный пакет.

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

command — тип команды. Тип данных byte (длина 1 байт, диапазон значений от 0 до 255). Это так называемый «класс команды», а по сути информация о том, что за данные мы посылаем. Например, мы можем составить собственную таблицу команд, отведя для команды управления открытием/закрытием номер 10, а для команды передачи данных о температуре номер 15. Главное, чтобы эта таблица у нас была постоянной. А можно поступить ещё хитрее — подсмотреть возможные команды в том же протоколе ZWave и использовать у себя их таблицу, чтобы было всё «как у взрослых», и не нужно было заботиться о сохранности этих ценных сведений.

data — собственно данные. Тип данных int (длина 2 байта, диапазон значений от -32,768 до 32,767. В этом поле мы передаём непосредственно данные в виде одного числа. Мало? Ну мне показалось достаточным. Температуру можно передать (например усвловившись, что она умножена на 100), статус датчика движения — легко, команду для приёмника с реле — проще простого. Текстовые данные на внешний дисплей, конечно, не отправишь, но такой цели и не ставилось, а для моих настоящих и будущих устройств хватит за глаза и пары десятков чисел, чтобы описать все возможные команды.

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

Итак, мы определились со структурой пакета, теперь нужно реализовать обмен. Тут нам на помощь приходит ещё одна полезная библиотека под названием EasyTransfer. Собственно, она работает «поверх» VirtualWire, позволяя описать структуру данных на приёмнике/передатчике и вести обмен уже не набором байт-кодов, а указанной структурой целиком.

В нашем случае структура данных будет иметь следующий вид:

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

Пару слов про поле device_id. Его можно задавать вручную для каждого устройства, но я пошёл по более простому пути — при первом запуске генерирую это значений случайным образом и записываю в энерго-независимую область памяти EEPROM. Вероятность того, что разные устройства получают одинаковые идентификаторы из дипазона значений поля unsigned int крайне мала и, опять же, в моём случае риск вполне оправдан.

Применим полученные знания, для написания примера реализации на нашем протоколе обмена. Передатчик у нас будет отправлять значение внутреннего счётчика, а приёмник его отображать.

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

Ура! Наш Skynet в эфире! Уже можно делать много полезного, но нет предела совершенству… Двигаемся дальше.

Интеграция в MajorDoMo

Следующий этап — встраивание всего нашего «хозяйства» в более сложную среду управления Умным Домом. В данном случае, используется платформа MajorDoMo, но аналогичным образом может быть организована интеграция с любой другой системой.

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

В панели управления сценариями создадим скрипт приёма сообщений под названием easyRF.
Код сценария:

После добавления данный код сразу можно вызвать по http-ссылке:
192.168.0.17/objects/?script=easyRF

(вместо 192.168.0.17 адрес вашего сервера)

Следующий шаг, это трансляция принимаемых данных от Arduino в систему MajorDoMo. Тут есть варианты — можно добавить на Arduino-приёмник модуль ethernet и сразу посылать http-запросы по сети, а можно подключить микро-контроллер по USB и воспользоваться программой ArduinoGW, которая «слушает» COM-порт и при наличии ключевой последовательности, соответствующей отправки http-запроса, сама переадресует его в сеть.

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

Вот и всё! Создаём устройства, добавляем радио-модули и настраиваем взаимодействия всего и вся.

Дальнейшее развитие

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

Приведу несколько мыслей, пришедших в голову:

* Создание узлов «надёжного» обмена (используем на одном устройстве и приёмник и передатчик и организуем обмен пакетами с контролем доставки, для контроля доставки выделяем отдельный класс команд)
* Используем более дорогие и надёжные радио-модули
* Реализуем процедуру «привязки» одного устройства к другому без необходимости изменения кода (перевод в режим «привязки» двух устройств и запись в EEPROM парного устройства)

Источник

Беспроводное управление на ардуино

Радиомодули и Arduino

Беспроводная и дистанционная связь имеет ряд очевидных преимуществ. Даже человек, слабо разбирающийся в данной сфере, сразу укажет вам на самое явное из них – отсутствие проводов.

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

Материалы

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

Самым интересным способом для знакомства с радиомодулями, является установление соединения между двумя платами Ардуино посредством так называемого приемопередатчика.

Наибольшей популярностью среди радиомодулей с поддержкой Arduino пользуются передатчики с частотой 433МГц. Самое такое устройство обычно делиться на две составные части: это приемник и передатчик. Первый модуль имеет 4 вывода для подключения к плате (но один из них можно не использовать) Два из этих вывода отвечают за питание (соответственно, подключаются к таким контактам на плате, как 5V и Gnd (ground – “земля”), а другой к цифровому выходу на плате.

Передатчик тоже имеет 3 используемых контакта для подключения к плате. Только подключается он уже к другой плате, с которой у нас будет взаимодействовать первая плата, подключенная к приемнику. Три вывода подключается таким же способом, как и в случае с подключением приемника.

Наглядная картинка подключенных модулей есть на фото ниже:

Теперь займемся написанием программного кода. Для этого откроем среду разработки – программу Arduino IDE. Для работы с модулями понадобится специализированная библиотека RCSwitch.h, ее скачать вы можете здесь

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

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

Сначала инициализируем библиотеку для работы с модулями, с помощью директивы include

В следующее строчке мы называем наш модуль для дальнейшей работы с ним. Внутри функции void setup прописывается контакт на плате, к которому подключен передатчик. Далее, в цикле, мы можем заметить еще одну новую функцию — mySwitch.send . Она предназначается для непосредственной отправки сообщений. Сначала в ней указывается само сообщение для отправки, а далее размер отправляемого файла. Кстати, указывать отправляемое сообщение можно также и в виде двоичных чисел и строк.

Для приемника будет следующий программный код:

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

Таким образом данный пример-код взаимодействия между элементами радиомодуля вы можете легко применить в собственных проектах: например, ИК-управление с помощь пульта, управление машинкой на этой же основе и многое другое

Надеемся, что статья была для вас полезной. Удачной всем компиляции! И следите за нашим блогом:)

Купить компоненты, используемые в статье, вы можете на нашем сайте: Амперкот.ру

Источник

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

Итак, переходим ко второй части нашего повествования об интеграции беспроводного управления 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 не нужно).

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

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

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

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

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

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

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

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

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

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

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

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

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

/*
Modul nooLite
part of Arduino Mega Server project
*/

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 nooSendCommand(byte channel, byte command, byte data, byte format) <
byte buf[12];

Источник

Как построить схему управления на Arduino и ESP8266 с настраиваемыми таймерами, контролируемую через Wi-Fi

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

Обзор проекта

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

Макет проекта

Комплектующие

Компонент Количество
Arduino UNO или любая совместимая плата 1
Wi-Fi модуль ESP8266 1
USB TTL конвертер (необязательно) 1
Реле SPDT 12V 2
Биполярный NPN транзистор BC337 2
MOSFET транзистор с каналом N-типа BS170 1
Резистор 1 кОм 2
Резистор 10 кОм 2
Диод 1N4007 2
Зажимные клеммы 2
Настраиваемый регулятор напряжения LM317 1
Конденсатор 0.1 мкФ 2
Разъемы, мама и папа
Пустая печатная плата 2

Сборка макетной платы ESP8266

ESP8266 – недорогой SoC-чип со встроенным микроконтроллером и полным стеком протоколов TCP/IP, что означает, что он может напрямую обращаться к вашей Wi-Fi сети.

Поскольку у этого чипа есть свой микроконтроллер, вы можете поместить в него код своего приложения или можете использовать модуль просто как Wi-Fi приемопередатчик, что мы и собираемся сделать в данном проекте. Более эффективно было бы использовать этот модуль и как приемопередатчик, и как контроллер, но в целях обучения мы будем взаимодействовать с модулем, используя Arduino.

Чип ESP8266 поставляется в разных модулях. Мы будем использовать модуль ESP-01. Конечно, вы можете использовать любой другой модуль.

Во-первых, вы должны знать, что модуль работает с напряжением 3,3 В, и напряжение высокого логического уровня от Arduino должно быть таким же, чтобы не повредить наш модуль. Для этого требуется преобразователь уровня напряжения между платой Arduino (которая работает на 5 В) и модулем. Хорошей новостью является то, что в преобразователе будет нуждаться только вывод для передачи на Arduino, поскольку приемный вывод обычно распознает логические сигналы с напряжением 3,3 В от ESP8266.

Одним из простейших способов выполнения этого преобразования является схема от Sparkfun. Вы можете заказать готовый модуль.

Преобразователь уровня 5В → 3,3В

На рисунке ниже показана распиновка нашего модуля на ESP8266:

Распиновка Wi-Fi модуля ESP8266 (вид сверху, не в масштабе)

Вывод Назначение
UTXD Передача данных через UART
URXD Прием данных через UART. Выход, к которому он подключается, должен быть 3,3 В.
CH_PD Выключение: низкий уровень на входе выключает чип, высокий уровень на входе включает его; для нормальной работы модуля необходимо подтянуть его к линии питания.
GPIO0 При загрузке: должен быть высокий уровень, чтобы входить в нормальный режим загрузки; низкий уровень вводит в специальные режимы загрузки.
GPIO2 При загрузке: низкий уровень заставляет загрузчик войти в режим загрузки флеш-памяти; высокий уровень вызывает нормальный режим загрузки.
RST Сброс; активный уровень – низкий.
GND Земля.
VCC Питание/3,3В.

Я использовал LM317, настраиваемый линейный регулятор напряжения с выходным током до 1,5 А, для обеспечения модуля подходящим источником питания 3,3 В.

Примечание: Не используйте вывод 3,3 В от Arduino, так как стабилизатор напряжения 3,3 В на плате Arduino не может обеспечить необходимую для модуля величину тока, особенно при пиковом потреблении энергии во время передачи.

Принципиальная схема макетной платы ESP8266

Я использовал BS170 (вместо BSS138) для преобразователя логических уровней; оба работают хорошо.

Макетная плата ESP8266

Теперь вы можете подключить свой модуль к компьютеру, используя USB-TTL преобразователь, и испытать его.

Сборка макетной платы реле

Для управления реле я использовал биполярный NPN транзистор BC337 с резистором 1 кОм на базе. Для защиты от обратного напряжения катушки я использовал диод 1n4007.

Нормально замкнутый (NC) контакт реле я решил подключить к земле.

Макетная плата реле (вид сверху) Макетная плата реле (вид снизу)

Код Arduino

Теперь мы сталкиваемся с проблемой. ESP8266 использует UART в качестве интерфейса для AT-команд, а Arduino Uno (которая использует Atmega328) имеет только один порт UART. Этот порт уже подключен к мосту USB-TTL, а также к выводам 0 и 1.

В качестве решения вы можете использовать эмулятор для UART порта на другом цифровом выводе Arduino с помощью библиотек AltSoftSerial или SoftwareSerial. Это позволит вам по-прежнему иметь аппаратный порт UART для отладки и печати сообщений в консоли, а программный порт – для связи с модулем.

Платы Arduino

Многие люди (включая меня) сообщают о проблемах с программным последовательным портом при высоких скоростях передачи – как на тех, что мы будем использовать с esp8266, 115200 бит/с. Я могу сказать, что у вас 50% принятых от модуля данных будет повреждено, если вы используете программный UART, а из переданных от Arduino к модулю данных почти 100% будет корректно. Я получил эти результаты после отслеживания сигналов на линиях RX и TX.

В качестве решения я добавил в код несколько директив define , чтобы облегчить вам выбор между аппаратным и программным UART портами. Имейте в виду, что вы не можете использовать один и тот же порт для отладки и общения с модулем, поэтому вам нужно выбирать между ними.

В исходнике вы найдете часть кода, которая устанавливает модуля с вашим роутером:

Цикл скетча ожидает команды, которые должны прийти через Wi-Fi соединение. В настоящее время поддерживаются следующие команды:

  • ‘con’ для получения состояния выводов, высокий или низкий логический уровень;
  • ‘on=’ включить соответствующий вывод;
  • ‘of=’ выключить соответствующий вывод;
  • ‘Tm=n/fS’ установить таймер включения (n) или выключения (f) соответствующего вывода.

Все команды имеют отклик подтверждения.

Примечания:

  • некоторые части скетча основаны на этом руководстве;
  • если вы используете модули со старым SDK, у вас могут быть такие же ошибки, как и у меня. Единственным решением в этом случае является обновление вашей прошивки до последней версии. Посмотрите эту статью, для получения помощи в обновлении прошивки модуля на ESP8266. Я обновил прошивку с версии 1.3 до 1.5.4.

Полный код программы:

Android приложение

Чтобы управлять всеми выше перечисленными аппаратными компонентами, мы будем использовать простое приложение для Android. Это приложение позволит нам включать или выключать выход напрямую или через определенный период времени.

Примечание: Приложение требует Android 4.0 (IceCreamSandwich) или выше.

  • Прежде всего, вы должны знать IP адрес своего модуля. Если вы использовали программный последовательный порт, IP адрес будет напечатан в консоли. Если вы использовали аппаратный последовательный порт, то вы должны использовать кабель для отслеживания данных на линиях RX и TX, чтобы увидеть IP адрес. Вам также нужно знать номер порта, который был указан в скетче для Arduino. После этого нажмите «connect», чтобы получить состояние всех трех выходов. Вам нужно убедиться, что ваш Wi-Fi роутер включен, и вы подключены к локальной сети.
  • Теперь нажмите на любой переключатель, который вы хотите включить/выключить. Всякий раз, когда захотите, вы можете нажать «refresh», чтобы обновить состояние всех выходов.
  • На вкладке «Timers» вы можете установить любой из этих трех выходов для включения/выключения через определенный промежуток времени (от 0 до 24 часов).
  • После любого действия вы получите сообщение с подтверждением о том, выполнилась ли команда успешно, или возникла какая-то ошибка.

Скриншоты Android приложения для управления контроллером на Arduino и ESP8266

Демонстрационное видео

Вот и всё! Надеюсь, статья оказалась полезной. Оставляйте комментарии!

Источник

Adblock
detector