[入门教程]ESP32 RFID教程:打印MFRC522固件版本-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3800|回复: 0

[入门教程]ESP32 RFID教程:打印MFRC522固件版本

[复制链接]
发表于 2019-5-30 17:49 | 显示全部楼层 |阅读模式


介绍
本文旨在介绍如何通过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教程汇总贴
英文版教程 : ESP32 tutorial


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 02:55 , Processed in 0.366397 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表