Проект 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 У проекта появилась протестированная печатная плата
31.01.2018 Изменилась печатная плата. Некоторые элементы заменены на более распространенные и дешевые.
31.01.2018 Корпус зафейлен. Недостаточная высота крышки. Необходимо увеличить на 5мм
02.03.2018 Исходники в открытом доступе
Скачать исходники корпуса
Скачать схему устройства и печатной платы (Eagle)

Устройство

Устройство основано на модуле 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 Печатная плата верх Нажмите на изображение для увеличения

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

Список компонентов

Part     Value          Device                    Package          Library                  Sheet

BT1      CR2032         BATTERY-20MM_PTH          BATTCOM_20MM_PTH SparkFun-Batteries       1
C1       1uf            C-EUC1206K                C1206K           resistor                 1
C2       100uF          100UF-POLAR-25V-20%(ELEC) PANASONIC_D      SparkFun-Capacitors      1
C3       100uF          100UF-POLAR-25V-20%(ELEC) PANASONIC_D      SparkFun-Capacitors      1
C4       100uF          100UF-POLAR-25V-20%(ELEC) PANASONIC_D      SparkFun-Capacitors      1
C5       0.1uf          C-EUC1206K                C1206K           resistor                 1
C6       100uF          100UF-POLAR-25V-20%(ELEC) PANASONIC_D      SparkFun-Capacitors      1
C8       100uf          C-EUC1210K                C1210K           resistor                 1
C9       0.1uf          C-EUC1206K                C1206K           resistor                 1
C10      0.1uf          C-EUC1206K                C1206K           resistor                 1
D1       1N4148         DIODE-SOD80C              SOD80C           diode                    1
D2       1N4148         DIODE-SOD80C              SOD80C           diode                    1
D3       1N5822         SCHOTTKY-DIODESMD         SMB              diode                    1
D4       1N5822         SCHOTTKY-DIODESMD         SMB              diode                    1
EN       DTS-6          DTS-6                     DTS-6            switch-tact              1
IC1      ESP-WROOM-32   ESP-WROOM-32              ESP-WROOM-32     esp32                    1
IC2      DS3231         DS3231                    SO16             DS3231                   1
IC3      LM2596S        LM2596S                   TO263-5          national-semiconductor   1
IC4      LM2596S        LM2596S                   TO263-5          national-semiconductor   1
IO0      DTS-6          DTS-6                     DTS-6            switch-tact              1
JP1      Serial         PINHD-1X4                 1X04             pinhead                  1
L1       DR127          DR127                     DR127            inductors                1
L2       DR127          DR127                     DR127            inductors                1
LED1     GREEN          LEDSMT1206                1206             led                      1
OK1      PC817          PC817                     DIL04            optocoupler              1
OK2      PC817          PC817                     DIL04            optocoupler              1
Q1       BC817-40SMD    BC817-40SMD               SOT23-BEC        transistor-npn           1
Q2       BC817-40SMD    BC817-40SMD               SOT23-BEC        transistor-npn           1
Q3       BC817-40SMD    BC817-40SMD               SOT23-BEC        transistor-npn           1
R1       1K             R-EU_R1206                R1206            resistor                 1
R2       1K             R-EU_R1206                R1206            resistor                 1
R3       510            R-EU_R1206                R1206            resistor                 1
R4       510            R-EU_R1206                R1206            resistor                 1
R5       10K            R-EU_M1206                M1206            resistor                 1
R6       1K             R-EU_R1206                R1206            resistor                 1
R7       4K7            R-EU_R1206                R1206            resistor                 1
R8       4K7            R-EU_R1206                R1206            resistor                 1
R9       4K7            R-EU_R1206                R1206            resistor                 1
R10      4K7            R-EU_R1206                R1206            resistor                 1
R12      10K            R-EU_M1206                M1206            resistor                 1
R13      10K            R-EU_M1206                M1206            resistor                 1
R14      10K            R-EU_M1206                M1206            resistor                 1
R15      10K            R-EU_M1206                M1206            resistor                 1
R16      10K            R-EU_M1206                M1206            resistor                 1
RELAY1   RELAYPTH       RELAYPTH                  SRD-05VDC-SL-C   SRD-05VDC-SL-C           1
RELAY2   RELAYPTH       RELAYPTH                  SRD-05VDC-SL-C   SRD-05VDC-SL-C           1
U$1      DBCONN-1X2     DBCONN-1X2                DBCONN-1X2       Terminal Block Connector 1
U$2      DBCONN-1X2     DBCONN-1X2                DBCONN-1X2       Terminal Block Connector 1
U$3      DBCONN-1X2     DBCONN-1X2                DBCONN-1X2       Terminal Block Connector 1
U$4      DBCONN-1X2     DBCONN-1X2                DBCONN-1X2       Terminal Block Connector 1
U$5      DBCONN-1X2     DBCONN-1X2                DBCONN-1X2       Terminal Block Connector 1
U$6      DBCONN-1X2     DBCONN-1X2                DBCONN-1X2       Terminal Block Connector 1
U$7      DBCONN-1X2     DBCONN-1X2                DBCONN-1X2       Terminal Block Connector 1
U$8      DBCONN-1X2     DBCONN-1X2                DBCONN-1X2       Terminal Block Connector 1
U$9      DBCONN-1X2     DBCONN-1X2                DBCONN-1X2       Terminal Block Connector 1
U$10     DBCONN-1X2     DBCONN-1X2                DBCONN-1X2       Terminal Block Connector 1
U$11     DBCONN-1X2     DBCONN-1X2                DBCONN-1X2       Terminal Block Connector 1
U$12     DBCONN-1X2     DBCONN-1X2                DBCONN-1X2       Terminal Block Connector 1
U$13     DBCONN-1X2     DBCONN-1X2                DBCONN-1X2       Terminal Block Connector 1
U$14     DBCONN-1X2     DBCONN-1X2                DBCONN-1X2       Terminal Block Connector 1
                

Прошивка

Скетч для 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