C library for interfacing ESP32 with MFRC522 RFID card reader.
Library currently just reads serial number of RFID tags, which is enough for most applications.
This directory is an ESP-IDF component. Clone it (or add it as submodule) into components
directory of the project.
This is basic example of scanning RFID tags.
#include <esp_log.h>
#include <inttypes.h>
#include "rc522.h"
static const char* TAG = "rc522-demo";
static rc522_handle_t scanner;
static void rc522_handler(void* arg, esp_event_base_t base, int32_t event_id, void* event_data)
{
rc522_event_data_t* data = (rc522_event_data_t*) event_data;
switch(event_id) {
case RC522_EVENT_TAG_SCANNED: {
rc522_tag_t* tag = (rc522_tag_t*) data->ptr;
ESP_LOGI(TAG, "Tag scanned (sn: %" PRIu64 ")", tag->serial_number);
}
break;
}
}
void app_main()
{
rc522_config_t config = {
.spi.host = VSPI_HOST,
.spi.miso_gpio = 25,
.spi.mosi_gpio = 23,
.spi.sck_gpio = 19,
.spi.sda_gpio = 22,
};
rc522_create(&config, &scanner);
rc522_register_events(scanner, RC522_EVENT_ANY, rc522_handler, NULL);
rc522_start(scanner);
}
Set the property .transport
of the config structure to RC522_TRANSPORT_I2C
and choose GPIOs for data (.i2c.sda_gpio
) and clock (.i2c.scl_gpio
):
rc522_config_t config = {
.transport = RC522_TRANSPORT_I2C,
.i2c.sda_gpio = 18,
.i2c.scl_gpio = 19,
};
Set the .spi.device_flags
property of the config to SPI_DEVICE_HALFDUPLEX
. Other device flags (SPI_DEVICE_*
) can be set here as well by chaining them with bitwise OR (|
) operator.
rc522_config_t config = {
.spi.host = VSPI_HOST,
.spi.miso_gpio = 25,
.spi.mosi_gpio = 23,
.spi.sck_gpio = 19,
.spi.sda_gpio = 22,
.spi.device_flags = SPI_DEVICE_HALFDUPLEX,
};
Let's say that spi bus VSPI_HOST
has been already initialized, and rc522 needs to be attached to that bus. That can be accomplished with the next configuration. Property .spi.bus_is_initialized
is required to be set to true
in order to inform library to not initialize spi bus again.
NOTE: Property
.spi.bus_is_initialized
will be deprecated in the future once when this issue is resolved.
rc522_config_t config = {
.spi.host = VSPI_HOST,
.spi.sda_gpio = 22,
.spi.bus_is_initialized = true,
};
GitHub: abobija
Homepage: abobija.com