質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

0回答

1526閲覧

Felicaカードからblockデータを読む

deka-cho

総合スコア18

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

1クリップ

投稿2022/01/02 06:49

編集2022/01/03 05:20

ArduinoにPN532のモジュールをつけてFelicaカードからblockデータを読み出したい。
https://qiita.com/gpioblink/items/91597a5275862f7ffb3cを参考にしたがうまくいきません。PN532のモジュールは記事と異なりますがIDmは読めているのでソフトの問題と思われます。
Arduino のコードとスマホのアプリで読み取ったFelicaカードの内容を挿入します。
1.アプリの最初の画像
最初の画面
2.イメージ説明
読み出したいblock1はService1とService2の両方に書いてある

3.イメージ説明
この画面からOverlapServiceを押すと次の画面

4.上記からOverlapServiceを押した画面
Service1がServiceCodeの100bと思われる。no authentification と書いてあるので読める筈
5.上記3からDATA(UTF8)を押した画面

3の画面から下に隠れているDATA(UTF-8)を押すとこの画面
この中のBlock1を取得したい!

下記コードで実行するとシリアルモニタ表示は下記となる。
15:45:28.613 -> Waiting for an FeliCa card... Found a card!
15:45:31.230 -> IDm: 01 10 09 10 49 1C E1 21
15:45:31.277 -> PMm: 10 0B 4B 42 84 85 D0 FF
15:45:31.324 -> System Code: 3
15:45:31.464 -> Read Without Encryption command -> error
15:45:31.512 -> Block no. 0: 04 08 08 9C 14 E5 FE DD 7D DE 1F 6A A1 DE FD C2
15:45:31.606 -> Block no. 1: 4B 7E FE 9B CF 7C 7F BF 79 9C E3 5F FB FF 7D FF
15:45:31.653 -> Block no. 2: DF BE EE FD 9B B4 FB FF 6B 74 FB 57 FF FF AB AF
15:45:31.746 -> Card access completed!
15:45:31.746 ->
(Blockはエラーでも表示させるようにした。)

ご指導よろしくお願いいたします。

Arduino言語

1 2`#include <SoftwareSerial.h> 3#include <SPI.h> 4#include <NfcAdapter.h> 5#include <Arduino.h> 6#include <PN532_SWHSU.h> 7#include <PN532.h> 8#include <PN532_debug.h> 9 10SoftwareSerial SWSerial(8, 9 ); // RX, TX original( 10, 11 ) 11PN532_SWHSU pn532swhsu( SWSerial ); 12PN532 nfc( pn532swhsu ); 13int buttonState = 0; // current state of the button 14int buttonState2 = 0; // current state of the button 15 16uint8_t _prevIDm[8]; 17unsigned long _prevTime; 18 19void PrintHex8(const uint8_t d) { 20 Serial.print(" "); 21 Serial.print( (d >> 4) & 0x0F, HEX); 22 Serial.print( d & 0x0F, HEX); 23} 24 25void setup(void) 26{ 27 Serial.begin(9600, SERIAL_8O1); 28 pinMode(5, OUTPUT); //終了ボタンLED 29 pinMode(6, OUTPUT); //開始ボタンLED 30 pinMode(16, INPUT); //終了ボタン 31 pinMode(17, INPUT); //開始ボタン 32 digitalWrite(13, HIGH); 33 Serial.flush(); //出力バッファのクリア 34 35 nfc.begin(); 36 nfc.setPassiveActivationRetries(0xFF); 37 nfc.SAMConfig(); 38} 39 40void loop(void) 41{ 42 String crewcode; 43 uint8_t ret; 44 String idm1 = ""; 45 uint16_t systemCode = 0xFFFF; 46 uint8_t requestCode = 0x01; // System Code request 47 uint8_t idm[8]; 48 uint8_t pmm[8]; 49 50 uint8_t cpyiDM[8]; 51 unsigned long timer1; 52 53 uint16_t systemCodeResponse; 54 digitalWrite(6, LOW); 55 digitalWrite(5, LOW); 56 digitalWrite(16,HIGH); 57 digitalWrite(17,HIGH); 58 59 buttonState = digitalRead(17);//開始 60 buttonState2 = digitalRead(16);//終了釦 61 if (buttonState == LOW){ 62 digitalWrite(6, HIGH); 63 Serial.print("Waiting for an FeliCa card... "); 64 65 ret = nfc.felica_Polling(systemCode, requestCode, idm, pmm, &systemCodeResponse, 60000); 66 if (ret != 1) 67 { 68 Serial.println("Could not find a card"); 69 return; 70 } 71 72 if ( memcmp(idm, _prevIDm, 8) == 0 ) { 73 if ( (millis() - _prevTime) < 3000 ) { 74 Serial.println("Same card"); 75 delay(500); 76 return; 77 } 78 } 79 Serial.println("Found a card!"); 80 81 Serial.print(" IDm: "); 82 nfc.PrintHex(idm, 8); 83 memcpy(cpyiDM, idm, 8); 84 Serial.print(" PMm: "); 85 nfc.PrintHex(pmm, 8); 86 Serial.print(" System Code: "); 87 Serial.print(systemCodeResponse, HEX); 88 Serial.print("\n"); 89 tone(3,500,100); //OK音 90 delay(200); 91 tone(3,500,100); 92 memcpy(_prevIDm, idm, 8); 93 _prevTime = millis(); 94 timer1= millis(); 95 96 Serial.print("Read Without Encryption command -> "); 97 uint8_t blockData[3][16]; 98 uint16_t serviceCodeList[1] = {0x100b}; 99 uint16_t blockList[3] = {0x8000, 0x8001, 0x8002}; 100 serviceCodeList[1] = 0x100b; 101// blockList[0] = 0x8000; 102// blockList[1] = 0x8002; 103// blockList[2] = 0x8003; 104 ret = nfc.felica_ReadWithoutEncryption(1, serviceCodeList, 3, blockList, blockData); 105 if (ret != 1) 106 { 107 Serial.println("error"); 108 for(int i=0; i<3; i++ ) { 109 Serial.print(" Block no. "); Serial.print(i, DEC); Serial.print(": "); 110 nfc.PrintHex(blockData[i], 16); 111 } 112 } else { 113 Serial.println("OK!"); 114 for(int i=0; i<3; i++ ) { 115 Serial.print(" Block no. "); Serial.print(i, DEC); Serial.print(": "); 116 nfc.PrintHex(blockData[i], 16); 117 } 118 } 119 120 Serial.println("Card access completed!\n"); 121 delay(1000); 122 } 123}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/01/02 10:49

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問