NFC接口的RC522模块
1. RC522模块介绍
RC522是意法半导体公司生产的一款NFC模块,支持ISO14443A/B标准,可以用于读取和写入M1卡、CPU卡等非接触式智能卡。RC522模块具有以下特点:
- 支持ISO14443A/B标准
- 支持M1卡、CPU卡等非接触式智能卡
- 支持读写操作
- 支持防冲突功能
- 支持加密功能
- 支持多种通信协议
2. RC522模块的接线
RC522模块的接线如下:
| 管脚 | 功能 | 接线 | 说明 |
|---|---|---|---|
| 1 | VCC | 3.3V | 供电 |
| 2 | GND | GND | 地线 |
| 3 | RST | GPIO | 复位线(可以不接) |
| 4 | SDA(SS) | GPIO | 数据线(片选线) |
| 5 | SCK | GPIO | 时钟线 |
| 6 | MOSI | GPIO | 数据输出线 |
| 7 | MISO | GPIO | 数据输入线 |
| 8 | IRQ | NC | 中断线(可以不接) |
需要说明
- SDA(SS) 引脚作为SPI接口的 SS片选引脚,在SPI模式下,作为片选引脚,在I2C模式下,作为数据线.
- RST 引脚作为复位引脚,如果使用软件复位的话,这个引脚可以不接.
3. RC522模块操作
3.1 引入对应的组件库
对于rc522的操作,比较复杂,为了更好的控制芯片,我们直接引用对应的组件库.
RC522组件库
- 进入python3虚拟环境
get_idf(我自己写的脚本) 进入 python3虚拟环境 - 引入组件库:
idf.py add-dependency "abobija/rc522"
3.2 对应的C代码.
直接通过组件的命令,创建一个rc522的demo工程,然后修改对应的代码,就可以实现对应的操作了.
python
idf.py create-project-from-example "abobija/rc522:basic"这条命令.就会自动创建一个demo工程用于对于基本的rc522的操作.
c
#include <esp_log.h>
#include "rc522.h"
#include "driver/rc522_spi.h"
#include "rc522_picc.h"
static const char *TAG = "rc522-basic-example";
// 引脚的定义
#define RC522_SPI_BUS_GPIO_MISO (7)
#define RC522_SPI_BUS_GPIO_MOSI (6)
#define RC522_SPI_BUS_GPIO_SCLK (5)
#define RC522_SPI_SCANNER_GPIO_SDA (4)
#define RC522_SCANNER_GPIO_RST (-1) // soft-reset
static rc522_spi_config_t driver_config = {
.host_id = SPI2_HOST,
.bus_config = &(spi_bus_config_t){
.miso_io_num = RC522_SPI_BUS_GPIO_MISO,
.mosi_io_num = RC522_SPI_BUS_GPIO_MOSI,
.sclk_io_num = RC522_SPI_BUS_GPIO_SCLK,
},
.dev_config = {
.spics_io_num = RC522_SPI_SCANNER_GPIO_SDA,
},
.rst_io_num = RC522_SCANNER_GPIO_RST,
};
static rc522_driver_handle_t driver;
static rc522_handle_t scanner;
static void on_picc_state_changed(void *arg, esp_event_base_t base, int32_t event_id, void *data)
{
rc522_picc_state_changed_event_t *event = (rc522_picc_state_changed_event_t *)data;
rc522_picc_t *picc = event->picc;
if (picc->state == RC522_PICC_STATE_ACTIVE) {
rc522_picc_print(picc);
}
else if (picc->state == RC522_PICC_STATE_IDLE && event->old_state >= RC522_PICC_STATE_ACTIVE) {
ESP_LOGI(TAG, "Card has been removed");
}
}
void app_main()
{
rc522_spi_create(&driver_config, &driver);
rc522_driver_install(driver);
rc522_config_t scanner_config = {
.driver = driver,
};
rc522_create(&scanner_config, &scanner);
rc522_register_events(scanner, RC522_EVENT_PICC_STATE_CHANGED, on_picc_state_changed, NULL);
rc522_start(scanner);
}4. RC522模块高级使用方法
RC522组件库中,还提供了一些高级的使用方法:
找到更多有趣的例子(如memory_dump),请转到examples文件夹。
