介绍 本文旨在介绍如何通过ESP32与MFRC522 RFID读卡器进行通信。本ESP32教程的测试是使用集成在ESP32开发板中的DFRobot的ESP-WROOM-32设备进行的。
由于RFID设备可能非常复杂,我们将从打印其固件版本这样一个简单的示例入手,然后在后面的教程中再深入介绍更复杂的功能。 硬件 如上所述,我们将使用一个MFRC522 RFID设备,它集成于非常便宜且可直接使用的模块中,该模块包含了两个RFID卡,如图1中所示。
图1 - MFRC522模块
关于ESP32 FireBeetle开发板与MFRC522之间的连接,请查看图2电路图。请注意,如果您使用的是其它ESP32开发板,则需要考虑引脚的差异。ESP32的引脚名称是FireBeetle开发板上标注的引脚名称。 图2 - ESP32 FireBeetle开发板与MFRC522模块之间的连接图 由于MFRC522的工作电压为3.3 V [1],所以我们可以直接使用FireBeetle开发板的3.3 V引脚为其供电。 或者,如果您的开发板没有可用的3.3 V电源引脚,也可以使用外部3.3V电源为其供电,但外部电源要与MFRC522共地连接。 当然,ESP32与MFRC522模块之间也要连接公共的GND,按照电路图所示连接相应的引脚。 由于我们将使用SPI协议与MFRC522通信,所以我们需要连接设备上的相应引脚。MFRC522的MISO、MOSI和SCK引脚应连接至FireBeetle开发板上标记了相同名称的引脚。 对于SPI协议的Slave Select引脚(从属设备选择,SS),值得注意的是,大部分的MFRC522模块都将其标记为SDA。在此示例中,我将它连接至ESP32开发板的SDA/IO21引脚(ESP32 GPIO21),当然,您也可以使用其它数字输出引脚,只要在软件程序中将此引脚指定为Slave Select引脚即可。 MFRC522模块还有一个重置输入引脚,我将它连接了ESP32开发板的SLC/IO22引脚 (ESP32 GPIO22)。同样,我们需要在软件中指定所使用的这个引脚,当然,您也可以使用其它输出引脚。
由于未使用IRQ引脚,所以我们将悬空IRQ引脚。这个引脚与中断功能有关[1]。
软件库文件 与MFRC522设备的低层交互并非易事。因此,我们将使用Arduino库文件处理大部分细节,这些库文件提供了更简单、更高层级的接口。 我们将要使用的库文件为MFRC522.h,点击此处可在GitHub上找到该文件。通过Arduino IDE库管理器是安装此库文件的最简单方法。 问Arduino IDE中库文件管理器并安装上述库文件的路径为:sketch ->Include library – > Manage libraries。 在打开的弹出窗口中,只需搜索“rfid”并安装图3中突出显示的那个库文件即可。
图3 - 通过Arduino IDE库文件管理器安装RFID库文件 这个库文件附带了许多可以在Arduino IDE上直接访问的示例,或者您可以点击此处在GitHub上查看。
在本教程中,我将使用1.3.6版本的库文件,这是在撰写本文时最新的版本。 代码 首先,我们需要引用一些库文件。我们将引用之前安装的MFRC522.h库文件,以便使用与设备交互所需的所有函数。 [mw_shl_code=applescript,true]
#include <SPI.h>
#include <MFRC522.h>[/mw_shl_code]
由于我们将通过SPI协议与RFID读卡器进行通信,所以我们还需要引用SPI.h库文件。 [mw_shl_code=applescript,true] const int resetPin = 22; // Reset pin
const int ssPin = 21; // Slave select pin[/mw_shl_code]接下来,我们将通过定义一些常量,更准确地说,是确定Slave Select(从属设备选择,SS)引脚的编号和复位引脚的编号。参照先前的电路图,我将ESP32引脚22指定为复位引脚,将引脚21指定为Slave Select引脚,当然,也可以使用其他引脚。 [mw_shl_code=applescript,true]MFRC522 mfrc522 = MFRC522(ssPin, resetPin); // Create instance
[/mw_shl_code] 接下来,我们需要创建一个MFRC522类对象,以便利用它与RFID阅读器交互的方法。我们将这个构造函数的输入参数设置为刚刚定义的ssPin和resetPin变量。 [mw_shl_code=applescript,true]Serial.begin(115200);
SPI.begin();[/mw_shl_code] 然后,我们将编写Arduino setup函数。首先,我们将初始化串口,以便可以打印从设备获得的信息。我们还将初始化SPI接口,以便能够与MFRC522进行通信。 [mw_shl_code=applescript,true]
mfrc522.PCD_Init();[/mw_shl_code] 接下来,我们需要初始化MFRC522设备。幸运的是,这个库文件隐藏了低层细节,我们只需调用mfrc522对象的PCD_Init方法即可,此方法的使用在以前的教程中有详细的介绍。此方法调用不带参数,其返回值为空(void)。 在初始化完成后,我们要把固件的版本信息打印到串口。同样,只需简单地调用mfrc522对象的方法即可完成。我们调用了PCD_DumpVersionToSerial方法,此方法调用不带参数,其返回值为空(void)。 [mw_shl_code=applescript,true]#include <SPI.h>
#include <MFRC522.h>
const int resetPin = 22; // Reset pin
const int ssPin = 21; // Slave select pin
MFRC522 mfrc522 = MFRC522(ssPin, resetPin); // Create instance
void setup() {
Serial.begin(115200);
SPI.begin();
mfrc522.PCD_Init();
mfrc522.PCD_DumpVersionToSerial();
}
void loop() {}[/mw_shl_code] 请注意,此方法将把信息打印到串口,这就是它返回void的原因。本教程的完整代码如下所示,其中包含了此函数调用。 测试代码 为了测试此代码,在正确连接所有硬件后,只需编译代码并将其上传到ESP32开发板上即可。编译时,您可能会收到一条警告消息,如图4所示。您可以放心地忽略它。
图4 - 编译ESP32代码时的警告消息
上传完成后,只需打开串口并检查输出结果。您将得到类似于图5的结果,它包含了MFRC522固件版本的打印信息。 请注意,程序启动和内容打印之间没有延迟,因此您可能需要重置ESP32才能捕获到串口监视器上的输出结果。 图5 - MFRC522设备的固件版本 注:本文作者是Nuno Santos,他是一位和蔼可亲的电子和计算机工程师,住在葡萄牙里斯本 (Lisbon)。 他写了200多篇有关ESP32、ESP8266的有用的教程和项目。
查看更多ESP32/ESP8266教程和项目,请点击 : ESP32教程汇总贴
|