Программа контроллера гроубокса. Интерфейс пользователя.

Гроубокс

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

Предыдущая статья     Список статей     Следующая статья

В предыдущей статье я обосновал выбор способа управления гроубоксом – Web-сервер или Web-сайт в собственной WiFi –сети контроллера. На корпусе устройства из элементов контроля и управления – только светодиод состояния.

 

Интерфейс пользователя.

Теперь подробно, как управлять гроубоксом.

Контроллер создает свою собственную WiFi-сеть, точку доступа. Через нее можно смотреть состояние и управлять гроубоксом через любое устройство, имеющее WiFi – смартфон, планшет, ноутбук.

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

Окно подключения WiFi

Дальше есть 2 варианта реакции системы, которые могут быть выбраны в программе:

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

Основное окно гроубокса

Это основное окно для управления и контроля состояния гроубокса.

Я не большой специалист в HTML-программировании. Поэтому реализовал самое простое оформление Web-страницы. Но получилось наглядно, понятно, удобно. Вряд ли кто-то будет собирать устройство для того, чтобы любоваться красивой картинкой на смартфоне.

Вся информация на экране обновляется каждые 2 секунды.

Первый абзац показывает текущее время. Оно хранится в энергонезависимых часах и не теряется при выключении питания. Установить его можно нажав соответствующую ссылку.

Окно установки времени

Окно установки времени

Операция завершается нажатием кнопки ”Отправить”.

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

  • Звездочки ”***” красного цвета означают, что освещение включено.
  • Звездочки ”***” черного цвета показывают, что освещение отключено.
  • В начале и конце строки показаны времена включения и выключения освещения.

По ссылке ”установить” открывается страница задания параметров освещения.

Окно установки освещения гроубокса

Окно установки освещения гроубокса

Полив происходит с максимальным циклом неделя. Абзац полива показывает:

  • Дни недели, в которые надо поливать. Отмечены жирным шрифтом.
  • Символы ”…..” означают, что в данный момент полив не происходит.
  • Символы ”’ ‘ ‘ ‘ ‘” означают, что в данный момент идет полив.
  • Время перед символами состояния показывает начало полива.
  • Время в конце строки – длительность полива.

Окно полива

Этот абзац, как пример, сообщает, что полив происходит по понедельникам, средам и субботам, в 8 часов вечера, в течение 1 минуты и 15 секунд.

Как задавать параметры полива догадаться не трудно.

Окно полива

Все параметры хранятся во FLASH микроконтроллера, защищены контрольными кодами и при выключении питания не теряются.

Остается рассказать о светодиоде состояния контроллера.

Программа раз в секунду считывает время часов, параметры из FLASH и осуществляет управление реле. Этот цикл является основным. В нем светодиод изменяет свое состояние, т.е. секунду светится, секунду погашен.

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

Такое может случиться в случае, если ES88266 “отвлечется” на значительное время, например, при подключении к сети WiFi. Это не является ошибкой.

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

Также светодиод частым миганием индицирует ошибку параметров (не соответствие контрольных кодов) и ошибку часов реального времени.

При ошибке параметров отключается управление, использующее соответствующие параметры. При ошибке часов, отключается и освещение, и полив.

Тоже самое о светодиоде состояния в более строгой форме.

  • Мигает редко (секунду светится, секунду погашен) – нормальная работа.
  • Мигает часто (3 раза в секунду) не дольше 20 секунд - ожидание завершения операций WiFi. Бывает редко. Тоже нормальная работа.
  • Мигает часто (3 раза в секунду) дольше 20 секунд – ошибка.
    • Неисправны часы реального времени – аппаратная ошибка.
    • Неправильные параметры во FLASH. Исправляется переустановкой данных.

 

Подготовка Arduino IDE.

Мы будем разрабатывать программу, и загружать ее в контроллер в среде Ардуино. Необходимо выполнить минимальные действия для подготовки Arduino IDE.

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

В нижней строке окна Настройки указываем путь для менеджера плат:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Окно Настройки

Откройте менеджер плат: Инструменты -> Плата -> Менеджер плат.

И установите нужную плату.

Окно менеджер плат

После загрузки в окне Инструменты -> Плата выбрать нужный модуль. У меня ESP-12E.

Окно Инструменты

В предыдущей статье я привел 2 схемы для загрузки программы во FLASH модуля и описал последовательность действий для каждой из них. В остальном, работа в Arduino IDE с ESP-модулями не отличается от стандартных плат Ардуино.

 

Программное обеспечение контроллера гроубокса.

Программа состоит из 2х параллельно работающих частей: Web-сервера и блока управления.

Web-сервер:

  • Организует TCP/IP соединение с клиентом.
  • Формирует главную страницу, используя HTTP-протокол.
  • Обрабатывает GET-запросы установки параметров.
  • Формирует страницы установки параметров.

Сейчас объясню, что происходит и какие данные необходимо задать.

Созданы TCP/IP и DNS серверы.

WiFiServer server(80);
DNSServer dnsServer;

Параметры заданы в следующих строках.

const char* ssid = "Banan";  // имя сети устройства
const char* password = "12345678"; // пароль сети устройства
//const char* password = ""; // без пароля
const char* dnsName = "*";  // имя dns
IPAddress apIP(192, 168, 4, 1);

Вам необходимо заполнить их своими данными.

Если вы укажите в качестве имени dns ”*”, то это означает, что любое имя домена будет преобразовано в IP-адрес  192.168.4.1. При подключении к сети WiFi смартфонов, главное окно будет появляться автоматически.

На ноутбуке это может не сработать. Тогда необходимо явно ввести IP-адрес в адресной строке браузера:  http://192.168.4.1.

Можно задать конкретное имя dns, например,

const char* dnsName = "b.ru";  // имя dns

В этом случае придется в браузере указывать адрес b.ru.

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

По первому HTTP-запросу клиенту передается главная страница и соединение разрывается.

В заголовке есть команда

client.println(F("Refresh: 2"));  // обновить страницу автоматически

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

Как только пользователь нажимает на ссылку, например ”Установить параметры освещения”, то формируется GET-запрос. Он задан в самой ссылке.

<a href=\"/set/light\">

По этому запросу контроллер передает клиенту страницу задания параметров освещения.

На ней пользователь заполняет форму со стандартными HTML-объектами и посылает GET-запрос, в котором указаны параметры освещения.

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

В программном блоке управления каждую секунду:

  • Считывается время из часов реального времени. Если часы остановились, то они перезапускаются.
  • Считываются и проверяются на целостность технологические параметры из FLASH.
  • Происходит управление сигналами включения освещения и полива в зависимости от текущего времени и заданных параметров.

 

Обработка ошибок и реализация сторожевого таймера ESP8266.

ESP8266 имеет свойство периодически, а иногда и навсегда зависать при обработке подключений по WiFi-сети. То ли недоработка внутреннего программного обеспечения, то ли недостаток ресурсов микроконтроллера.

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

Чтобы исключить такие ситуации я создал программный сторожевой таймер. В прерывании аппаратного таймера с периодом 50 мс контролируется время прохождения точки, в которой считывается время часов. При нормальной работе это время равно 1 секунде. При превышении его до 1,25 секунды, начинает часто мигать светодиод состояния, и сторожевой таймер отсчитывает время, заданное в строке:

#define WDT_TIME 400  // время сторожевого таймера (* 50 мс)

При превышении его (20 секунд), система перезапускается.

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

#define RTC_SCL 5 // часы (D1)
#define RTC_SDA 4 // часы (D2)
#define LIGHT_PIN 15 // реле освещения _-_ (D8)
#define WATER_PIN 13 // реле полива _-_ (D7)
#define LED_PIN 16 // светодиод (D0)

Загрузить итоговый скетч можно по ссылке.

  Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!  

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

 

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

 

Предыдущая статья     Список статей     Следующая статья

0

Автор публикации

не в сети 1 неделя

Эдуард

214
Комментарии: 1739Публикации: 177Регистрация: 13-12-2015

Один комментарий на «Программа контроллера гроубокса. Интерфейс пользователя.»

  1. Для вентиляторов вырезаем на глаз 4 полоски к крепим их к вентилятору. Один вентилятор устанавливаем в верхней части каркаса таким образом, чтобы он выдувал воздух из гроубокса. К фитолампе необходимо прикрепить 4 уголка, по 2 с двух сторон, НО таким образом, чтобы при установки фитолампы в корпус, отверстия в лампе были за пределами корпуса. Иначе лампа будет греться и выйдет из строя.

    0

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных".