树莓派3B+ 使用RFID RC522芯片进行数据的读写

MFRC-522 RC522 RFID射频 C卡感应模块复旦卡钥匙扣  Arduino树莓派介绍

TB24HIYcVXXXXXTXXXXXXXXXXXX_!!1754311986_眸目压缩.jpg

【电气参数简介】

资料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。

IMG_5517_眸目压缩.jpg

在这个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            |

硬件接好了仔细检查一下有没有接错,正常情况下射频卡会亮红灯。

e8dd5bb7999d421d0e3fc5ce7df7fba3.jpg

IMG_5514_眸目压缩.jpg

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"

READ.PY.png

这时候拿一个钥匙或者卡片靠近模块,屏幕就会显示出它的信息,如下图,看到有两个UID,一个是卡片的,一个是蓝色钥匙扣的。

CARD.png


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

QQ截图20190105070717.png

可以看到上次写进去的alex 123已经被读出来了。

7.如果您成功从您的Read.py脚本接收到数据,并使用您的Write.py脚本将文本推送到卡上,那么您已经成功设置了Raspberry Pi来连接RFID RC522电路。

在稍后的教程中,我们将会深入探讨这些脚本和RFID芯片。这包括探索如何在其他酷派DIY Pi项目中设置考勤系统。

如果您喜欢这款Raspberry RFID RC522教程,或有任何反馈,请随时在下面留言!



最后编辑于:2018/10/12作者: admin

发表评论