Використання кардрідерів RC-522 з мікроконтролером NodeMCU 1.0 ESP8266

опубліковано 2 квіт. 2017 р., 07:31 Максим Петренко

Існує безліч матеріалів щодо підключення зчитувачів карток RC-522 до різних моделей контролерів Arduino, проте щодо підключення зчитувачів до ESP8266 інформація відсутня. Навіть бібліотека зчитувача сумнівається, що щось вийде на уьому мікроконтролері.

Справа ще ускладнюється тим фактом, що підписи портів на NodeMCU 1.0 геть не відповідають тому, що потрібно вказувати у програмі.

На наступному малюнку наведені обидва варіанта підписів (у дужках – написи на платі, перед дужками те, що потрібно вказувати у програмі):

Контролер

Зчитувач

Порт для програми

Напис

Тип

Напис

на вибір (для кожного з пристроїв інший)

SDA

14

D5

SCK

SCK

13

D7

MOSI

MOSI

12

D6

MISO

MISO

-

IRQ

-

GND

GND

GND

на вибір (один для усіх пристроїв)

RST

-

3.3V

3.3V

3.3V

Інтерфейс SPI передбачає, що при підключенні кожного додаткового пристрою, він підключатиметься до тих самих портів, окрім вивиоду SS. SS для кожного з притсроїв має бути підключений до свого порту.

Для Arduino IDE можна скористатися бібліотекою MFRC522 (https://github.com/ljos/MFRC522)

Ось адаптований приклад з цієї бібліотеки:

#include <SPI.h>

#include <MFRC522.h>

#define RST_PIN         5

#define SS_0_PIN        15

#define SS_1_PIN        4

MFRC522 mfrc522[2];

void setup() {

  Serial.begin(9600);

  SPI.begin();

  mfrc522[0].PCD_Init(SS_0_PIN, RST_PIN);

  mfrc522[1].PCD_Init(SS_1_PIN, RST_PIN);

}

void loop() {

 if (mfrc522[0].PICC_IsNewCardPresent() && mfrc522[0].PICC_ReadCardSerial()) {

    Serial.print("Reader 0 ");

    Serial.println(dump_byte_array(mfrc522[0].uid.uidByte, mfrc522[0].uid.size));

    mfrc522[0].PICC_HaltA();

    mfrc522[0].PCD_StopCrypto1();

  }

 if (mfrc522[1].PICC_IsNewCardPresent() && mfrc522[1].PICC_ReadCardSerial()) {

    Serial.print("Reader 1 ");

    Serial.println(dump_byte_array(mfrc522[1].uid.uidByte, mfrc522[1].uid.size));

    mfrc522[1].PICC_HaltA();

    mfrc522[1].PCD_StopCrypto1();

  }

}

 

String dump_byte_array(byte *buffer, byte bufferSize) {

  String tmp = "";

  for (byte i = 0; i < bufferSize; i++) {

    tmp += buffer[i] < 0x100 ? "0" : "";

    tmp += buffer[i] < 0x10 ? "0" : "";

    tmp += buffer[i];

  }

  return tmp;

}

Схема підключення для обох зчитувачів:

Контролер

Зчитувач 0

Порт для програми

Напис

Напис

15

D8

SDA

14

D5

SCK

13

D7

MOSI

12

D6

MISO

-

 

IRQ

-

GND

GND

5

D1

RST

-

3.3V

3.3V


Контролер

Зчитувач 1

Порт для програми

Напис

Напис

4

D2

SDA

14

D5

SCK

13

D7

MOSI

12

D6

MISO

-

 

IRQ

-

GND

GND

5

D1

RST

-

3.3V

3.3V

Програма виводитиме вирівняні "0"-ми ID, з вказанням рідера, до якого було піднесено картку.

Петренко М.В.
Comments