сайт для палких паяльників

У меня в распоряжении появились три различных RFID ридера:

  • настольный с интерфейсом USB (125 КГц). Поддерживает EM4001, EM4100, EM4200, TK4100;
  • ZNR-A26ID – для монтажа на стену с интерфейсом WG26 (125 КГц);
  • RFID-RC522 – отдельная плата на базе микросхемы MFRC522 с интерфейсом SPI (13,56 МГц);
  • RFID-USB FRID-WG26 RFID-RC522

Последний интересен тем, что позволяет читать и писать на карточку.

Настольный RFID reader с интерфейсом USB

Подключаем ридер с USB интерфейсом к компьютеру с Windows. Windows видит новое оборудование и сама устанавливает драйвер. RFID USB-ридер воспринимается Windows как HID-устройство. То есть, как аналог клавиатуры. Открываем Notepad, подносим карточку к ридеру. Когда карточка считывается, ридер пищит, мигает зеленым светом, а в окне Notepad или любого поля для ввода появляется номер карты. Ридер полностью симулирует ввод номера карты с клавиатуры. Больше ничего он не умеет. Ничего сложного, ничего интересного.

RFID reader для монтажа на стену с интерфейсом WG26

Такой ридер является стандартным прибором для настенного монтажа и контроля доступа в помещение. Он герметичен, наружу выходит 6 проводов:
Красный (Red) – VCC +8..15V
Черный (Black) – GND
Зеленый (Green) – Data0
Белый (White 🙂) – Data1
Серый (Gray) – BEEP
Пурпурный (Purple) – неизвестно, видимо LED.

Питание ридера 8..15В <100mA, но сигналы Data0, Data1 уровня 5 В. Передача данных выполняется по протоколу протокол WG26

Протокол WG26

Це двопровідний протокол, у якому “0” передаються по одній лінії Data0, а “1” по другій – Data1. Рівень сигналів Data0, Data1 близький до 5В. Падіння сигналу до 0 на одній з ліній означає передачу одного біта. Якщо 0 на Data0 – це 0, якщо 0 на Data1 – це 1. Взагалі, передається 26 біт, тому протокол і називається WG26. Аналогічно працює протокол WG32. Діаграма роботи протоколу:

Это двухпроводной протокол, в котором “0” передаются по одной линии Data0, а “1” по второй – Data1. Уровень сигналов Data0, Data1 близок к 5В. Падение сигнала до 0 на одной из линий означает передачу одного бита. Если 0 на линии Data0 – это 0, если 0 на Data1 – это 1. Всего, передается 26 бит, поэтому протокол и называется WG26. Аналогично работает протокол WG32. Диаграмма работы протокола:

wg26 timing

Структура данных:

wg26 data

Подключаем RFID reader с интерфейсом WG26 к микроконтроллеру ATMEGA

Подключаем Data0 к INT0, Data1 к INT1. Для считывания будем использовать прерывания по спаду. Данные о считывания отправляются по UART. схема:

frid reader wg26 scheme

Программа для микроконтроллера:

#include <stdio.h>
#include <avr/interrupt.h>
#include "uart.h"

#define RXUBRR (F_CPU/16/9600)-1

#define BUFFER_SIZE 11
char buffer[BUFFER_SIZE];
unsigned long int card_code = 0;
char bit_count=0;

void convert_to_decimal(char* dst, unsigned long src)
{
    int i;
    for (i = 0; i < 10; i ++)
    {
        dst[9 - i] = '0' + (int)(src % 10);
        src /= 10;
    }     

    dst[10] = 0;
}

ISR(INT0_vect) {
	card_code = card_code << 1;
	bit_count++;
}

ISR(INT1_vect) {
	card_code = card_code << 1;
	card_code = card_code | 0x01;
	bit_count++;
}

int main( void )
{
  uart_init(RXUBRR);

  MCUCR |= (1<<ISC01); // INT0 (falling edge)
  MCUCR |= (1<<ISC11); // INT1 (falling edge)
  GICR = ((1<<INT0)|(1<<INT1)); // Enable INT0, INT1

  sei();
  uart_puts("Started\r\n");

  while(1) {
	if (bit_count == 26) {
		card_code = card_code >> 1;
		card_code = card_code & 0x00ffffff;

		uart_puts("Card number: ");

		convert_to_decimal(buffer, card_code);
		uart_puts(buffer);

		uart_puts("\r\n");

		card_code=0;
		bit_count=0;
	}
  }
}

Скачать текст программы

Подключаем RFID reader с интерфейсом WG26 к Raspberry PI

Raspberry Pi не может работать с уровнем входных сигналов 5В. Говорят, что это может вывести Raspberry Pi из строя. Я не проверял.  Я использовал простую схему для согласования уровней сигналов. Схема подключения FRID reader WG26 + Raspberry Pi:
FRID reader WG26 + Raspberry Pi

Пример для считывания на Python:

import RPi.GPIO as GPIO

_DATA0PIN = 23
_DATA1PIN = 24

GPIO.setmode(GPIO.BCM)
GPIO.setup(_DATA0PIN , GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(_DATA1PIN , GPIO.IN, pull_up_down=GPIO.PUD_UP)

cardnumber = 0
bit_count = 0
for x in range(0, 26):
        data0 = GPIO.input(_DATA0PIN )
        data1 = GPIO.input(_DATA1PIN )
        while ( (data0 == 1) and (data1 == 1) ):
                data0 = GPIO.input(_DATA0PIN )
                data1 = GPIO.input(_DATA1PIN )

        cardnumber = cardnumber << 1

        if data1 == 1:
                cardnumber = cardnumber | 0x01
        bit_count = bit_count + 1

        while ( (data0 == 0) or (data1 == 0) ):
                data0 = GPIO.input(_DATA0PIN )
                data1 = GPIO.input(_DATA1PIN )

cardnumber = cardnumber >> 1
cardnumber = cardnumber &  0x00ffffff
print cardnumber

В этих примерах не используются MSB и LSB биты. Если у Вас будет такая необходимость, Вы можете доработать этот код.

Плата RFID reader на базе микросхемы MFRC522 с интерфейсом SPI

Цей зчитувач досить популярний і цікавий тим, що використовує найбільш популярну робочу частоту 13,56 МГц. До того ж має дуже широкий функціонал, який дозволяє реалізувати різні задачі у яких задіяні можливості запису та зчитування інформації з картки. Якщо уважно почитати документацію до мікросхеми MFRC522, на якій базується ця плата, стане ясно, що можливості мікросхеми дуже широкі. Скачати документацію до мікросхеми MFRC522.

Этот считыватель достаточно популярен и интересен тем, что использует наиболее популярную рабочую частоту 13,56 МГц. К тому же имеет очень широкий функционал, который позволяет реализовать различные задачи в которых задействованы возможности записи и считывания информации с карты. Если внимательно почитать документацию к микросхеме MFRC522, на которой базируется эта плата, станет ясно, что возможности микросхемы очень широкие и позволяют расширить спектр использования технологии RFID за пределы привычных границ. Скачать документацию к микросхеме MFRC522.

Подключаем RFID reader MFRC522 к микроконтроллеру ATMEGA

frid reader rc522 schme

RFID-RC522Atmega8
SDAPC0
SCKSCK
MOSIMOSI
MISOMISO
IRQNONE
GNDGND
RSTPC1
3.3V3.3V

Я не смог найти готовую библиотеку для GCC, поэтому взял библиотеку для Arduino и переписал. Если найдете ошибки, извините. Программа для МК:

#include <stdio.h>
#include <util/delay.h>
#include "uart.h"

#include "MFRC522.h"

#define RXUBRR (F_CPU/16/9600)-1

#define BUFFER_SIZE 2
char buffer[BUFFER_SIZE];

int main( void )
{
	uchar card_num[5];
	uchar i;

	sei();

	uart_init(RXUBRR);
	MFRC522_Init();

	uart_puts("RC522 started\r\n");

	while(1) {
		_delay_ms(500);
		if ( MFRC522_Request( PICC_REQIDL, card_num ) == MI_OK ) {
			if ( MFRC522_Anticoll( card_num ) == MI_OK ) {
				uart_puts("Card number:\r\n");
				for (i = 0; i < 5; i++ ) {
					sprintf(buffer, "%x ", card_num[i]);
					uart_puts(buffer);
				}
				uart_puts("\r\n");
			}
		}
	}
}

Скачать пример с библиотекой

Подключаем RFID reader MFRC522 к Rasperry PI

Схема підключення така:

NamePin #Pin name
SDA24GPIO8
SCK23GPIO11
MOSI19GPIO10
MISO21GPIO9
IRQNoneNone
GNDAnyAny Ground
RST22GPIO25
3.3V13V3

Роспиновка Raspberry Pi:

RaspberryPi_v2_pins

Проверяем файл /etc/modprobe.d/raspi-blacklist.conf

Строки, в имеющие отношение к spi, должны быть закомментированы. Пример файла: /etc/modprobe.d/raspi-blacklist.conf:

#blacklist spi-bcm2708
blacklist i2c-bcm2708

Обновляем систему:
apt-get update

Устанавливаем python-dev:
apt-get install python-dev
git clone https://github.com/lthiery/SPI-Py
cd SPI-Py
sudo python setup.py install
cd ..

Устанавливаем MFRC522-python:
git clone https://github.com/mxgxw/MFRC522-python

Запускаем пример:
cd MFRC522-python
python Read.py

Подносим карточку и радуемся работе устройства! Там же Вы найдете скрипт Write.py, демонстрирующий запись и считывание данных с карты.
Успехов!

Читайте начало: RFID. Что это такое?

Translate
Архіви

© 2011-2019 Андрій Корягін, Кременчук - Київ, Україна