Как использовать RFID считыватель с помощью Python
Возникла потребность сделать СКУД сервис на базе считывателей RFID меток Impinj R420. Поискав готовые варианты доступные для работы с Python наткнулся только на Impinj Speedway Connect — ПО, которое умеет слать считанные метки в реальном времени на ваш http API (например FastApi или Flask) и работает на RFID считывателях Impinj Speedway. Стоимость лицензии составляет около $250 за считыватель. Без лицензии вы можете использовать Speedway Connect в демонстрационном режиме с ограничением на 500 считываний меток до перезагрузки устройства.
Если вы нуждаетесь в работе с RFID считывателем поддерживающим LLRP протокол, рассмотрите использование Python модуля, доступного на GitHub. Этот модуль позволяет подключаться и управлять RFID считывателем с помощью одной команды, предоставляя вам всю необходимую функциональность для работы с метками.
Подключение считывателя (на примере Impinj R420)
Подключение к роутеру
Подключите считыватель к роутеру через Ethernet-кабель.Определение IP-адреса считывателя
Войдите в веб-интерфейс роутера на компьютере, подключенном к той же сети. Найдите IP-адрес считывателя по MAC-адресу, который указан на боковой стороне устройства.Проверка подключения
Убедитесь, что вы правильно определили IP-адрес считывателя, попробовав подключиться к нему через HTTP (НЕ HTTPS) по этому IP (по умолчанию порт 80). Вы должны увидеть веб-интерфейс устройства.Логин:
root
Пароль:impinj
Присвоение статического IP
Присвойте считывателю статический IP через настройки роутера, чтобы он не изменился после перезагрузки. Инструкция по присвоению постоянного IP-адреса. Перезагрузите считыватель (вытянув питание) для обновления IP-адреса.Подключение антенн
Подключите антенны к считывателю и подготовьте RFID метки для теста.
Установка и настройка проекта
Клонирование репозитория
Склонируйте репозиторий с GitHub:git clone https://github.com/Ruslanch0s/rfid_reader.git
Настройка хоста считывателя
В файлеmain.py
укажите IP-адрес вашего считывателя:READER_HOST = "192.168.88.249"
Запуск программы
Убедитесь, что у вас установлен Python 3.9 или старше. Запустите программу:python main.py
Обработка меток
Функция callback
используется для обработки меток, прочитанных считывателем. Вы можете изменить эту функцию под свои нужды. Пример:
def callback(_reader, tags):
"""
Callback функция для обработки меток, прочитанных считывателем.
Параметры:
_reader (LLRPReaderClient): Объект считывателя, вызвавший callback.
tags (list): Список прочитанных меток.
"""
logger.info(f'TAGS:{tags}')
В своем проекте я использовал RabbitMQ для передачи данных, что позволяло избежать задержек в работе с базой данных (PostgreSQL) в периоды большого наплыва меток.
Настройка конфигурации считывателя
Файл конфигурации reader_config.py
в папке core
содержит настройки для считывателя. Пример конфигурации:
reader_cfg_dict = {
'duration': 1, # для бесконечного считывания меток !!!
'tx_power_dbm': 31.5, # Мощность передачи dBm
'frequencies': {
'HopTableId': 1,
'Channelist': [866.9], # Частотный диапазон в МГц
'Automatic': False
},
'mode_identifier': 1004, # Режим работы считывателя
'session': 2, # Сессия
'impinj_search_mode': 2, # Установка режима Single Target (по документации вашего устройства)
'tag_population': 1, # Предполагаемое количество меток в зоне считывания
'antennas': [0], # Какие антенны использовать (0 - все антенны)
# какие данные о метках будут включены в отчеты:
'tag_content_selector': {
'EnableROSpecID': False,
'EnableSpecIndex': False,
'EnableInventoryParameterSpecID': False,
'EnableAntennaID': True, # Включение идентификатора антенны
'EnableChannelIndex': False,
'EnablePeakRSSI': False,
'EnableFirstSeenTimestamp': False,
'EnableLastSeenTimestamp': False,
'EnableTagSeenCount': False,
'EnableAccessSpecID': False
}
}
Заключение
Данный код может спокойно заменить Impinj Speedway Connect, что позволит сэкономить, особенно на небольших проектах.
Источники
Помощь с подключением
Если у вас возникнут вопросы или трудности с подключением или настройкой считывателя, я готов с удовольствием вам помочь.
Telegram:
@Ruslanch0s
Email:
cool.ziganshin2015@gmail.com