PN532 NFC RFID module + elechouse を ESP32 Arduino で試す

(Felica/Mifare/NFC チャレンジシリーズ) その他の記事はこちら 「Felica/Mifare/NFC でいろいろ実験」
https://qiita.com/nanbuwks/items/1f416d6e45a87250ee0a

-----

「PN532 NFC RFID module を Arduino UNO で読む」
https://qiita.com/nanbuwks/items/42f639e7eec928181298

では Arduino UNO を使いましたが、ESP32 で同様に使えるか試してみます。

上記記事でライブラリをいくつか試してみましtが、

> FeliCa を使う場合は elechouse 一択のようです。

と書きました。

以下は elechouse の PN532 ライブラリを ESP32 で使えるか試した結果です

# 環境

- Arduino 1.8.10 Linux 版
  - portable 化済
- esp32 by Espressif Systems Version 1.0.3
- Ubuntu Linux 20.04 AMD64
- NFC library for Arduino
  - https://github.com/elechouse/PN532
- WEMOS LOLIN32
  - ( ≒ ESP32 DevKitC )
 

# ライブラリ修正

「ESP32 Arduino で error: 'boolean' does not name a type」
https://qiita.com/nanbuwks/items/d62157f6fccdbed54f86

のように、PN532_SPI.cpp を直しておきます。

# スケッチ

Mifare カードを読むサンプルスケッチで試します。
「ファイル」-「スケッチ例」-「カスタムライブラリのスケッチ例」-「PN532」-「ReadMifare」を選びます。

# スイッチ設定

以下の接続時には、それぞれ PN532 NFC RFID module 上のスイッチを接続に合わせて設定しています。

# I2C接続

![IMG_20220321_163049.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/cafc7f58-4d19-d167-ca52-e7caf5202e0c.jpeg)


|ESP32|PN532 NFC Module |
|---|---|
|GND|GND|
|3V3|VCC|
|SDA/21|SDA |
|SCL/21|SCL|

## 実行結果

```


Hello!
Found chip PN532
Firmware ver. 1.6
Waiting for an ISO14443A Card ...
Found an ISO14443A card
  UID Length: 4 bytes
  UID Value:  D3 6A 93 05

Seems to be a Mifare Classic card (4 byte UID)
Trying to authenticate block 4 with default KEYA value
Sector 1 (Blocks 4..7) has been authenticated
Reading Block 4:
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
```

OK


# SPI接続
![IMG_20220321_162654.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/89d65148-8ba3-468c-be4c-340437f4e667.jpeg)

|ESP32|PN532 NFC Module |
|---|---|
|3V3|VCC|
|(NC)|RSTQ|
|GND|GND|
|(NC)|IRQ|
|MISO/19|MISO|
|MOSI/23|MOSI|
|SCK/18|SCK |
|SS/5/LED|SS|

接続設定に合わせて、スケッチの該当箇所を以下のように直します。

```

#if 1
  #include <SPI.h>
  #include <PN532_SPI.h>
  #include "PN532.h"

  PN532_SPI pn532spi(SPI, 5);
  PN532 nfc(pn532spi);
#elif 0
.
.
.

```

## 実行結果

```

Hello!
Found chip PN532
Firmware ver. 1.6
Waiting for an ISO14443A Card ...
Found an ISO14443A card
  UID Length: 4 bytes
  UID Value:  D3 6A 93 05

Seems to be a Mifare Classic card (4 byte UID)
Trying to authenticate block 4 with default KEYA value
Sector 1 (Blocks 4..7) has been authenticated
Reading Block 4:
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................

```

動きました

# シリアル接続


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/17b69c4c-8541-4e25-b34f-71c04ec41de0.png)


|ESP32|PN532 NFC Module |
|---|---|
|GND|GND|
|3V3|VCC|
|16 (Serial2 RX)|TXD |
|17 (Serial2 TX)|RXD |

```


#if 0
  #include <SPI.h>
  #include <PN532_SPI.h>
  #include "PN532.h"

  PN532_SPI pn532spi(SPI, 5);
  PN532 nfc(pn532spi);
#elif 1
  #include <PN532_HSU.h>
  #include <PN532.h>
      
  PN532_HSU pn532hsu(Serial2);
  PN532 nfc(pn532hsu);
#else 
...

```

動きました

```

Hello!
Found chip PN532
Firmware ver. 1.6
Waiting for an ISO14443A Card ...
Found an ISO14443A card
  UID Length: 4 bytes
  UID Value:  D3 6A 93 05

Seems to be a Mifare Classic card (4 byte UID)
Trying to authenticate block 4 with default KEYA value
Sector 1 (Blocks 4..7) has been authenticated
Reading Block 4:
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
```