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


(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 で SPI 接続を使ってライブラリをいくつか試してみました。その結果、

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

と書きましたが、以下は elechouse で SPI接続以外での動作を検証してみました。

環境

ライブラリは以下の記事のようにしてインストールしています。
「PN532 NFC RFID module を Arduino UNO で読む」
https://qiita.com/nanbuwks/items/42f639e7eec928181298

また、以下では実験ごとにスイッチをインターフェースに合わせて都度変更しています。

SPI

接続して

サンプルスケッチを呼び出します。
「ファイル」-「スケッチ例」-「カスタムライブラリのスケッチ例」-「PN532」-「ReadMifare」を選びます。

以下のように変更します。

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

  PN532_SPI pn532spi(SPI, 10);
  PN532 nfc(pn532spi);
#elif 0
  #include <PN532_HSU.h>
  #include <PN532.h>
      
  PN532_HSU pn532hsu(Serial1);
  PN532 nfc(pn532hsu);
#else 
  #include <Wire.h>
  #include <PN532_I2C.h>
  #include <PN532.h>
  PN532_I2C pn532i2c(Wire);
  PN532 nfc(pn532i2c);	
#endif

問題なく動作しました。

電源供給を 3.3V にしてみる

問題なく動作しました。

I2C

以下のように接続します。

スケッチの先の部分をI2C用に直します。


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

  PN532_SPI pn532spi(SPI, 10);
  PN532 nfc(pn532spi);
#elif 0
  #include <PN532_HSU.h>
  #include <PN532.h>
      
  PN532_HSU pn532hsu(Serial1);
  PN532 nfc(pn532hsu);
#else 
  #include <Wire.h>
  #include <PN532_I2C.h>
  #include <PN532.h>
  PN532_I2C pn532i2c(Wire);
  PN532 nfc(pn532i2c);	
#endif

スイッチもI2C用に変更します。

問題なく動作しました。

SWHSU

以下のように接続します。

スケッチ変更

シリアル接続については、通常は HSU モードであり、PN532_HSU.h をインクルードするのですが、これはハードウェアシリアルが前提のようです。
Arduino Uno にはハードウェアシリアルは1つしかなく、それをプログラムやprint表示に使うとすると PN532_HSU.hは使えません。

ソフトウェアシリアルを使う場合は、PN532_SWHSU.h を使うようです。
以下のように直します。


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

  PN532_SPI pn532spi(SPI, 10);
  PN532 nfc(pn532spi);
#elif 1
  #include <SoftwareSerial.h>
  #include <PN532_SWHSU.h>
  #include <PN532.h>
  SoftwareSerial SWSerial( 10, 11 ); // RX, TX
  PN532_SWHSU pn532swhsu(SWSerial);
  PN532 nfc(pn532swhsu);
#else 
  #include <Wire.h>
  #include <PN532_I2C.h>
  #include <PN532.h>
  PN532_I2C pn532i2c(Wire);
  PN532 nfc(pn532i2c);	
#endif

問題なく動作しました。