- PVSM.RU - https://www.pvsm.ru -

Ещё одна система автополива растений с использованием ESP8266 и Blynk

Однажды, когда я отдыхал в компании друзей в студенческом лагере МИФИ, один из них рассказал мне, что недавно решил попробовать посадить на участке клубнику. Купил горшки, нарыл где-то почву, подвел шланги для полива. И все бы ничего, хозяин спит — клубника растёт, да только приходится стабильно раз в неделю или даже чаще ездить на дачу, дабы растения не засохли без воды.

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

Ещё одна система автополива растений с использованием ESP8266 и Blynk - 1

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

Общая схема системы:

Ещё одна система автополива растений с использованием ESP8266 и Blynk - 2

Для взаимодействия с глобальной сетью была выбрана активно набирающая популярность Wi-Fi плата ESP8266. Выбор беспроводного протокола передачи данных был обусловлен, помимо низкой стоимости Wi-Fi модуля, наличием на даче «заказчика» постоянно включенного Wi-Fi роутера, что позволит избежать протяжки проводного соединения внутри дома.

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

Смета проекта

Для контроля текущей влажности почвы был заказан стандартный датчик с Ebay.

Для отображения и ввода информации было решено использовать LCD Keypad shield, представляющий собой электронный модуль с LCD экраном и 6-ю кнопками, подключаемыми к одному аналоговому входу.

В качестве устройства контроля подачи воды был выбран 12-вольтовый механизированный кран с 2 проводами, открытие-закрытие которого осуществляется сменой знаков подаваемого напряжения. Поэтому дополнительно к крану был заказан 4-канальный реле-модуль (два реле меняют подаваемую полярность, один отвечает за подачу напряжения, еще один оставлен про запас).

В качестве ESP8266 на Ebay была заказана простейшая его версию – ESP-01. Главное – помнить, что ESP8266 питается исключительно от 3,3 В, о чём нужно позаботиться заранее.

Список необходимого оборудования:

  • Механизированный кран
  • Arduino Mega
  • WiFi модуль (ESP8266)
  • 4-х канальное реле
  • Датчики влажности почвы
  • LCD дисплей с кнопками

Итоговая стоимость (без учета стоимости всего необходимого для пайки, сборки, а также блока питания): $61,01. Основной вклад в конечную стоимость моей системы внесли механизированный кран ($23,32) и Arduino Mega 2560 official ($26,80).

Функционал системы

Немного поразмыслив, я решил, что система автополива должна иметь возможность функционировать в трех следующих режимах:

  • Ручной («с кнопки»). В этом режиме пользователь сам принимает решение о времени запуска полива на основе предоставляемой ему информации с датчика влажности почвы или основываясь на личном опыте;
  • Режим «по расписанию». Пользователь задает лишь параметры полива по расписанию (периодичность, длительность), после чего система сама осуществляет полив по выбранным установкам;
  • Режим «по сенсору». Полив осуществляется автоматически при достижении заданного порога влажности. Пользователю необходимо только выставить пороговое значение влажности и длительность полива;
  • Удаленный (со смартфона или компьютера). Включается в себя возможность удаленного управления системой с использованием логики любого из трех вышеперечисленных режимов.

Реализацию такого функционала трудно представить без простейшего меню, навигация по которому будет осуществляться с помощью кнопок LCD-Keypad шилда. Про реализацию меню на Arduino можно прочитать, например, тут [1].

Blynk

Размышляя над реализацией удаленного управления поливом, я наткнулся на интересный проект Blynk, сбор средств на реализацию которого был запущен на Kickstarter 16 января 2015 г [2].

За месяц проект собрал $49,235 вместо $10,000, что, по всей видимости, отражает огромный интерес к такого рода проектам со стороны мирового гик-сообщества.

Основная цель Blynk – создание доступной платформы для беспроводного управления самодельными электронными устройствами со смартфона. По задумке авторов, выход в Интернет не является необходимым условием – Blynk Server можно будет скачать и развернуть в домашней сети, получив полную автономность в рамках Вашего дома.

Полный список поддерживаемых платформ (среди которых, безусловно, есть Arduino, Raspberry PI и Intel Edison), на которые планируется портировать Blynk, находится тут [3].

Схематично принцип работы Blynk представлен на следующем рисунке:

image

В списке интерфейсных возможностей программы для смартфона по управлению удаленным устройством и отображению получаемой от него информации анонсировано широкое разнообразие элементов («widgets»). Выделим основные из них:

  • Кнопки;
  • Слайдеры;
  • Одноосные и двухосные джойстики;
  • Управление с помощью гироскопа и акселерометров телефона;
  • Различного рода ручки управления;
  • Графики;
  • Стрелочные индикаторы;
  • Всплывающие уведомления.

Полный перечень элементов можно найти на странице проекта Blynk на Kickstarter.

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

Техническая реализация

Принципиальная схема устройства:

Ещё одна система автополива растений с использованием ESP8266 и Blynk - 4

Как видно из представленной схемы, обмен информацией между Arduino и ESP8266 будет осуществляться посредством UART. Чтобы не испытывать проблем при перепрошивке контроллера, Wi-Fi модуль подключим к контактам D2, D3, организовав на этих ножках аппаратный UART (Serial3) и установив скорость в 11520 бод.

У внимательного читателя должен возникнуть логичный вопрос – каким образом будут общаться работающий на 5-вольтовой логике Arduino и 3,3-вольтовый ESP8266? Изучив этот вопрос в Интернете, я пришел к выводу, что большинство не придаёт этой проблеме абсолютно никакого значения (как выяснилось позже – не зря), напрямую соединяя соответствующие ножки этих двух плат. Лишь в нескольких статьях было предложено использовать простейший делитель напряжения, либо специально разработанные преобразователи. Преобразователя у меня естественно не было, поэтому сначала была предпринята попытка реализовать общение с помощью делителя, однако она не привела к каким-либо результатам, и я присоединился к упомянутому выше множеству закрывающих глаза на описанную проблему (благо все заработало и без согласования логических уровней).

Несколько слов о питании ESP8266

Как уже упоминалось во многих туториалах, для нормальной работы ESP необходимо стабильное питание в диапазоне 3,0-3,6 Вольт. Для этого можно использовать различные линейные преобразователи, например, популярный сегодня AMS1117 3.3. В даташите на AMS1117 [4] указано, что входящее напряжение может достигать 15 В. Однако для стабильной работы в режиме выходного тока порядка 1 А рекомендуется понижать входное напряжение (на практике достаточно 5-6 В). По своему опыту скажу, что при подключении преобразователя к источнику 12 В начинается активный нагрев AMS, что быстро приводит к уменьшению выдаваемого напряжения и, как следствие, перезагрузке ESP8266.

Настройка ESP8266

Взаимодействие Arduino и ESP8266 при использовании Blynk можно реализовать двумя различными способами:

  • Использовать «родную» для ESP8266 AT-прошивку, а всю логику управления передать Arduino (т.н. режим «ESP8266 as shield»);
  • Залить в ESP написанный в Arduino IDE скетч с библиотекой Blynk, тем самым передав модулю управление данными, передающимися в мобильное приложение, а Arduino использовать для обработки команд ручного управления, данных с датчика влажности и открытия/закрытия крана (т.н. режим «ESP8266 as standalone»).

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

Для осуществления управления с помощью Blynk необходимо умение залить нужную прошивку на ESP8266. В нашем случае будет использована версия AT-прошивки v0.22 SDK v1.0.0 [5].

Для прошивки плат ESP8266 необходим USB-TTL преобразователь (например, такой [6]), однако, можно использовать и Arduino, замкнув на нем ноги RST и GND между собой, и подключив RX Wi-Fi модуля к RX ноге Arduino, аналогично ТX к TX. Далее переводим ESP8266 в режим перепрошивки (для этого замыкаем выход GPIO0 на землю), и с помощью утилиты XTCom Util заливаем прошивку, как описано здесь [7]. Остаётся только увеличить скорость UART до 115200 бод с помощью AT-команды AT+UART_DEF=115200,8,1,0,0, после чего настройка Wi-Fi модуля будет завершена.

Скетч для Arduino

Основной библиотекой для работы с Blynk под Arduino IDE является библиотека BlynkSimpleEsp8266.h. Рассмотрим основные ее функции.

1) Blynk.begin(auth, «ssid», «pass»)
Как Вы уже догадались, функция получает параметры подключения к Wi-Fi точке – ее SSID и пароль, а также auth token нашего устройства для подключения к Blynk server.

Важно! Процесс подключения к Blynk server начинается только после того, как в программе будет впервые вызвана любая из следующих функций: Blynk.run() или Blynk.connect().

Для отключения/подключения к Blynk server используются функции Blynk.disconnect() и Blynk.connect(), возвращающие результат в булевом типе. Для установления подключения (таймаута в секундах) используется Blynk.connect(s) (по умолчанию таймаут установлен в 30 с).

2) Blynk.run()
Основная функция для синхронизации устройства с Blynk server и получения команд со смартфона. Обычно используется в цикле loop. Кроме того, эта функция позволяет управлять входами и выходами ESP платы (в режиме «Standalone»), не используя нигде в коде такие функции, как digitalRead, digitalWrite, analogRead, analogWrite. Достаточно в приложении на смартфоне добавить на экран управления нужные элементы и соотнести их с нужными GPIO ESP8266.

3) Работа с виртуальными контактами («Virtual Pins»)
Одной из особенностей Blynk является использование виртуальных контактов. Под этим термином понимается логический канал для передачи различной информации между мобильным приложением и устройством, будь то булевы переменные, численные величины (integer или long) или текстовые данные в виде строки. Виртуальные контакты не имеют прямой связи с выводами устройства и используются преимущественно для взаимодействия с библиотеками периферийных модулей (LCD, сервоприводы и пр.) или интерфейсом мобильного приложения.

В коде скетча обработка обращения к виртуальному контакту с номером n происходит с помощью блоков BLYNK_READ(Vn){…} и BLYNK_WRITE(Vn){…}. Внутри фигурных скобок указывается код обработки обращения к виртуальному контакту. Например, если виджет приложения запросит по виртуальному контакту №2 значение влажности почвы для отображения в виде графика, то нам потребуется в скетче прописать что-то наподобие:

BLYNK_READ(V2)
{
//отправляем в приложение текущее значение влажности, хранящееся в переменной humidity:
  Blynk.virtualWrite(2, humidity);
}

Аналогично можно считать параметр, отправляемый, например, через виртуальный контакт №9 от пользователя приложения Blynk:

BLYNK_WRITE(V9)
{
//Записываем полученное значение в целочисленную переменную x:
int x = param.asInt();
}

Здесь используется преобразование входной переменной в целочисленное значение с помощью param.asInt(). Также допустимы преобразования param.asStr() и param.asDouble().

Важно! Процедуры BLYNK_READ/BLYNK_WRITE должны исполняться как можно быстрее, дабы устройство успевало обрабатывать все входящие от приложения запросы. Поэтому настоятельно не рекомендуется использовать функции sllep/delay внутри таких подпрограмм.

Более подробную информацию по функционалу Blynk можно найти на странице github разработчика в папке examples [8] или на странице docs [9].

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

  • Выбор режима работы системы: ручной, по сенсору, по расписанию;
  • Отображение влажности почвы, полученной от системы и вывод исторических данных;
  • Обмен информацией через элемент приложения «терминал».

Я постарался прокомментировать каждый кусок кода, отвечающий за ту или иную функцию системы, поэтому подробно на коде программы останавливаться не будем. Отмечу лишь, что для удобства пользования все внесенные пользователем настройки записываются в энергонезависимую память Arduino (EEPROM).

Скетч можно скачать на GitHub. [10]

Настройка мобильного приложения Blynk

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

  • 4 световых индикатора «led» (Virtual Pins 1, 29, 30, 31);
  • 2 кнопки (Virtual Pins 2, 3);
  • Терминал для обмена информацией (Virtual Pin 4);
  • Числовой индикатор «Value Display» (Virtual Pin 8);
  • График с возможностью отображения исторических данных «History Graph» (Virtual Pin 8);
  • Виджет для активации работы с почтой («Email»);
  • Виджет для активации всплывающих уведомлений («Push»).

После установки мобильного приложения Blynk [11] необходимо зарегистрироваться и выбрать устройство, которым необходимо управлять (в нашем случае это ESP8266). Далее, чтобы не потерять, отправляем себе на почту уникальный auth token, который используется в скетче для аутентификации на серверах Blynk. Ниже – скриншоты, иллюстрирующие настройку приложения.

Создаём новый проект

Ещё одна система автополива растений с использованием ESP8266 и Blynk - 5

В открывшемся окне созданного проекта в правом верхнем углу 3 кнопки: глобальные настройки проекта, добавление элементов (виджетов) на форму и запуск:

Пустая форма нового проекта

Ещё одна система автополива растений с использованием ESP8266 и Blynk - 6

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

Список виджетов для добавления на форму приложения

Ещё одна система автополива растений с использованием ESP8266 и Blynk - 7

Для управления работой системы добавим на форму 2 кнопки: одна будет отвечать за выбор режима работы, вторая — за запуск полива в ручном режиме. Отображение состояния системы на текущий момент оформим с помощью четырех led-индикаторов. Один индикатор будет загораться во время осуществления полива, остальные три необходимы для отображения текущего режима.

Осталось выбрать цвета элементов, добавить подписи и привязать их к нужным виртуальным контактам.

Настраиваем led-индикаторы и кнопки

Ещё одна система автополива растений с использованием ESP8266 и Blynk - 8

Для отображения динамики влажности почвы добавим на форму график с возможностью отображения исторических данных («History Graph»). Текущее значение влажности будем отображать на числовом дисплее («Value Display»).

Добавляем элементы History Graph и Value Display

Ещё одна система автополива растений с использованием ESP8266 и Blynk - 9

Для удобства удаленной настройки параметров системы, а также получения более полной информации о текущем состоянии добавим в приложение терминал. А для получения уведомлений на почту и телефон необходимо поместить на форму еще и элементы «Push» и «Email».

Добавляем элементы Terminal, Push и Email

Ещё одна система автополива растений с использованием ESP8266 и Blynk - 10

Осталось разместить на форме все описанные выше виджеты и мы получим что-то наподобие этого:

Ещё одна система автополива растений с использованием ESP8266 и Blynk - 11

Результат

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

Фотография №1:

Ещё одна система автополива растений с использованием ESP8266 и Blynk - 12

Фотография №2:

Ещё одна система автополива растений с использованием ESP8266 и Blynk - 13

Видео:

Вместо заключения

Подводя итоги создания системы автополива с использованием Blynk можно сказать следующее:

1. Сам по себе сервис Blynk является очень удобным и простым для освоения инструментом, который, благодаря обилию поддерживаемых плат и устройств, легко интегрируется практически в любое устройство. Вкупе с низкой ценой Wi-Fi модуля ESP8266 указанные преимущества позволяют осуществить добавление удаленного управления в конкретный проект с наименьшими усилиями.
Минусами использования такого решения, безусловно, является меньшая гибкость в настройки системы под себя и зависимость от разработчиков приложения, что, однако, нисколько не снижает его заслуг при использовании в небольших DIY-проектах.

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

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

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

Спасибо за внимание!

Автор: e_butcher

Источник [12]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/diy/107610

Ссылки в тексте:

[1] тут: http://geektimes.ru/post/255408/

[2] запущен на Kickstarter 16 января 2015 г: https://www.kickstarter.com/projects/167134865/blynk-build-an-app-for-your-arduino-project-in-5-m

[3] тут: http://community.blynk.cc/t/hardware-supported-by-blynk/16

[4] даташите на AMS1117: http://www.advanced-monolithic.com/pdf/ds1117.pdf

[5] v0.22 SDK v1.0.0: http://esp8266.ru/download/esp8266-firmware/AT22SDK100-2015-03-20-boot1.2.bin

[6] такой: http://www.ebay.com/itm/400565980256?_trksid=p2060778.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

[7] здесь: http://esp8266.ru/esp8266-obnovlenie-proshivki-xtcom_util/

[8] examples: https://github.com/blynkkk/blynk-library/tree/master/examples

[9] docs: http://docs.blynk.cc/

[10] Скетч можно скачать на GitHub.: https://github.com/VarlamovGeorge/avtopoliv/blob/master/avtopoliv.ino

[11] Blynk: http://www.blynk.cc/

[12] Источник: http://geektimes.ru/post/268482/