Система учета посетителей на NodeMCU ESP8266 и RFID метках


Радиочастотная идентификация (Radio Frequency Identification, RFID) – это простая и дешевая технология, позволяющая считывать с помощью специального устройства значение радиочастотных меток. Она находит широкое применение в системах контроля доступа, системах безопасности, для маркировки товаров в супермаркетах и т.д. На нашем сайте вы можете посмотреть все проекты, в которых использовалась радиочастотная идентификация, по этой ссылке.

В данной статье мы рассмотрим создание системы учета посетителей на основе радиочастотной идентификации и платы NodeMCU ESP8266, с помощью которой можно будет не только мониторить лог событий захода посетителей, но также передавать этот лог событий на удаленный сервер.

Необходимые компоненты

  1. NodeMCU ESP8266 (купить на AliExpress).
  2. Модуль чтения RFID меток EM-18 и карты (метки) к нему (купить на AliExpress).
  3. ЖК дисплей 16x2 и модуль I2C для него (купить на AliExpress).
  4. Макетная плата.
  5. Соединительные провода.

Модуль считывания RFID меток EM-18

Внешний вид модуля считывания RFID меток EM-18 показан на следующем рисунке.

Внешний вид модуля считывания RFID меток EM18 и карт к нему

Принцип технологии RFID (радиочастотной идентификации) достаточно прост. В данной технологии цифровые данные закодированы в виде RFID меток, которые могут быть декодированы (расшифрованы) с помощью считывателя RFID меток с использованием радиоволн. В этом плане технология радиочастотной идентификации во многом похожа на технологию привычных нам штрих-кодов, считывание которых осуществляется специальными устройствами.

Модуль чтения RFID меток EM-18 позволяет считывать информацию об идентификаторах (ID information), размещенных в RFID метках. Идентификатор RFID метки содержит уникальный 12-значный номер, который может быть считан модулем EM18 когда радиочастотная метка попадает в поле его действия (8-12 см). Модуль работает на частоте 125 кГц, содержит встроенную антенну и запитывается от напряжения 5 В постоянного тока. Считанные данные модуль передает другим устройствам с помощью последовательной связи со скоростью 9600 бод (8 бит данных и 1 стоповый бит).

Модуль EM-18 широко применяется во встраиваемой электронике и имеет ряд интересных особенностей. К примеру, его можно запитывать напряжением в диапазоне от +4.5V до 5.5V DC. Модуль во время своей работы потребляет всего 50mA тока, поэтому его можно использовать в устройствах, получающих питание от батарей и аккумуляторов. Используемая им частота 125 кГц позволяет ему работать со множеством типов RFID карт. Встроенная в него антенна позволяет ему производить считывание RFID меток на расстояниях от 8 до 12 см. Модуль работоспособен в диапазоне температур 0-80 °C, что позволяет его использовать в "жестких" условиях окружающей среды.

Назначение контактов (распиновка) модуля EM-18 показано на следующем рисунке.

Назначение контактов (распиновка) модуля EM18

Ранее модуль EM-18 использовался на нашем сайте в следующих проектах:

Схема проекта

Схема системы учета посетителей на основе NodeMCU ESP8266 и радиочастотной идентификации показана на следующем рисунке.

Схема системы учета посетителей на основе NodeMCU ESP8266 и радиочастотной идентификации

Модуль EM-18 мы подключили к плате NodeMCU ESP8266 через последовательный порт связи. Поскольку модуль EM-18 имеет низкий потребляемый ток (50mA), то его можно запитать от NodeMCU. ЖК дисплей 16х2 мы подключили к плате NodeMCU ESP8266 с помощью интерфейса I2C. ЖК дисплей также запитывается от NodeMCU.

Настройка ThingSpeak

Данные нашего проекта мы будем передавать на сервис ThingSpeak, который является одной из лучших платформ для проектов, связанных с технологией интернета вещей (IoT). На нашем сайте мы уже рассматривали достаточно много проектов, использующих для хранения данных серверы ThingSpeak.

Для настройки аккаунта на сервисе ThingSpeak выполните следующую последовательность шагов.

Зайдите на сайт https://thingspeak.com/ и создайте там себе новый бесплатный аккаунт (Mathworks account). Войдите в свой созданный аккаунт.

Создайте себе новый канал в сервисе ThingSpeak, нажав на “New Channel”. Заполните настройки своего проекта: имя, имена полей и т.д. В нашем случае мы создали поля для хранения данных температуры и напряжения. После этого нажмите на “Save channel” (сохранить канал).

Создание нового канала в ThingSpeak

Выберите созданный канал и запишите с него (сохраните в блокнот) данные, которые в дальнейшем нам понадобятся при написании программы:

  • идентификатор канала (Channel ID), находится в самом верху на странице канала;
  • API ключ (API key), находится на вкладке "API Keys" страницы канала.

Получение API ключа в сервисе ThingSpeak

Более подробно про работу с сервисом ThingSpeak вы можете прочитать в этой статье.

Объяснение программы для NodeMCU ESP8266

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Добавление поддержки NodeMCU в Arduino IDE

Откройте Arduino IDE и в ней выберите пункт меню File–>Preferences–>Settings.

Выбор пункта меню File–>Preferences–>Settings в Arduino IDE

В открывшемся окне в поле ‘Additional Board Manager URL’ добавьте строку https://arduino.esp8266.com/stable/package_esp8266com_index.json и нажмите ‘Ok’.

Добавление в Arduino IDE поддержки модуля ESP8266

Далее откройте пункт Tools > Board > Boards Manager. В менеджере плат (Boards Manager) в строке поиска введите ESP8266, затем в результатах поиска выберите последнюю версию и нажмите install (установить).

Установка в Arduino IDE библиотеки для работы с модулем ESP8266

Когда установка будет закончена, в пункте меню Tools ->Board -> выберите NodeMCU 1.0 (ESP-12E Module). После этого вы сможете программировать вашу плату NodeMCU с помощью Arduino IDE.

Получение уникального RFID кода с RFID метки

Перед тем как программировать NodeMCU ESP8266, нам необходимо узнать уникальный 12-значный код нашей RFID метки. Когда мы подносим метку к считывателю RFID меток EM-18 он считывает с нее код и передает его NodeMCU через последовательный порт связи. Поэтому с помощью небольшой программы мы можем считать коды со всех необходимых нам RFID меток и сохранить их для последующего использования в основной программе.

После того как вы загрузите в NodeMCU ESP8266 код небольшой программы, приведенной ниже, откройте окно монитора последовательной связи (serial monitor) и установите в нем скорость 9600. Затем проведите RFID меткой рядом с модулем EM-18 и вы увидите как 12-значный код, считанный с метки, отобразится в окне монитора последовательной связи. Повторите эту операцию для всех RFID меток, которые будут использоваться в вашем проекте.

Код программы для считывания 12-значного кода с RFID меток

Объяснение кода основной программы

Первым делом в программе нам необходимо подключить используемые библиотеки. Для взаимодействия с платформой ThingSpeak мы будем использовать библиотеку ThingSpeak.h. Для взаимодействия с ЖК дисплеем по интерфейсу I2C мы будем использовать библиотеки “LiquidCrystal_I2C.h” и “wire. h”. Также мы будем использовать библиотеку time.h для получения временных меток.

Далее создадим объект для работы с ЖК дисплеем.

Затем укажем параметры для подключения к Wi-Fi сети – идентификатор сети (SSID) и пароль. После этого укажем параметры для взаимодействия с сервисом ThingSpeak – номер канала (channel number) и API ключ, которые мы записали ранее. Убедитесь в том, что в программе вы исправили эти параметры в соответствии с данными из своего аккаунта ThingSpeak.

Внутри функции setup() инициализируем последовательную связь со скоростью 9600 бод. Затем получим временную метку и инициализируем ЖК дисплей.

Для подключения nodeMCU к сети Интернет мы будем использовать функцию WiFi.begin(), параметрами в которой являются идентификатор сети и пароль для доступа к ней. После этого мы будем проверять успешно ли мы подключились к сети Wi-Fi или нет с помощью функции WiFi.status(), при успешном соединении мы будем выводить на экран ЖК дисплея сообщение “WiFi connected”.

Внутри бесконечного цикла while(1) мы будем подсчитывать общее количество посетителей (visitors) и отображать их на экране ЖК дисплея с помощью функции lcd.print.

Для получения текущей временной метки (timestamp) мы будем использовать функцию time(). Считанная временная метка будет сохраняться в символьном массиве.

Уникальные 12-значные коды, считываемые нами с RFID меток, будут декодироваться и сохраняться в массиве. Далее эти элементы массива будут сравниваться с сохранёнными ранее метками чтобы распознать по ним конкретных посетителей.

Затем мы сравниваем принятый массив с сохраненными кодами меток. Если коды совпадают (то есть посетитель опознан), мы показываем информацию о посетителе на экране ЖК дисплея.

Запрограммируем функцию Senddata() для передачи данных посетителя в облако ThingSpeak. Затем с облака ThingSpeak мы можем скачать эти данные в формате excel чтобы просмотреть записанные детали: имя посетителя, время входа и т.д.

Тестирование работы проекта

Перед тестированием работы проекта убедитесь в том, что WiFi сеть, к которой вы будете подключать NodeMCU, доступна. Если подсоединение к сети WiFi прошло успешно, на экране ЖК дисплея высветится надпись “WiFi connected”.

Затем проведите картой с RFID меткой рядом с модулем EM-18. Данные посетителя должны отобразиться на экране ЖК дисплея как показано на следующем рисунке.

Тестирование работы проекта

Далее, чтобы скачать эти данные с облака ThingSpeak, зайдите в ThingSpeak в свой аккаунт и нажмите в нем на вкладке “Data Import/Export”. Под меню экспорта (Export menu) выберите правильную временную зону (Time Zone) и нажмите на Download. После этого вы скачаете лист Excel в формате .csv, который будет выглядеть примерно следующим образом:

Отображение результатов работы нашего проекта на листе Excel

Более подробно работу проекта вы можете посмотреть на видео, представленном в конце статьи.

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
725 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован.