不惑にしてまだ何者でもない者のブログ

Arduino関連、Raspberry Pi関連、プログラミング学習

CrowPiレッスン11:RFIDモジュールを使用してRFIDカードを読み取り/書き込みする

2020-11-08 11:05:41 | CrowPi

Read / Write RFID card using the RFID module.

レッスン11"RFIDモジュールを使用してRFIDカードを読み取り/書き込みする"をやっていく。

Wikiによると
RFID(英: radio frequency identifier)とは、ID情報を埋め込んだRFタグから、電磁界や電波などを用いた近距離(周波数帯によって数cm~数m)の無線通信によって情報をやりとりするもの、および技術全般を指す。

何を学習するか

このレッスンを終了すると、次のことができるようになります。
  • RFIDを制御し、RFIDからデータを読み書きして、チップを認識します

何が必要か

  • 初期設定後のCrowPiボード
  • RFIDチップ(CrowPiに含まれています)
↓RFIDチップとして以下の二種類が用意されている。



Requires switching modules using the switch

  • いいえ

CrowPi上のRFIDモジュールの位置


↑USBが結構邪魔😅


RFIDの操作

このレッスンのスクリプトは、PDFやレッスン動画で紹介されているものとExamplesに用意されているもので異なる。
PDFやレッスン動画では、pirc522ライブラリを使った以下のスクリプトが紹介されている。
  • RFID_Read.py
一方、Examplesでは、RFIDフォルダに以下の4つのスクリプトが用意されており、いずれもMFRC522ライブラリが使用されている。
  • Dump.py
  • MFRC522.py
  • Read.py
  • Write.py
そこで、例えば、Read.pyは以下の通り。

Examples/RFID/Read.py
#!/usr/bin/env python
# -*- coding: utf8 -*-
# Copyright 2014,2018 Mario Gomez
import RPi.GPIO as GPIO
import MFRC522
import signal

continue_reading = True
# Incase user wants to terminate, this function is exactly for that reason.
def end_read(signal,frame):
 global continue_reading
 print("Ctrl+C captured, ending read.")
 continue_reading = False
 GPIO.cleanup()

signal.signal(signal.SIGINT, end_read)
# create the reader object
MIFAREReader = MFRC522.MFRC522()

# Welcome greeting
print("Welcome to MFRC522 RFID Read example")
print("Press CTRL+C anytime to quit.")

# The function will continue running to detect untill user said otherwise
while continue_reading:
 # detect touch of the card, get status and tag type
 (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
 # check if card detected or not
 if status == MIFAREReader.MI_OK:
  print("Card detected")

 # Get the RFID card uid and status
 (status,uid) = MIFAREReader.MFRC522_Anticoll()

 # If status is alright, continue to the next stage
 if status == MIFAREReader.MI_OK:
  # Print UID
  print("Card read UID: %s,%s,%s,%s" % (uid[0], uid[1], uid[2], uid[3]))
  # standard key for rfid tags
  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 successfully, read the data
  if status == MIFAREReader.MI_OK:
   MIFAREReader.MFRC522_Read(8)
   MIFAREReader.MFRC522_StopCrypto1()
  else:
   print("Authentication error")

このスクリプトを実行して、RFIDチップをかざすと以下のようにチップから情報を読み込むことができる。



上の写真の場合、RFIDチップは初期状態のため、何も情報が設定されておらず、0が並んだものが表示される。

Write.pyを実行すると、RFIDチップに情報が書き込まれ、もう一度Read.pyで読み取ると、その書き込まれた情報が表示されることを確認した。

Dump.pyは、RFIDチップに書き込まれた情報を元に承認処理を行うスクリプトのようであるが、情報を書き込んだRFIDチップでも初期状態のRFIDチップでも承認はされなかった。

また、MFRC522.pyに関しては、RFIDチップをかざす間もなくスクリプトが終了するため、何をやっているのかは現時点で不明である。
→たぶん、Read.pyやWrite.pyでimportしているライブラリの本体なのだろう。

もうちょっとスクリプトの中身を見て勉強しようと思う。



最新の画像もっと見る