Програмування та налаштування WiFi контролера
У попередній статті я розповів про складання нового контролера управління вологістю. Тепер розповім про особливості програми, алгоритми управління та налаштування цього контролера.
ESP8266, на відміну від Atmegі328, на якій була реалізована попередня версія, має дуже привабливі характеристики:
Це все разом із вбудованим WiFi дозволяє реалізувати функції вбудованого WEB-сервера, не заощаджуючи пам'ять для текстових рядків.
А ось з GPIO у ESP8266 досить погано, тому така розкіш, як управління семисегментним індикатором безпосередньо йому не доступна. Тому і вибраний індикатор на мікросхемі TM1637, що вимагає підключення всього два висновку.
Середовище розробки
Так як я освоїв розробку керуючої програми для ESP8266 під Arduino IDE, багато старого коду, що забезпечує основну логіку роботи контролера управління вентилятором збереглося з попередньої версії.
В основному цікаво було перенести алгоритм, що добре зарекомендував себе, що реалізує кінцевий детерменований автомат станів, описаний в таблиці переходів станів:

Реалізація нових функцій
Дуже незручно робити контролери WiFi, в яких зашиваються параметри підключення до мережі. Уявляєте, у що виллється зміна імені точки доступу чи пароля за наявності десятка таких контролерів вдома?
Тому в даній програмі реалізовані функції збереження параметрів підключення до енергонезалежної пам'яті EEPROM та налаштування їх через мережу. Структура для збереження параметрів, а також читання та запис її реалізовані у файлах WC_EEPROM.h та WC_EEPROM.cpp мого проекту. Верифікація читання та запису здійснюється за допомогою обчислення контрольної суми конфігурації та порівняння її із записаною в EEPROM.
Крімконфігурації мережі в пам'ять зберігаються також всі таймаути та інші параметри алгоритму керування вентилятора, що дозволяє оптимізувати та налаштовувати цей контролер прямо «по повітрю».
Відображення режимів роботи, налаштування конфігурацій контролера, а також безпосереднє керування вентилятором реалізовано за допомогою вбудованого WEB-сервера (фали WC_HTTP.h та WC_НTTP.cpp)
Алгоритм налаштування точки доступу наступний:
Головна сторінка WEB-сервера показує основні параметри контролера та дозволяє вручну увімкнути/вимкнути контролер (аналог натискання кнопки ручного керування)

Тут же можна перейти на сторінку налаштувань мережі

І сторінку налаштувань алгоритму роботи контролера

З цих двох сторінок можна виконати перезавантаження контролера та скидання всіх налаштувань «за умовчанням».
«Наводити красу» на інтерфейс я ще планую в майбутньому, коли концепція розумного будинку на WiFi устаканиться у мене в голові.
Ще одна функція, реалізована в цій програмі — годинник реального часу, що синхронізується за протоколом NTP в інтернеті. (Файли WC_NTP.h та WC_NTP.cpp)
Опис основного алгоритму описувати не буду, логіка залишилася незмінною і почитати про неї можна в цій статті. Основні зміни торкнулися дисплея. Хочу звернути увагу на одну "фічу" - функцію DisplaySpecialChar(), яка дозволяє по бітовій масці вивести будь-який символ, який можна придумати для відображення на семисегментному індикаторі. Я придумав такий символ «відсотків» у відображенні вологості

І символ «градусів» при відображенні температури

Біти у бітовій масці відповідають сегментам індикатора.
Ну і остання з нових функцій – збереженняпараметрів на сервер в інтернеті для відображення та подальшого аналізу. Зберігаються значення вологості, температури, аналогового порту з фоторезистором для підстроювання порога спрацьовування освітлення, час роботи вентилятора, час горіння світла та UPTIME-час роботи контролера від останнього перезавантаження.
Запис на сервер відбувається у двох режимах. З більшою періодичністю записуються параметри, коли у ванній «щось відбувається», в цей час або світиться, або працює вентилятор. Усі таймінги налаштовуються через WEB-інтерфейс.
Зберігаються дані на сервер в інтернеті. Адреса сервера можна налаштувати, а ось формат запису поки зашитий у програму. Знову до кращих часів устаканиванія концепції))). Зараз параметри зберігаються найпростішим PHP-скриптом у таблицю із найпростішою структурою.

Досить просто переналаштувати збереження параметрів на той самий «народний моніторинг». Особисто це сервер не влаштовує обмеженнями в періодичності збереження даних і глибині архіву.
Оптимізація налаштувань контролера
Після «дослідної експлуатації» можна визначити, чи правильно встановлені пороги спрацьовування освітлення та вологості, а також таймаути різних подій. У минулій реалізації я встановив час спрацьовування 20 хвилин, сидячи у ванній кімнаті з секундоміром. Поспостерігавши за графіком параметрів під час кількох прийняття душа я побачив наступне:

- Вологість взимку змінюється на 35-40%
- Час нормалізації вологості при природній вентиляції 20-25 хвилин
- Час нормалізації вологості з працюючим вентилятором 10-12 хв.
- Вентилятор підвищує ефективність провітрювання вдвічі
Тому можна сміливо знизити час роботи вентилятора до 12 хв, тим самимпродовживши час його служби і трохи заощадивши електроенергію. Подібний аналіз можна провести для інших пір року, коли вологість у квартирі зовсім інша.
Тепер, після проведення аналізу, можна збільшити період запису параметрів на сервер.
Скетч можна завантажити тут. Буду дуже вдячний, якщо повідомите про знайдені помилки.
А ми з Тимофієм відпочинемо від праць праведних 😉