树莓派如何连接使用使用 RFID (RC522)?

在本树莓派 RFID RC522 教程中,我将引导您完成如何设置树莓派并将 RFID RC522 芯片与之连接的步骤。

该项目是一个很酷的电路,可以将其用作考勤系统以使用它来打开锁。

RFID RC522 是基于 MFRC522 微控制器的非常低成本的 RFID (射频识别) 读取器和写入器。

该微控制器通过 SPI 协议提供其数据,并通过创建一个 13 .56MHz 的电磁场来工作,该电磁场用于与 RFID 标签进行通信。

确保您为 RFID RC522 购买的标签工作在 13 .56MHz 频率上,否则我们将无法读取它们。

我们将向您展示如何连接 RC522 ,并向您展示如何编写 Python 脚本以与芯片交互,以便您可以读写 RFID 标签。

您可以扩展本教程以使用树莓派 16×2 LCD 之类的东西,如果您想显示一些信息或显示一个对最终用户的视觉提示。

设备清单

以下是本树莓派 RFID RC522 教程所使用的所有细节。

推荐的:

  • 树莓派 2 或 3

  • Micro SD 卡

  • 电源

  • RC522 RFID 阅读器

  • 面包板

  • Breadboard Wire

可选的:

  • 树莓派外壳

  • 以太网网络连接或 * Wifi 加密狗 (Pi 3 具有 WiFi 内置的)

视频

下面我们有一个视频,向您展示在树莓派上设置 RC522 的过程,包括设置所有电路。

如果您希望对操作方法有更详尽的解释,则可以查看下面有关如何使用树莓派设置 RFID RC522 的书面指南。

Adblock 阻止了视频?订阅我们的无广告服务,为我们提供支持。

组装 RFID RC522

购买 RFID RC522 读卡器时,您会注意到的一件事是,其中 90 %都不带有已焊接的接头插针。缺少的接头插针意味着您必须自己做,幸运的是,焊接接头插针是一项相当简单的任务,即使是初学者。

1 首先,如果您随 RC522 收到的排针的尺寸不正确,然后将其向下卡扣,因此只有一排八个针。

2 将排针穿过 RC522 的孔。一个方便的技巧是将排针的长边放在面包板上,然后将电路放在排针的顶部。面包板将引脚固定牢固,从而更容易将其焊接到 RFID RC522 电路。

3 现在,使用热烙铁和一些焊料,慢慢焊接每个引脚。请记住,最好在将焊锡涂到焊点上之前先对其稍加加热,以确保焊锡会更多地粘附在焊点上,并减少形成冷焊点的机会。我们还建议您注意所施加的焊料量。

4 现在,将排针焊接到您的 RFID 电路后,就可以使用了,您可以继续本教程。

接线 RFID RC522

在您的 RFID RC522 上,您会注意到上面有 8 种可能的连接,它们是 ** SDA (串行数据信号), SCK (串行时钟), MOSI (主输出从站输入) , MISO (主机输入从机输出), IRQ (中断请求), GND (接地电源), RST (复位电路) 和 3.3v ** (3.3v 电源输入)。我们需要将除 IRQ 以外的所有这些都连接到树莓派的 GPIO 引脚。

您可以将它们直接连接到 GPIO 引脚,也可以像我们在本教程中所做的那样,将 RFID RC522 插入面包板,然后从那里连接到树莓派的 GPIO 引脚。

将 RFID RC522 连接到树莓派非常简单,只需要将 7 个 GPIO 引脚直接连接到 RFID 读取器即可。请遵循下表,并查看我们的 GPIO 指南,以了解将 RC522 连接到的 GPIO 引脚的位置。

  • ** SDA 连接到 Pin 24 **。
  • ** SCK 连接到引脚 23 **。
  • ** MOSI 连接至 Pin 19 **。
  • ** MISO 连接至 Pin 21 **。
  • ** GND 连接至引脚 6 **。
  • ** RST 连接到 Pin 22 **。
  • ** 3.3v 连接至引脚 1 **。

为 RFID RC522 设置 Raspbian

在开始在树莓派上使用 RFID RC522 的过程之前,我们首先必须对其配置进行更改。默认情况下,树莓派禁用了 SPI (串行外围接口),这是一个问题,因为这是我们的 RFID 读取器电路所要经历的。

不过,不要担心,因为重新启用此接口非常简单,只需按照下面的步骤将您的树莓派和 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 接口之前,我们首先必须重新启动树莓派。为此,请先按 ** Enter ,然后按 ESC ** 返回终端。

在树莓派上键入以下 Linux 命令到终端以重新启动树莓派。

sudo reboot

6 树莓派完成重启后,我们现在可以进行检查以确保它实际上已启用。最简单的方法是运行以下命令,查看是否列出了 ** spi \ _bcm2835 **。

lsmod | grep spi

如果看到 ** spi \ _bcm2835 **,则可以继续本教程,并跳到下一部分。如果由于某种原因在您输入上一个命令时它没有出现,请尝试执行以下三个步骤。

7 如果由于某些原因 SPI 模块未激活,我们可以通过在树莓派上运行以下命令来手动编辑启动配置文件。

sudovim/boot/config.txt

8 在配置文件中,使用 ** Ctrl + W 查找” dtparam = spi = on **”。

如果找到它,请检查它前面是否有一个 **#。如果有,请删除它,因为这会注释掉激活行。如果根本找不到该行,请在文件底部添加” dtparam = spi = on **”。

进行更改后,可以按 ** Ctrl + X ,然后按 Y **,然后按 Enter 键以保存更改。

现在,您可以再次从” 第 5 步” 继续进行,重新启动树莓派,然后检查是否已启用该模块。

为 RFID RC522 准备 Python

现在我们已经将 RFID RC522 电路连接到树莓派,我们现在可以打开它的电源并开始用 Python 编写简单脚本以与芯片交互的过程。

我们将向您展示如何写入的脚本将向您展示如何从 RFID 芯片读取数据以及如何对其进行写入。这些将为您提供有关如何处理数据的基本思想,并将成为进一步的 RFID RC522 教程的基础。

1 在开始编程之前,我们首先需要更新树莓派,以确保其运行所有软件的最新版本。在树莓派上运行以下两个命令以对其进行更新。

sudo apt-get update
sudo apt-get upgrade

2 现在,我们需要进行的最后一件事是安装 ** python3-dev python-pip git ** 软件包。只需在树莓派上运行以下命令即可安装本指南中有关设置 RFID 阅读器的所有必需软件包。

sudo apt-get install python3-dev python3-pip

3 首先,我们必须首先使用在上一步中下载的 python “** pip **” 工具将 Python 库 spidev 安装到我们的树莓派。

spidev ** 库有助于处理与 SPI 的交互,并且是本教程的关键组件,因为我们需要树莓派与 RFID RC522 进行交互。

在树莓派上运行以下命令,以通过 pip 将 ** spidev ** 安装到树莓派。

请注意,我们在这里使用 sudo 来确保已安装该软件包,以便所有用户都可以使用它,而不仅仅是当前用户。

sudo pip3安装 spidev **4** 现在我们已经将** spidev **库安装到了树莓派中,现在我们可以继续使用 pip 安装 MFRC522 库了。

如果您对查看库的工作方式或改善其行为感兴趣,可以从 PiMyLifeUp Github 中签出 RFID MFRC522 Python 代码。

MFRC522 库中包含两个文件,我们使用它们:

** MFRC522.py ** 是 RFID RC522 接口的实现,该库处理通过 Pi 的 SPI 接口与 RFID 进行通信的所有繁重工作。

** SimpleMFRC522.py 接受 MFRC522.py ** 文件,并使其大大简化,因为您只需处理几个功能即可。

要使用 pip 将 MFRC522 库安装到树莓派中,请继续并运行以下命令。

sudo pip3 安装 mfrc522 

5 现在将库保存到我们的树莓派中,我们就可以开始为 RFID RC522 进行编程了。首先,我们将向您展示如何使用 RC522 将数据写入 RFID 卡。只需进入下一部分就可以开始编写第一个 Python 脚本。

使用 RFID RC522 书写

对于我们的第一个 Python 脚本,我们将向您展示如何将 RC522 中的数据写入 RFID 标签。多亏了 SimpleMFRC522 脚本,这将相对简单,但是我们仍将深入研究代码的每个部分如何工作。

1 现在开始创建一个文件夹,在该文件夹中存储我们的两个脚本。

我们将这个文件夹称为”pi-rfid”,通过运行以下命令来创建它。

mkdir〜/pi-rfid

2 首先将目录更改为我们新克隆的文件夹,然后开始编写 ** Write.py ** Python 脚本。

cd〜/pi-rfid
sudo Nano Write.py

3 在此文件中,编写以下代码行。该代码基本上会要求您输入文本,然后将该文本写入 RFID 标签。

#!/usr/bin/env python

将 RPi .GPIO导入为 GPIO 
从 mfrc522 导入 SimpleMFRC522 

此段代码的第一行有助于告诉终端如何解释文件,并且让它知道在执行文件时应使用 Python ,而不是其他诸如 Bash 之类的文件。

我们的第一个导入文件 ** RPi.GPIO ** 具有与 GPIO 引脚交互所需的所有功能,因此我们需要确保在脚本完成运行时将其清除。

第二个导入是在我们的 ** SimpleMFRC522 ** 库中导入,这是我们将实际用于与 RFID RC522 进行通信的方式,与基础 MFRC522 库相比,它大大简化了芯片的处理。

读者= SimpleMFRC522()

该行创建一个 SimpleMFRC522 的副本作为一个对象,运行其设置功能,然后将其全部存储在我们的 reader 变量中。

尝试:
        文字=输入("新数据:")
        打印("现在放置标签以进行写")
        reader.write(文本)
        打印("书面")

我们的下一段代码保留在 try 语句中,这样我们可以捕获任何异常并正确进行清理。请确保在 ** try:** 之后保留” 制表符”,因为 Python 对空格敏感,并且这在代码块之间也是如此。

这里的第二行从命令行读取输入,我们在 Python 3 中使用 ** input ** 读取所有输入并将其存储在我们的 text 变量中。

在第三行中,我们利用 ** print ()** 通知用户,他们现在可以将其 RFID 标签放到阅读器上进行书写了。

然后,在第四行代码中,我们使用读取器对象将存储在文本变量中的值写入 RFID 标签,这将告诉 RFID RC522 电路将文本值写入特定扇区。

最后,在代码的第 5 行,我们再次使用 ** print ()** 通知用户我们已成功写入 RFID 标签。

最后:
        GPIO.cleanup()

最后两行代码处理脚本的退出。最后,总是发生在 try 语句之后,这意味着无论我们运行 ** GPIO.cleanup ()** 函数如何。这些行至关重要,因为无法清除可能会阻止其他脚本正常工作。

4 完成脚本编写后,其外观应如下所示。

#!/usr/bin/env python

将 RPi .GPIO导入为 GPIO 
从 mfrc522 导入 SimpleMFRC522 

读者= SimpleMFRC522()

尝试:
        文字=输入("新数据:")
        打印("现在放置标签以进行写")
        reader.write(文本)
        打印("书面")
最后:
        GPIO.cleanup()

一旦您对代码看起来正确感到满意,就可以保存文件,方法是按 ** Ctrl + X ,然后按 Y ,最后按 Enter **。

5 现在我们已经编写了脚本,我们将对其进行测试。在测试脚本之前,请确保已准备好 RFID 标签。准备就绪后,在树莓派的终端中键入以下命令。

sudo python3  Write.py**6** 会要求您写入新数据,在我们的情况下,我们将只输入** pimylifeup **作为其简短内容。当您对所写的内容满意时,按** Enter **。

7 完成后,只需将 RFID 标签放在 RFID RC522 电路的顶部即可。一旦检测到它,它将立即将新数据写入标签。如果成功,您应该在命令行中看到”** Written **”。

您可以在下面的示例输出中查看成功运行的样子。

pi @ raspberrypi:〜/pi-rfid $ sudo python3 Write.py
新数据:pimylifeup
现在放置您的标签来写
书面

8 您现在已经成功编写了 ** Write.py ** 脚本,在本教程的下一部分中,我们现在可以继续向您展示如何从 RFID RC522 读取数据。

使用 RFID RC522 读取

现在,我们已经编写了脚本以使用 RC522 写入 RFID 标签,现在我们可以编写一个脚本来从标签中读取该数据。

1 首先,通过更改目录以确保我们位于正确的位置,然后我们可以运行 ** vim 来开始编写 Read.py ** 脚本。

cd〜/pi-rfid
sudo vim Read .py

2 在此文件中,编写以下代码行。该脚本基本上会坐着等待,直到您将 RFID 标签放在 RFID RC522 阅读器上,然后它将输出从标签读取的数据。

#!/usr/bin/env python

将 RPi .GPIO导入为 GPIO 
从 mfrc522 导入 SimpleMFRC522 

第一行代码告诉操作系统用户执行文件时如何处理文件。否则,它将尝试并仅将其作为常规脚本文件而不是 Python 文件运行。

第一个导入是 ** RPi.GPIO **。该库包含所有处理树莓派的 GPIO 引脚的功能,并且我们主要导入此文件以确保脚本完成执行后进行清理。

第二个导入是 ** SimpleMFRC522 **。该脚本包含一些帮助程序功能,这使处理 RFID RC522 的读写变得非常容易,没有它,脚本将变得很长。

读者= SimpleMFRC522()

这行非常重要,因为它调用了 SimpleMFRC522 的创建函数,然后将其作为对象存储到我们的 reader 变量中,以便我们以后可以与其进行交互。

尝试:
        ID,文字= reader.read()
        打印(id)
        打印(文字)

下一段代码包含在 ** try 语句中,我们使用它来捕获可能发生的任何异常并很好地处理它们。您需要确保使用 try:之后显示的” tabs **”,因为 Python 对空格敏感。

此代码块中的第二行调用我们的读取器对象,在这种情况下,它告诉电路开始读取放置在 RC522 读取器顶部的所有 RFID 标签。

在第三和第四行中,我们利用 ** print ()** 打印从读取 RFID 芯片中接收到的信息,其中包括与 RFID 标签关联的 ID 和存储在标签上的文本。

最后:
        GPIO.cleanup()

最后两行代码处理脚本的终止。即使我们遇到异常,** finally ** 语句也总是在 try 语句之后触发。

该 try 语句确保无论我们运行 ** GPIO.cleanup ()** 函数如何。这很关键,因为无法清理 GPIO 会阻止其他脚本正常工作。

3 至此,您已经为 RFID RC522 编写了 ** Read.py ** 脚本,它看起来应该如下图所示。

#!/usr/bin/env python

将 RPi .GPIO导入为 GPIO 
从 mfrc522 导入 SimpleMFRC522 

读者= SimpleMFRC522()

尝试:
        ID,文字= reader.read()
        打印(id)
        打印(文字)
最后:
        GPIO.cleanup()

确定输入正确的代码后,可以按 Ctrl + X,然后按 Y ,最后按 Enter ,以保存文件。

4 现在我们终于完成了 Read .py 脚本,我们需要对其进行测试。在测试脚本之前,请获取要读取的 RFID 标签之一。准备就绪后,在树莓派的终端中键入以下命令。

sudo python3  Read.py

5 现在正在运行脚本,您要做的就是将 RFID 标签放在 RFID RC522 电路的顶部。一旦 Python 脚本检测到 RFID 标签位于顶部,它将立即读取数据并将其打印回给您。

下面显示了一个成功输出的示例。

pi @ raspberrypi:〜/pi-rfid $ sudo python3 Read.py
827843705425
pimylifeup

7 如果您已成功从 Read .py 脚本接收到包含使用 Write .py 脚本推送到卡的文本的数据,则说明您已成功设置树莓派与 RFID RC522 电路连接。您可以按照我们的树莓派供电的 RFID 考勤系统指南,了解如何设置 RFID RC522 阅读器 / 书写器,作为检查考勤的一种方法。 。
在以后的教程中,我们将对这些脚本和 RFID 芯片进行更深入的研究。它将包括探索如何在其他 [酷 DIY Pi 项目] 中建立门禁系统 (/categories/projects/)。

如果您喜欢本 Raspberry RFID RC522 教程或有任何反馈,请随时在我们的论坛上发表评论。

分享到