Електронний замок з RFID-ключами на NodeMCU

SmartLock

Почну з того, що шлях приборкання ESP8266_RTOS_SDK, а саме такий шлях я обрав для себе, дається нелегко. Останньою перемогою була оптимізація бібліотеки RFID зчитувача карт з STM на ESP. З чого і продовжилася історія цього проекту розумного замку, за сумісництвом і дзвінка.

Дана стаття не є уроком. Я лише описую в ній свій пристрій з відкритим вихідним кодом і його роботу. що б ви могли зачерпнути деякі ідеї або реалізації для своїх проектів.

Технічні описи будуть представлені в репозиторіях проектів, а тут я коротко опишу принципи і ресурси.

"Мозком" пристрою є контролер ESP8266 виконує роль валідатора карт, управління замком, дзвінка і сполучного з зовнішнім світом модуля. З цим йому допомагають:

У вихідному коді прошивки все не ідеально, але я намагаюся вдосконалюватися. Всі частини прошивки розташовані в різних компонентах і незалежні. Це означає, що є компоненти:

  • lock_access - відповідає за надання доступу по карті
  • lock_connect - відповідає за з'єднання замку з мережею і сервером
  • lock_hardware - відповідає за управління залізної частиною замку (дверима, якщо так зрозуміліше)
  • rc522 - оптимізована під цільової SDK бібліотека зв'язку з модулем зчитувача RFID міток

З назвою і призначенням розібралися. Далі про незалежність.. Кожен з компонентів запускається і працює паралельно, а дані обмінюються за допомогою функціоналу RTOS. Таким чином замок не перестане працювати, якщо раптом з Wi-Fi трапиться біда. А потрапити додому, якщо модуль зчитувача карт дасть збій, можна буде через телефон і сервер MQTT подавши модулю сигнал відрити двері.

зараз, через брак практики застосування, модуль залізної частини замку не відкалібрований під реальні завдання, але передбачені функції відкриття і закриття замку хоча зараз більшість замків працюють за принципом відкриття і замикання, але у мене немає фінансової можливості організувати поле для застосування на практиці. Надалі будуть удосконалення засновані на реальних подіях так би мовити.

Розберемо деякі можливості компонентів

Кожен компонент має мінімум 1 функцію - функцію ініціалізації. Вона в кінцевому підсумку запускає задачу з логікою обробки запитів компонентом. Завдання зроблена для того, що б легко додавати нові компоненти без змін старих.

lock_access

Цей компонент инициализирует модуль зчитувача карт і його завдання в циклі опитувати наявність карти і зчитувати її UID для ідентифікації. При ідентфікаціі правильної карти модуль записує в загальну групу подій (можливості RTOS) сигнал про отримання доступу по карті, інакше - сигнал про блокування доступу по карті.

Щоб не "задовбувати" зчитувач, в циклі передбачена затримка в 100 мс. що на відгук відчутно не впливає.

lock_connect

У цьому компоненті 2 функції ініціалізації для Wi-FI і MQTT.

У ініціалізації Wi-Fi прошивка намагається з'єднатися з точкою доступу, ім'я та пароль якої , на даний момент, прописуються при компіляції прошивки. при удачі, записує в окрему групу подій біт про підключення.

MQTT створює завдання, в якій чекає з'єднання з точкою доступу. після підключення, проводиться спроба з'єднання з брокером MQTT.

Коли замок отримує повідомлення, прошивка посилає відповідний біт в групу подій всієї прошивки. Наприклад: якщо Ви захочете відкрити замок з телефону, на замок прийде повідомлення і потрапить в групу.

Також завдання MQTT чекає події, яке має опрацювати. Це події отримання / відмови доступу по карті і подія натискання на дзвінок. Відповідно Ваш телефон або інша частина "розумного будинку" отримає повідомлення про це обитій.

lock_hardware

На даний момент відповідає за 2 пристрою: сам замок і дзвінок (кнопку). У ініціалізації включаються відповідні висновки модуля.

У задачі компонент чекає події від компонента lock_access про отримання доступу або компонента lock_connect про запит на відкриття дверей по MQTT.

Також тут відбувається обробка події натискання кнопки, за яким компонент залишає відповідний біт в групі подій.

rc522

Робота цього компонента буде описана у відповідній його сховища вікі сторінці.

схема


Зчитувач підключається по інтерфейсу SPI. Пін для управління клямкою (ел.замком) зараз є D1, а для відстеження натискання клавіші дзвінка испоьзуется пін D2.

висновок

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

Подальша розробка буде спрямована на "розумне" висвітлення й прилади, і дешових мережу, керуючу ними.

Іходнікі


Дякую за увагу! НЕ вболівайте.