Проект FREEBEES

Freebees AC Control


UPD

26.11.2017 Соединение между сайтом и брокером теперь устанавливается по SSL
02.12.2017 Время на сервере и в устройстве хранятся в UTC. Поэтому для отображения правильного времени для вашего региона необходимо выбрать временную зону в настройках.
26.12.2017 Изменилась схема устройства
31.12.2017 Для проекта разработана 3D модель корпуса. Еще не протестирована.
13.01.2018 Протестирована схема
13.01.2018 У проекта появилась протестированная печатная плата

Устройство

Устройство основано на модуле ESP-WROOM-32 с 4MB Flash памяти. В качестве считывателей используются китайские, красные модули на PN532, подключенные к Hardware Serial модуля ESP32. Исполнительные устройства - 2 реле с оптической развязкой. Предусмотрено 2 датчика открытия дверей, 2 выхода для пьезо-пищалок, 2 входа для кнопок прохода. 1 выход для статусного светодиода, 1 вход для кнопки перехода в режим конфигурации. Концепция устройства предусматривает функционирование при отсутствии связи с сервером. Т.е. устройство должно принимать решение о предоставлении доступа при отсутствии подключения по WiFi или при отсутствии связи с брокером.


Назначение пинов

Считыватель 1 TX IO4
Считыватель 1 RX IO5
Считыватель 2 TX IO26
Считыватель 2 RX IO27
Зуммер 1 IO16
Зуммер 2 IO17
Управление реле 1 IO18
Управление реле 2 IO19
Датчик открытия двери 1 IO32
Датчик открытия двери 2 IO33
Кнопка прохода 1 IO12
Кнопка прохода 2 IO14
Часы реального времени SDA IO21
Часы реального времени SCL IO22
Статусный светодиод IO2
Кнопка настройки IO0

Схема

ESP32 PN532 MQTT DS3231 Схема Нажмите на изображение для увеличения

Печатная плата

ESP32 PN532 MQTT DS3231 PCB Печатная плата верх Нажмите на изображение для увеличения

ESP32 PN532 MQTT DS3231 PCB Печатная плата низ Нажмите на изображение для увеличения

Прошивка

Скетч для Aduino IDE находится тут - https://bitbucket.org/dadja_sam/freebees-ac-arduino Перед записью сетча необходимо загрузить файлы из папки data в SPIFFS при помощи плагина Arduino ESP32 filesystem uploader. Инструкция по установке плагина для Arduino IDE и сам плагин находятся тут - https://github.com/me-no-dev/arduino-esp32fs-plugin Файл config.json в папке data/auth должен быть в формате

{
    "cmd":"config",
    "relaytype":"1",
    "ssid":"*",
    "ssidpass":"*",
    "mqttuser":"*",
    "mqttuser":"*",
    "adminpass":"*"
}
Где ssid - имя точки доступа, ssidpass - пароль точки доступа, mqttuser - имя пользователя, указанного при регистрации на сайте, mqttuser - пароль пользователя, указанного при регистрации на сайте, relaytype - порядок управление реле (1 - выключить на время, 0 - включить на время). Библиотека PubSubClient имеет ограничение на размер пакета, поэтому в файле библиотеки PubSubClient.h параметр #define MQTT_MAX_PACKET_SIZE необходимо установить в 2048. Это позволит запрашивать с брокера больше записей при синхронизации устройства. Лимит на количество единовременно запрашиваемых записей устанавливается в скетче переменной accessLimit. Лимит по умолчанию - 16. Сейчас одна запись составляет 88 байт. Поэтому параметра MQTT_MAX_PACKET_SIZE установленного в 2048 достаточно. Так же в библиотеке PN532_HSU необходимо закомментировать строку _serial->begin(115200); Это позволит использовать Hardware Serial интерфейс модуля ESP32. Примерная схема взаимодействия фронтэнда/бэкэнда с брокером и устройством расположена тут - Google docs

Библиотеки

Arduino core for ESP32 WiFi chipБиблиотека для поддержки ESP32 средой Arduino IDE. https://github.com/espressif/arduino-esp32
PubSubClientБиблиотека для поддержки MQTT протокола. Доступна в менеджере библиотек Arduino IDE
RTClibБиблиотека для поддержки часов DS3231. https://github.com/adafruit/RTClib
ArduinoJsonСоздание и парсинг JSON строк. Доступна в менеджере библиотек Arduino IDE
AsyncTCPБиблиотека для поддержки асинхронных TCP соединений. Доступна в менеджере библиотек Arduino IDE. Версия для ESP32
ESPAsyncWebServerАсинхронный веб-сервер https://github.com/me-no-dev/ESPAsyncWebServer
PN532, PN532_HSUБиблиотека поддержки модулей на чипе PN532 https://github.com/elechouse/PN532

Корпус

Корпус еще не протестирован! ESP32 PN532 MQTT DS3231 Корпус Нажмите на изображение для увеличения ESP32 PN532 MQTT DS3231 Корпус крышка Нажмите на изображение для увеличения

Проблемы

Устройство расчитано на 2 считывателя PN532 и на 2 двери. Для поддержки 2х считывателей используется 2 hardware serial интерфейса модуля ESP32. Проблема заключается в том, что при отсутствии подключенного второго считывателя модуль уходит в циклическую перезагрузку. Определить подключен ли считыватель невозможно т.к. модуль перезагружается при инициализиции Hardware Serial интерфейса в строке Serial2.begin(115200, SERIAL_8N1, READER2_TX_PIN, READER2_RX_PIN); Поэтому для поддержки конфигурации с одним считывателем необходимо вручную удалять функционал связанный с поддержкой второго считывателя.

При потере соединения WiFi устройство не переподключается автоматически

Не проверяется время действия ключа

Невозможно изменить пароль по умолчанию для портала конфигурации никакими другими средствами кроме как заменой его в скетче. Пароль по умолчанию - admin Пароль портала конфигурации можно поменять на портале конфигурации, когда устройство находится в режиме точки доступа. Пароль по умолчанию - admin. Так же пароль можно задать в файле config.json

Не реализовано сохранение событий во внутреннюю память устройства при отсутствии связи

Фронтэнд держит соединение только 3600 секунд

Ни брокер ни устройство не поддерживают безопасное соединение

#Контроль доступа #Access control #ESP32 #PN532 #MQTT #DS3231