ODRFID-LAN
сетевой клиент
Сетевой RFID считыватель для работы с сервером
В этом сценарии считыватель передаёт по одному из сетевых протоколов (UDP/TCP/HTTP/HTTPS и т.п.) информацию о прочитанной карте, а сервер (контроллер или ПК) обрабатывает и отправляет команду.
Считыватель предлагает большое количество готовых настроек с Web-интерфейсе:
  • С помощью специальной строки форматирования можно указать считывателю, что требуется считать из карты.
  • Указать протокол передачи идентификатора, адрес и порт.
  • Можно задать тип и содержание ключа шифрования для карт, поддерживающих этот режим.
  • Изменить сетевые настройки
  • Указать сервер точного времени
Раздел "Администрирование" позволяет установить пароль на вход в раздел настроек и отключить редактор кода, а также на установить пароль на вход web-интерфейс.
Программа-сервер
Для вашего удобства вашей разработки мы собрали простую программу-пример сервера на Qt.
Её можно использовать, как шаблон для разработки своего ПО или как демонстрационный софт.
Программа ожидает получения UDP посылки от RFID считывателя
Если полученный идентификатор соответствует записанному в БД, то отображается карточка пользователя.
Иначе - сообщение об ошибке
Код со второй вкладки реализует следующий алгоритм: устройство ожидает поднесения карты (используется 5 секундный фильтр от повторного срабатывания), при успешном чтении передаёт данные на tcp-сервер. В ответ ожидает команд "GRANTED" - разрешить проход или "BLOCKED" - не разрешать. При открытии двери на сервер отправляется контрольное сообщение "OPENED".

Данный код необходимо ввести в web-редакторе устройства. Нажать "Записать", перенести в постоянную память устройства кнопкой "Во Flash" и перезагрузить.

from time import time
from uasyncio import sleep, wait_for
from machine import WDT
from rfid_utils import RFID, Buzzer, GLED, RLED, CardFilter, OUT
from webserver import eprint
from config import settings
from uasyncio import TCPClient
import usocket

async def recv_wait(client):
    try:
        return await client.recv()
    except Exception as e:
        pass

async def run():
    await eprint("User code started")
    rfid = RFID()
    buz = Buzzer()
    GLED.off()
    RLED.off()
    OUT.on()
    c_filter = CardFilter(5)
    wdt_enabled = settings.get('wdt')
    str_format = settings.get('format')
    dest = settings.get('dest')
    dport = settings.get('dport')
    tcp = TCPClient(dest, dport)

    await buz.beep()
    if wdt_enabled:
        wdt = WDT(timeout=10000)
    await tcp.connect()
    while 1:
        if wdt_enabled:
            wdt.feed()
        c_filter.clean(time())

        uid = rfid.read(str_format)
        if uid and uid not in c_filter:
            c_filter.append(uid)
            await tcp.send(uid+'\n')
            await eprint(uid + ' sent')

        data = await wait_for(recv_wait(tcp), 0.2)
        if data:
            if data.strip() == b'GRANTED':
                await eprint('GRANTED')
                GLED.on()
                await buz.beep()
                GLED.off()
                OUT.off()
                await tcp.send('OPENED')
                await sleep(5)
                OUT.on()
            elif data.strip() == b'BLOCKED':
                await eprint('BLOCKED')
                RLED.on()
                await buz.beep(500)
                RLED.off()
Основные узлы
Подключение считывателя напрямую к замку
Считыватель может управлять замком, а также обрабатывать нажатие кнопки выхода
Технические характеристики:
1. Чтение и запись меток:
Mifare Classic 1K: полная поддержка
Mifare Classic 4K: полная поддержка
Mifare Plus S/X (SL0): полная поддержка
Mifare Classic Plus S/X 2K (SL1): полная поддержка
Mifare Classic Mini: полная поддержка
Mifare Plus X 2K/4K (SL2): ограниченная поддержка - только UID,
повышение уровня безопасности до SL3
Mifare Plus S/X 4K (SL1): полная поддержка
Mifare Plus S/X 4K (SL1): ограниченная поддерхка - только UID
Mifare Plus S/X (SL3): полная поддержка
Mifare Ultralight: полная поддержка
Mifare Ultralight Nano: полная поддержка
Mifare Ultralight C: ограниченная поддержка - только UID
Mifare Ultralight EV1 80/164: полная поддержка
Mifare DESFire: ограниченная поддержка - только UID
NTAG 213: полная поддержка
NTAG 215: полная поддержка
NTAG 216: полная поддержка

2. Дальность считывания меток: до 6 см.
3. Габаритные размеры: 95х62х20 мм.
4. Проводные интерфейсы: Ethernet, USB(сервисный).
5. Индикация: светодиоды (красный и зелёный), звуковой излучатель.
6. Один входной канал (3В, подтянут к "1").
7. Один выходной канал (1А max), напряжение соответствует напряжению питания.
8. Ёмкость встроенного накопителя: 8 МБ.
9. Четыре крепёжных отверстия М3.
10. Питание Passive PoE 12-20V.
Error get alias