elechouse/PN532 ライブラリで Felica 学生カードを読む追試
(Felica/Mifare/NFC チャレンジシリーズ) その他の記事はこちら 「Felica/Mifare/NFC でいろいろ実験」
https://qiita.com/nanbuwks/items/1f416d6e45a87250ee0a
@gpioblink さんの記事「PN532を使ってArduinoでFeliCa学生証を読む方法」
https://qiita.com/gpioblink/items/91597a5275862f7ffb3c
では、PN532 NFC RFID module を使って FeliCa 学生症から学籍番号を読んでました。
この FeliCa 学生証というのはFCFキャンパスカードのことでしょうか。
この記事で使っているライブラリは
https://github.com/elechouse/PN532
です。
この記事を追試してみました。
環境
- PN532 NFC RFID module
- 電解コンデンサ追加加工済
- cf., 「NFC モジュールの動作安定性を改善する」https://qiita.com/nanbuwks/items/a9217ba2e8f206b899b1
- Arduino 1.8.10 Linux版 (ポータブル化済)
- Arduino UNO
準備
- 電解コンデンサ追加加工済
- cf., 「NFC モジュールの動作安定性を改善する」https://qiita.com/nanbuwks/items/a9217ba2e8f206b899b1
ライブラリのインストールや設定、接続方法などはこちらの通りに行いました。
「PN532 NFC RFID module を Arduino UNO で読む」
https://qiita.com/nanbuwks/items/42f639e7eec928181298
ライブラリ付属のサンプルプログラムで動作確認
「ファイル」-「スケッチ例」-「カスタムライブラリのスケッチ例」-「PN532」-「FeliCa_card_detection」を選び実行します。
手持ちの nanaco カードを読ませてみました。
Hello!
for an FeliCa card... Hello!
Found chip PN532
Firmware ver. 1.6
Waiting for an FeliCa card... Found a card!
IDm: 01 14 B4 27 6B 11 5A 23
PMm: 0F 0D 23 04 2F 77 83 FF
System Code: 8B61
Card access completed!
Waiting for an FeliCa card... Could not find a card
Waiting for an FeliCa card...
ボードを認識、nanaco カードの IDm や PMm が無事読めていることがわかります。
学籍番号を読むプログラムを試してみる
@gpioblink さんの記事「PN532を使ってArduinoでFeliCa学生証を読む方法」
https://qiita.com/gpioblink/items/91597a5275862f7ffb3c
の記事から、テスト用に抜粋したものが以下のプログラムです。
#include <Arduino.h>
#include <SPI.h>
#include <PN532_SPI.h>
#include <PN532.h>
#include <Wire.h>
PN532_SPI pn532spi(SPI, 10);
PN532 nfc(pn532spi);
#include <PN532_debug.h>
uint8_t _prevIDm[8];
unsigned long _prevTime;
void PrintHex8(const uint8_t d) {
Serial.print(" ");
Serial.print( (d >> 4) & 0x0F, HEX);
Serial.print( d & 0x0F, HEX);
}
void setup(void)
{
Serial.begin(115200);
Serial.println("Hello!");
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (!versiondata)
{
Serial.print("Didn't find PN53x board");
while (1) {delay(10);}; // halt
}
Serial.print("Found chip PN5"); Serial.println((versiondata >> 24) & 0xFF, HEX);
Serial.print("Firmware ver. "); Serial.print((versiondata >> 16) & 0xFF, DEC);
Serial.print('.'); Serial.println((versiondata >> 8) & 0xFF, DEC);
nfc.setPassiveActivationRetries(0xFF);
nfc.SAMConfig();
memset(_prevIDm, 0, 8);
}
void loop(void)
{
uint8_t ret;
//uint16_t systemCode = 0xFFFF;
uint16_t systemCode = 0xFE00;
uint8_t requestCode = 0x01; // System Code request
uint8_t idm[8];
uint8_t pmm[8];
uint16_t systemCodeResponse;
Serial.print("Waiting for an FeliCa card... ");
ret = nfc.felica_Polling(systemCode, requestCode, idm, pmm, &systemCodeResponse, 5000);
if (ret != 1)
{
Serial.println("Could not find a card");
delay(500);
return;
}
if ( memcmp(idm, _prevIDm, 8) == 0 ) {
if ( (millis() - _prevTime) < 3000 ) {
Serial.println("Same card");
delay(500);
return;
}
}
Serial.println("Found a card!");
Serial.print(" IDm: ");
nfc.PrintHex(idm, 8);
Serial.print(" PMm: ");
nfc.PrintHex(pmm, 8);
Serial.print(" System Code: ");
Serial.print(systemCodeResponse, HEX);
Serial.print("\n");
memcpy(_prevIDm, idm, 8);
_prevTime = millis();
uint8_t blockData[3][16];
uint16_t serviceCodeList[1];
uint16_t blockList[3];
memset(blockData[0], 0, 16);
Serial.print("Read Without Encryption command -> ");
serviceCodeList[0] = 0x1A8B;
blockList[0] = 0x8000;
blockList[1] = 0x8002;
blockList[2] = 0x8003;
ret = nfc.felica_ReadWithoutEncryption(1, serviceCodeList, 3, blockList, blockData);
if (ret != 1)
{
Serial.println("error");
} else {
Serial.println("OK!");
for(int i=0; i<3; i++ ) {
Serial.print(" Block no. "); Serial.print(i, DEC); Serial.print(": ");
nfc.PrintHex(blockData[i], 16);
}
}
Serial.println("Card access completed!\n");
delay(1000);
}
このプログラムでは、システムコードFE00、 サービスコード1A8B 、ブロック 8000-8003までを暗号化なしで読んでいます。
まずは nanaco カードを読ませてみました。
Hello!
Found chip PN532
Firmware ver. 1.6
Waiting for an FeliCa card... Found a card!
IDm: 11 14 B4 27 6B 11 5A 23
PMm: 0F 0D 23 04 2F 77 83 FF
System Code: FE00
Read Without Encryption command -> error
Card access completed!
Waiting for an FeliCa card... Same card
Waiting for an FeliCa card... Same card
Waiting for an FeliCa card... Same card
学生カードを読ませてみました。
Waiting for an FeliCa card... Could not find a card
Waiting for an FeliCa card... Found a card!
IDm: 11 16 06 00 0A 1E 78 03
PMm: 03 32 42 82 82 47 AA FF
System Code: FE00
Read Without Encryption command -> OK!
Block no. 0: 30 31 31 30 31 32 33 34 35 36 37 38 00 00 31 31
Block no. 1: 33 36 30 31 30 30 36 34 32 30 31 33 30 34 30 31
Block no. 2: 32 30 32 31 30 33 33 31 39 39 39 39 39 39 39 39
Card access completed!
Waiting for an FeliCa card... Same card
Waiting for an FeliCa card... Same card
Waiting for an FeliCa card... Could not find a card
Waiting for an FeliCa card...
読めているみたいですね。
Author And Source
この問題について(elechouse/PN532 ライブラリで Felica 学生カードを読む追試), 我々は、より多くの情報をここで見つけました https://qiita.com/nanbuwks/items/6396f09bf58840340bab著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .