Библиотека I2C MIFARE RC522

Я просматривал эту ссылку на интерфейсе RFID I2C. Я добавил библиотеку в arduino, но в main.cpp вижу ошибку:

В функции 'void setup()':

sketch_mar27a:16: ошибка: нет соответствующей функции для вызова 'TwoWire::begin(int, int)'

Wire.begin(SDA_PIN, SCL_PIN); // Инициализировать I2C

Я просмотрел файл Wire.cpp и обнаружил, что нет такой функции-члена, перегруженной двумя параметрами.

Как решить проблему? Даже если я исправлю эту одну проблему, я не уверен, что этот код работает.

Где я могу найти работающий код с интерфейсом I2C? У меня проблема с ресурсами, и SPI PORT не может быть использован.

Код:

#include <Wire.h>

#include "MFRC522_I2C.h"

#define SDA_PIN 5
#define SCL_PIN 6
#define RST_PIN 3

MFRC522 mfrc522(0x28, RST_PIN);  // Создать экземпляр MFRC522.

void ShowReaderDetails();

void setup() {
  Serial.begin(9600); // Инициализируем последовательную связь с ПК
  Wire.begin(SDA_PIN, SCL_PIN); // Инициализировать I2C
  mfrc522.PCD_Init();   // Инициализация MFRC522
  ShowReaderDetails();  // Показать сведения о PCD — сведения о считывателе карт MFRC522
  Serial.println(F("Scan PICC to see UID, type, and data blocks..."));
}

void loop() {
  // Ищем новые карты
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  // Выбираем одну из карт
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }

  // Дамп отладочной информации о карте; PICC_HaltA() вызывается автоматически
  mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}

void ShowReaderDetails() {
  // Получить версию программного обеспечения MFRC522
  byte v = mfrc522.PCD_ReadRegister(mfrc522.VersionReg);
  Serial.print(F("MFRC522 Software Version: 0x"));
  Serial.print(v, HEX);
  if (v == 0x91)
    Serial.print(F(" = v1.0"));
  else if (v == 0x92)
    Serial.print(F(" = v2.0"));
  else
    Serial.print(F(" (unknown)"));
  Serial.println("");
  // Когда возвращается 0x00 или 0xFF, связь, вероятно, не удалась
  if ((v == 0x00) || (v == 0xFF)) {
    Serial.println(F("WARNING: Communication failure, is the MFRC522 properly connected?"));
  }
}

, 👍0

Обсуждение

Пожалуйста, отредактируйте свой ответ и включите скетч "sketch_mar27a"., @VE7JRO

пример кода в этой ссылке предназначен для nodemcu (т.е. ESP8266) - проводная библиотека ESP8266 ДЕЙСТВИТЕЛЬНО имеет "пустое начало (int sda, int scl)" - поэтому кажется, что используемая вами библиотека предназначена для ESP8266., @Jaromanda X


1 ответ


1

SPI — это многоведомая шина. Если у вас не закончились свободные контакты для использования в CS или у вас есть ведомые устройства, которые плохо работают, вы также можете подключить свой модуль RFID к шине SPI. Кроме того, ваш скетч, скорее всего, скомпилируется, если вы исправите неправильную строку просто на Wire.begin(). Ваша библиотека использует стандартную библиотеку Wire, но предполагает, что целью является ESP8266, чья версия Wire имеет расширенный метод begin().

Но все это может оказаться бесполезным, поскольку имеющийся у вас MFRC522 (при условии, что это дешевый синий модуль) жестко подключен к использованию только интерфейса SPI. Если только вы не готовы модифицировать печатную плату (вырезать дорожки и т. д.), как это сделали другие.

,

Спасибо за информацию, я не использую никаких устройств SPI, а контакты SP используются для других целей, поэтому я решил попробовать I2C. У меня тоже есть дешевый китайский синий модуль. Так что нет смысла пытаться, я думаю. А работает ли в этом модуле интерфейс UART?, @Rajesh

@Rajesh Нет, UART тоже не работает, SPI - это то, для чего он был создан. Все остальные контакты NodeMCU используются? Если вам действительно необходимо использовать RFID, вас интересует только уникальный идентификатор каждой карты, и вы не собираетесь хранить данные на карте, вы можете попробовать дешевые считыватели/карты 125 кГц, например: https://www.aliexpress .com/item/Free-shipping-10pcs-lot-UART-125Khz-EM4100-RFID-Card-Key-ID-Reader-Module-RDM6300-RDM630-For/32284373493.html. Они используют интерфейс UART, и вам действительно нужен только контакт RX, поскольку они доступны только для чтения., @SoreDakeNoKoto