В этом проекте представлены исходные коды прошивки для контроллера ESP-32, позволяющие организовать контроллер управления аквариумным оборудованием. Функционал:
- Возможность управления 4-мя нагрузками (напряжения 220 вольт и ниже) при подключении блока из 4х реле к микроконтроллеру ESP-32
- Каналы разделены по смыслу (освещение, обогрев, аэрация, фильтрация), каждый можно настроить в один из 3х режимов (всегда включен, всегда выключен, автоматическое управление)
- Возможность настройки контроллера командами через Serial Port
- Возможность настройки контроллера и просмотра текущего статуса через Web интерфейс
- Автоматическая настройка и подстройка времени при подключении к сети WiFi имеющей доступ в интернет используя NTP протокол
- Возможность подключения модуля часов реального времени к микроконтроллеру
- Возможность подключения датчиков температуры воды и воздуха к микроконтроллеру
- Возможность обновления настроек через внешний сервер а так же отправки статистики используя REST API
Сборка прошивки а так же загрузка в микроконтроллер выполняется с помощью Arduino IDE. Для того, чтобы Arduino IDE смогла работать с микроконтроллером ESP-32 необходимо установить необходимые библиотеки: https://github.com/espressif/arduino-esp32 (инструкция на русском языке: https://habr.com/post/404685/)
После этого необходимо открыть файл aqua_controller.ino через Arduino IDE. Сборка и загрузка на плату выполняется стандартно.
Блок реле, датчики температуры подключаются к любым удобным для вас пинам на плате. Объявления используемых пинов находятся в файле defines.h, если пины не совпадают с вашими, необходимо внести изменения в этот файл перед сборкой прошивки. Модуль часов реального времени подключается к шине I2C.
При первом запуске и пока не будет настроен WiFi, контроллер будет работать в режиме точки доступа.
- SSID: aqua-controller
- Пароль: 1234567890
Вы можете подключиться к ней и перейдя по адресу http://192.168.4.1 попасть в Web интерфейс контроллера, и указать SSID и пароль от WiFi сети, к которой должен подключаться контроллер, а так же произвести другие настройки. Либо вы можете подключить плату через USB к компьютеру и через Serial Monitor произвести настройку подключения к WiFi командами. Команды будут описаны в отдельной секции.
На данный момент доступны следующие команды:
- set ssid имя_сети - устанавливает название WiFi сети к которой будет осуществляться подключение в режиме клиента
- set password пароль - устанавливает пароль который будет использоваться при подключении к WiFi сети
- restart - перезагружает контроллер
- reset - сбрасывает настройки WiFi по-умолчанию (включается режим точки доступа)
Контроллер может работать с внешним сервером по REST API. Настроить подключение к внешнему серверу можно в Web-интерфейсе. В нем необходимо указать базовый адрес api, токен который будет использоваться для авторизации и номер аквариума. Это необходимо для возможности собирать информацию в одном месте с нескольких контроллеров. Api должен реализовывать как минимум 2 метода:
- GET /aquariums/:id/settings - где :id - номер аквариума. Метод должен возвращать json объект с настройками для контроллера. Пример ответа:
{"heating": "1", "aeration": "3", "lighting": "1", "filtering": "1", "endLighting": "2100", "startLighting": "900", "maintainTemperature": "25"}
где:
- heating - режим работы обогрева (1 - авто, 2 - всегда включен, 3 - всегда выключен)
- aeration - режим работы аэрации (1 - авто, 2 - всегда включен, 3 - всегда выключен)
- lighting - режим работы освещения (1 - авто, 2 - всегда включен, 3 - всегда выключен)
- filtering - режим работы фильтрации (1 - авто, 2 - всегда включен, 3 - всегда выключен)
- startLighting - время включения освещения при работы в автоматическом режиме. Представляет собой запись слитно часа и минут. Например если нужно включать свет в 10:30, значение будет выглядеть вот так: 1030.
- endLighting - время отключения освещения при работе в автоматическом режиме. Представляет собой запись слитно часа и минут. Например если нужно выключать свет в 22:30, значение будет выглядеть вот так: 2230.
- maintainTemperature - температура в градусах цельсия, которую будет пытаться поддерживать контроллер включая и выключая обогрев при необходимости (обогрев должен быть в автоматическом режиме)
- POST /aquariums/:id/stats - где :id - номер аквариума. Данные отправляются в теле HTTP запроса json кодированной строкой. Пример:
{"heating":"1", "aeration": "1", "lighting": "0", "filtering": "1", "maintainTemperature": "24", "outerTemperature": "17"}
где:
- heating - включен ли сейчас обогрев (1 - да, 0 - нет)
- aeration - включена ли сейчас аэрация (1 - да, 0 - нет)
- lighting - включено ли сейчас освещение (1 - да, 0 - нет)
- filtering - включена ли сейчас фильтрация (1 - да, 0 - нет)
- maintainTemperature - температура воды в аквариуме в градусах Цельсия
- outerTemperature - температура воздуха в градусах Цельсия
эти методы API вызываются раз в 5 минут.
- Dev-board ESP-32
- Датчик температуры воды: DS18B20 с гидрозащитой
- Датчик температуры воздуха: DHT22
- Часы реального времени: DS3231
- Блок реле на 4 канала с включением по низкому уровню сигнала
Перечисленные ниже библиотеки используются для сборки проекта. Если они не установлены в вашей Arduino IDE, их необходимо установить, иначе сборка прошивки будет невозможна.
- https://github.com/bblanchon/ArduinoJson
- https://github.com/milesburton/Arduino-Temperature-Control-Library
- https://github.com/me-no-dev/AsyncTCP
- https://github.com/adafruit/DHT-sensor-library
- https://github.com/me-no-dev/ESPAsyncWebServer
- https://github.com/PaulStoffregen/OneWire
- https://github.com/adafruit/RTClib