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チップは初期状態のため、何も情報が設定されておらず、0が並んだものが表示される。
Write.pyを実行すると、RFIDチップに情報が書き込まれ、もう一度Read.pyで読み取ると、その書き込まれた情報が表示されることを確認した。
Dump.pyは、RFIDチップに書き込まれた情報を元に承認処理を行うスクリプトのようであるが、情報を書き込んだRFIDチップでも初期状態のRFIDチップでも承認はされなかった。
また、MFRC522.pyに関しては、RFIDチップをかざす間もなくスクリプトが終了するため、何をやっているのかは現時点で不明である。
→たぶん、Read.pyやWrite.pyでimportしているライブラリの本体なのだろう。
→たぶん、Read.pyやWrite.pyでimportしているライブラリの本体なのだろう。
もうちょっとスクリプトの中身を見て勉強しようと思う。