MFRC-522 RC522 RFID射频 C卡感应模块复旦卡钥匙扣 Arduino树莓派介绍
【电气参数简介】
资料https://pan.baidu.com/s/1gfDZ9kR
工作电流:13—26mA/直流3.3V
空闲电流:10-13mA/直流3.3V
休眠电流:<80uA
峰值电流:<30mA
工作频率:13.56MHz
支持的卡类型:mifare1 S50、mifare1 S70、mifare UltraLight、mifare Pro、mifare Desfire
产品物理特性:尺寸:40mm×60mm
环境工作温度:摄氏-20—80度
环境储存温度:摄氏-40—85度
环境相对湿度:相对湿度5%—95%
【模块接口SPI参数】
数据传输速率:最大10Mbit/s
PS:以上是我搬运的淘宝介绍,这个东西我产生的兴趣就是在于发现我住的小区门禁卡就是这东西,真的是很贴近生活,于是想研究一下。下面进入主题,如何把它装到树莓派3B+上面并识别到这两种卡。
1硬件准备:
树莓派3B+,面包板,T型扩展版,排线,10多跟杜邦线(公对公),射频模块一套RFID RC522。
在这个Raspberry Pi RFID RC522教程中,我将介绍如何设置和连接Raspberry Pi和RFID RC522芯片。这是一个很实用的教程,以便于你之后各种不同的项目,例如使用它作为考勤系统、使用它来打开一个锁。
RFID RC522是基于MFRC522微控制器的非常低成本的RFID(射频识别)读写器。该微控制器通过SPI协议提供数据,并通过创建一个13.56MHz的电磁场来工作,该电磁场用于与RFID标签进行通信。
确保你的RFID RC522购买的标签在13.56MHz的频率上运行,否则将无法读取。
本教程将示范如何连接RC522以及编写Python脚本以与芯片进行交互,以便读取和写入RFID标签。如果你想展示一些数据信息,你可以使用像16×2液晶显示器扩展这个教程。
2硬件安装
购买RFID RC522读卡器时你会注意到的一件事情是,其中90%的人没有使用已经焊接好的插头引脚。这意味着你必须自己做,幸运的是,焊接插头引脚是一个相当简单的任务,甚至对于初学者。
1.首先,如果您使用RC522收到的标头引脚不是正确的大小,那么您只有一行8个引脚。
2.将接头引脚向上穿过RC522的孔。一个便利的窍门是把标头引脚的长边插入面包板,然后把电路放在标头引脚的顶部。面包板将握住引脚,使其更容易焊接到RFID RC522电路。
3.现在使用热的烙铁和一些焊料,慢慢地焊接每个引脚。请记住,在焊接之前,最好稍微加热接头,这样可以确保焊料更多地粘附在接头上,并减少了形成冷接头的机会。我们还建议小心使用的焊料量。
4.现在头插针已经焊接到您的RFID电路上,现在可以使用了,您可以继续教程。
连接RFID RC522
在您的RFID RC522,你会发现,有它8个可能的连接,这是SDA(串行数据信号),SCK(串行时钟),MOSI(主出从入),MISO(主入从出),IRQ(中断请求),GND(地面电源),RST(复位电路)和3.3V(3.3V电源输入)。我们需要连接所有这些,但IRQ连接到我们的Raspberry Pi的GPIO引脚。
您可以将这些直接连接到GPIO引脚,或者像我们在本教程中所做的那样,将RFID RC522插入我们的面包板,然后从那里连接到我们的Raspberry Pi的GPIO引脚。
将RFID RC522连接到Raspberry Pi相当简单,只需要将7个GPIO引脚直接连接到RFID阅读器。请遵循下表,并查阅我们的GPIO指南,查看连接RC522所需的GPIO引脚位置。
SDA连接到引脚24。GPIO8
SCK连接到引脚23。GPIO11
MOSI连接到引脚19。GPIO10
MISO连接到引脚21。GPIO9
GND连接到引脚6。
RST连接到引脚22。GPIO25
3.3v连接到引脚1。
| Name | Pin # | Pin name |
|:-------:|:-------:|:------------:|
| SDA | 24 | GPIO8 |
| SCK | 23 | GPIO11 |
| MOSI | 19 | GPIO10 |
| MISO | 21 | GPIO9 |
| IRQ | None | None |
| GND | Any | Any Ground |
| RST | 22 | GPIO25 |
| 3.3V | 1 | 3V3 |
硬件接好了仔细检查一下有没有接错,正常情况下射频卡会亮红灯。
3开启树莓派的SPI
在我们开始在我们的Raspberry Pi上使用RFID RC522的过程之前,我们将首先对其配置进行更改。默认情况下,树莓派的SPI(串行外设接口)被禁用不要担心,因为重新启用此接口非常简单,只需按照以下步骤配置Raspberry Pi和Raspbian即可使用SPI接口。
1.首先打开raspi-config工具,打开终端并运行以下命令:
sudo raspi-config
2.该工具将加载一个显示各种不同选项的屏幕。如果您想深入了解这些选项,可以参阅本书入门部分的raspi-config指南。
在这里使用箭头键选择“ 5接口选项 ”。选中此选项后,按Enter键。
3.现在在下一个屏幕上,您想要再次使用箭头键选择“ P4 SPI ”,再次按Enter键选择高亮显示的选项。
4.现在将询问您是否要启用SPI接口,使用箭头键选择Yes,然后按Enter继续。你需要等一会儿,而raspi- config工具在启用SPI的时候也是这么做的。
5.一旦通过raspi-config工具成功启用了SPI接口,您应该会看到屏幕上出现以下文本:“ SPI接口已启用 ”。
在SPI接口完全启用之前,我们将首先重新启动Raspberry Pi。要做到这一点首先回到终端按回车,然后按ESC。
在Raspberry Pi 的终端中输入以下的linux命令重启你的Raspberry Pi。
sudo reboot
6.一旦Raspberry Pi完成重启,我们现在可以检查确认它已经被启用。最简单的方法是运行以下命令查看是否列出了spi_bcm2835。
lsmod | grep spi
如果你看到spi_bcm2835,那么你可以继续,跳到7和8,进行到下一节。如果由于某种原因,当您输入上一个命令时没有出现,请尝试执行以下3个步骤。
7.如果由于某种原因SPI模块没有激活,我们可以通过在我们的Raspberry Pi上运行以下命令来手动编辑启动配置文件。
sudo nano /boot/config.txt
8.在配置文件中,使用Ctrl + W查找“ dtparam = spi = on ”。
如果您找到了,请检查前面是否有#号。如果这是删除它,因为这是注释激活线。如果找不到该行,只需在文件底部添加“ dtparam = spi = on ”即可。
完成更改后,可以按Ctrl + X,然后按Y,然后按Enter以保存更改。
现在,您可以再次从第5步开始,重新启动Raspberry Pi,然后检查模块是否已启用。
4为RFID RC522准备好Python
现在我们已经将RFID RC522电路连接到Raspberry Pi,现在我们可以启动它,开始编程Python中的简单脚本以与芯片进行交互。
我们将向您展示如何编写的脚本将基本向您展示如何从RFID芯片读取数据以及如何写入数据。这些将为您提供如何处理数据的基本概念,并将成为更多RFID RC522教程的基础。
1.在开始编程之前,我们首先需要更新我们的Raspberry Pi,以确保其运行所有软件的最新版本。在Raspberry Pi上运行以下两个命令来更新它。
sudo apt-get update sudo apt-get upgrade
2.现在我们需要做的最后一件事是安装python2.7-dev包,只需在Raspberry Pi上运行以下命令即可安装它。
sudo apt-get install python2.7-dev
3.首先,我们必须首先克隆Python Library SPI Py并将其安装到我们的Raspberry Pi。这个库有助于处理与SPI的交互,并且是本教程的关键组件,因为我们需要Raspberry Pi与RFID RC522进行交互。
在Raspberry Pi上运行以下两个命令来克隆源代码。
cd ~ git clone https://github.com/lthiery/SPI-Py.git
4.现在将Python Py Python库克隆到我们的Raspberry Pi中,我们需要安装它,这是非常简单的,因为我们需要做的就是更改它的目录并在Raspberry Pi上运行一个简单的python命令。
cd SPI-Py
sudo python setup.py install
5.现在我们已经安装了SPI-Py,现在我们可以从PiMyLifeUp Github中克隆我们的RFID RC522 Python代码。这个存储库中包含两个文件:
MFRC522.py是RFID RC522电路的一个实现。
SimpleMFRC522.py采用MFRC522.py文件,并大大简化它。
为了克隆这个仓库,你可以在Raspberry Pi中输入以下两个命令。
git clone https://github.com/pimylifeup/MFRC522-python.git cd MFRC522-python/
sudo python read.py
有的人下载的可能会没有这个read.py,几个月后的我再次git clone下来就没有这个文件,这是因为git被更新了,下面我放出之前的
#!/usr/bin/env python # -*- coding: utf8 -*- # # Copyright 2014,2018 Mario Gomez <mario.gomez@teubi.co> # # This file is part of MFRC522-Python # MFRC522-Python is a simple Python implementation for # the MFRC522 NFC Card Reader for the Raspberry Pi. # # MFRC522-Python is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # MFRC522-Python is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with MFRC522-Python. If not, see <http://www.gnu.org/licenses/>. # import RPi.GPIO as GPIO import MFRC522 import signal continue_reading = True # Capture SIGINT for cleanup when the script is aborted def end_read(signal,frame): global continue_reading print "Ctrl+C captured, ending read." continue_reading = False GPIO.cleanup() # Hook the SIGINT signal.signal(signal.SIGINT, end_read) # Create an object of the class MFRC522 MIFAREReader = MFRC522.MFRC522() # Welcome message print "Welcome to the MFRC522 data read example" print "Press Ctrl-C to stop." # This loop keeps checking for chips. If one is near it will get the UID and authenticate while continue_reading: # Scan for cards (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL) # If a card is found if status == MIFAREReader.MI_OK: print "Card detected" # Get the UID of the card (status,uid) = MIFAREReader.MFRC522_Anticoll() # If we have the UID, continue if status == MIFAREReader.MI_OK: # Print UID print "Card read UID: %s,%s,%s,%s" % (uid[0], uid[1], uid[2], uid[3]) # This is the default key for authentication key = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF] # Select the scanned tag MIFAREReader.MFRC522_SelectTag(uid) # Authenticate status = MIFAREReader.MFRC522_Auth(MIFAREReader.PICC_AUTHENT1A, 8, key, uid) # Check if authenticated if status == MIFAREReader.MI_OK: MIFAREReader.MFRC522_Read(8) MIFAREReader.MFRC522_StopCrypto1() else: print "Authentication error"
这时候拿一个钥匙或者卡片靠近模块,屏幕就会显示出它的信息,如下图,看到有两个UID,一个是卡片的,一个是蓝色钥匙扣的。
6.现在将存储库保存到我们的Raspberry Pi中,我们可以开始为我们的RFID RC522进行编程。首先,我们将向您展示如何使用RC522将数据写入RFID卡。只需进入下一节开始编程我们的第一个Python脚本。
用RFID RC522写入
对于我们的第一个Python脚本,我们将向您展示如何将RC522的数据写入您的RFID标签。由于SimpleMFRC522脚本,这将是相对简单的,但我们仍然会进入每个部分的代码字。
1.首先将目录切换到我们新克隆的文件夹,然后开始编写我们的Write.py python脚本。
cd ~/MFRC522-python sudo nano Write.py
2.在这个文件中,写下面几行代码。这基本上会要求您输入文字,然后将文字写入RFID标签。
#!/usr/bin/env python
import RPi.GPIO as GPIO
import SimpleMFRC522
这段代码的第一行有助于告诉终端如何解释文件,它让它知道它应该在执行时使用Python,而不是其他的东西,如Bash。
我们的第一个导入,RPi.GPIO具有与GPIO引脚交互所需的所有功能,我们需要这个来确保在脚本运行完成后它们被清除。
第二次导入,在我们的SimpleMFRC522库中导入,这是我们将用来实际与RFID RC522进行交谈的地方,与基本的MFRC522库相比,它极大地简化了处理芯片。
reader = SimpleMFRC522.SimpleMFRC522()
这一行创建一个SimpleMFRC522作为对象的副本,运行它的设置功能,然后将它存储在我们的reader变量中。
try: text = raw_input('New data:') print("Now place your tag to write") reader.write(text) print("Written")
我们的下一个代码块保存在一个try语句中,这样我们就可以捕获任何异常并正确清理。确保在尝试之后保留“选项卡”:因为Python对空白敏感,并且它在代码块之间有所不同。
这里的第二行是从命令行读入一个输入,我们使用Python 2.7中的raw_input来读入所有的输入并将其存储在我们的文本变量中。
通过第三行,我们利用print()来通知用户,他们现在可以将RFID标签放在阅读器上进行书写。
之后,在我们的第四行代码中,我们使用reader对象将存储在文本变量中的值写入RFID标签,这基本上告诉RFID RC522电路将文本值写入某个扇区。
最后在第五行代码中,我们再次使用print()来通知用户我们已经成功写入RFID标签。
finally: GPIO.cleanup()
我们最后的两行代码基本上处理脚本的退出。最后总是在try语句之后出现,意思是不管我们运行GPIO.cleanup()函数。这是至关重要的,因为清理失败可能会阻止其他脚本正常工作。
3.一旦你完成了你的脚本的写作,它应该看起来如下所示。
#!/usr/bin/env python import RPi.GPIO as GPIO import SimpleMFRC522 reader = SimpleMFRC522.SimpleMFRC522() try: text = raw_input('New data:') print("Now place your tag to write") reader.write(text) print("Written") finally: GPIO.cleanup()
一旦你感到高兴的是代码看起来是正确的,你可以通过按下Ctrl + X然后按下Y然后最后按Enter来保存文件。
4.现在我们已经写我们的脚本,我们将要最后测试它。在测试脚本之前,确保您有一个方便的RFID标签。准备好之后,在Raspberry Pi的终端中输入以下命令。
sudo python Write.py
5.你将被要求写入新的数据,在我们的例子中,我们只是简单地输入alex 123。当你对自己写的东西满意的时候,按下回车键。
6.完成后,将RFID标签放在RFID RC522电路的顶部。一旦检测到,它会立即将新数据写入标签。如果成功,您应该看到“ 写入 ”出现在您的命令行中。
您可以查看下面的示例输出以查看成功运行的样子。
pi@raspberrypi:~/MFRC522-python $ sudo python Write.py
输入
New data: alex 123
输完回车
Now place your tag to write
放你的卡片或者钥匙扣到芯片上,碰一下就行了。
Written
写入成功
7.现在,您已经成功编写了您的Write.py脚本,现在我们可以继续向您展示如何在本教程的下一部分中从RFID RC522读取数据。
用RFID RC522读取
现在我们已经写了我们的脚本来使用我们的RC522来写入RFID标签,现在我们可以编写一个脚本来读取这个数据。
1.首先,通过更改目录来确保我们位于正确的位置,然后运行nano开始编写Read.py脚本。
cd ~/MFRC522-pythonsudo nano Read.py
#!/usr/bin/env python
import RPi.GPIO as GPIO
import SimpleMFRC522
2.在这个文件中,写下面几行代码。这个脚本将基本上等待,直到您将您的RFID标签放在RFID RC522阅读器上,它将输出标签上读取的数据。含了所有处理Raspberry Pi的GPIO引脚的函数,我
第一行代码基本上告诉操作系统如何处理文件,当用户执行它。否则,它会尝试运行它作为一个普通的脚本文件,而不是一个python文件。
第一个导入是RPi.GPIO。这个库包们主要导入这个函数来确保在脚本执行完成后进行清理。
第二个导入是SimpleMFRC522。这个脚本包含一些帮助功能,使得从RFID RC522的写入和读取处理变得非常容易,没有它,我们简单的脚本将变得相当长。
reader = SimpleMFRC522.SimpleMFRC522()
这一行非常重要,因为它调用SimpleMFRC522的创建函数,然后将其作为对象存储到我们的reader变量中,以便稍后与之交互
try: id, text = reader.read() print(id) print(text)
下一个代码块包含在一个try语句中,我们使用它来捕获可能发生的异常,并很好地处理它们。您需要确保在try之后使用“ tabs ”,因为Python对空白敏感。
这段代码中的第二行打电话给我们的阅读器对象,在这种情况下,它基本上告诉电路开始读取放置在RC522阅读器顶部的任何RFID标签。
通过第三行和第四行,我们利用print()打印出读取RFID芯片时收到的信息,其中包括与RFID标签关联的ID和存储在标签上的文本。
finally: GPIO.cleanup()
最后两行代码处理脚本的终止。finally语句总是在try语句之后触发,即使我们得到一个异常。
这可以确保不管我们运行GPIO.cleanup()函数。
由于未能清除GPIO,所以非常重要,可以防止其他脚本正常工作。
3.现在您已经完成了为您的RFID RC522 编写您的Read.py脚本,它应该看起来如下所示:
#!/usr/bin/env python import RPi.GPIO as GPIO import SimpleMFRC522 reader = SimpleMFRC522.SimpleMFRC522() try: id, text = reader.read() print(id) print(text) finally: GPIO.cleanup()
一旦你确定你已经输入了正确的代码,你可以通过按Ctrl + X然后按Y然后最后按Enter来保存文件。
4.现在我们已经完成了我们的Read.py脚本,我们需要测试它。在我们测试脚本之前,抓住一个你想读的RFID标签。一旦你准备好了,在Raspberry Pi的终端中输入以下命令。
sudo python Read.py
5.现在脚本正在运行,您只需将您的RFID标签放在RFID RC522电路的顶部。一旦Python脚本检测到RFID标签被放置在顶部,它将立即读取数据并将其打印回给您。
下面显示了一个成功输出的例子。
pi@raspberrypi:~/MFRC522-python $ sudo python Read.py
827843705425 alex 123
可以看到上次写进去的alex 123已经被读出来了。
7.如果您成功从您的Read.py脚本接收到数据,并使用您的Write.py脚本将文本推送到卡上,那么您已经成功设置了Raspberry Pi来连接RFID RC522电路。
在稍后的教程中,我们将会深入探讨这些脚本和RFID芯片。这包括探索如何在其他酷派DIY Pi项目中设置考勤系统。
如果您喜欢这款Raspberry RFID RC522教程,或有任何反馈,请随时在下面留言!
发表评论