Модуль чтения RFID карт на esp8266 witty

Для очередного проекта, а именно электронного IoT-замка, потребовалось подключить модуль чтения RFID карт на RC-522 к esp8266. Задача ставится в открытии электронного замка только определенными RFID картами и брелками, коды, которых передаются удаленно от сервера по сети WiFi. И если работа с Wi-Fi для ESP8266 это стандартный функционал, то работа с ридером RFID — нет.  Об подключении ридера и считывании данных с карт сегодня и пойдет речь.

В качестве прототипа буду использовать модуль esp8266-E-12-Witty, неудобно (об этом ниже), но то что было под рукой.

Комплектующие:

Модуль RFID

Модуль ESP8266

Подключаем следующим образом:

RC522  -> ESP8266

SDA -> GPIO16 *Выбор ведомого устройства (Slave Select)

SCK -> GPIO14 * Тактовая синхронизация

MOSI -> GPIO13 * Master Output Slave Input

MISO -> GPIO12 * Master Input Slave Output

IRQ -> не подключаем

RST -> GPIO2 * Restart

GND -> GND * Земля

Vcc -> 3.3v * +питания

Выглядит это примерно так:

Не буду подробно описывать процесс программирования и прошивки модуля esp8266 на Arduino IDE. Эта тема отлично раскрыта тут: https://geektimes.ru/post/271754/

Библиотека для работы с RFID  https://github.com/miguelbalboa/rfid

Для установки необходимо разархивировать zip файл, и переименовать папку rfid-master в rfid. Затем скопировать ее в папку libraries основного каталога IDE. Теперь если перезагрузить IDE, увидим в списках библиотеку и несколько примеров.

 

 

Скетч для прошивки тоже достаточно прост. Если будут вопросы — пишите в комментариях — расскажу подробнее.

//MODULES AND LIB***********
#include <SPI.h>
#include <ESP8266WiFi.h>
#include "MFRC522.h"

//PINS*********
//IRQ -> no use
//SCK -> GPIO14 * Sync (Hard)
//MOSI -> GPIO13 * Master Output Slave Input (Hard)
//MISO -> GPIO12 * Master Input Slave Output (Hard)
#define RST_PIN 2 // RST -> GPIO2 * Restart
#define SS_PIN 16 // SDA -> GPIO16 * Slave Select
//GPIO 0 *FLASH
//GPIO 4 *Button
#define LED_PIN 15 //Red LED
#define LOCK_PIN 5 // LOCK

//OBJECTS********
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 object

void setup() {
 Serial.begin(9600); // Serial init
 SPI.begin(); // SPI init
 mfrc522.PCD_Init(); // MFRC522 init
}

void loop() {
 // Wait new card
 if ( ! mfrc522.PICC_IsNewCardPresent()) {
 delay(50);
 return;
 }
 // Read data of the cards
 if ( ! mfrc522.PICC_ReadCardSerial()) {
 delay(50);
 return;
 }
 // Print to Serial
 Serial.print(F("Card ID:"));
 card_array(mfrc522.uid.uidByte, mfrc522.uid.size);
 Serial.println();
}

// Print buffer to Serial
void card_array(byte *buffer, byte bufferSize) {
 for (byte i = 0; i < bufferSize; i++) {
 Serial.print(buffer[i] < 0x10 ? " 0" : " ");
 Serial.print(buffer[i], HEX);
 }

}

В результате при запуске монитора COM-порта и поднесении карты или брелка к ридеру имеем такой результат.

 

А, чуть не забыл, я же обещал рассказать почему конструктив ESP8266 Witty не очень удобное решение для создания таких прототипов:

При работе с ридером RC-522 используется протокол SPI. В модуле ESP8266 этот протокол реализован на хардварном уровне — это плюс, но на выводах MOSI и MISO конструктивно висят светодиоды синий и зеленый — это минус. Нет, моргают они конечно забавно, но в плане стабильности работы такая схема не «есть хорошо». Кроме того, в конструкции Witty не все GPIO выведены на ноги модуля, что тоже сильно огорчает. Есть еще один минус — USB разьем на плате самого модуля не функционален и может использоваться только для питания. Виртуальный COM порт есть только на нижней плате «бутерброда». Поэтому либо COM-порт, либо GPIO. (как видите на фото провода пришлось подпаивать поверх пинов платы).

Вот и все на сегодня… Пишите…

И присоединяйтесь к нашей группе в FB  —  Интернет Вещей (Internet of Thing)

 

Посмотрите так же...

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *