(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
- 電解コンデンサ追加加工済
- cf., 「NFC モジュールの動作安定性を改善する」https://qiita.com/nanbuwks/items/a9217ba2e8f206b899b1
- WEMOS LOLIN32 (≒ ESP32-DevKitC )
- Arduino 1.8.10 Linux 版
- portable 化済
- Arduino UNO
- Ubuntu Linux 20.04 AMD64
- NFC library for Arduino
ライブラリは以下の記事のようにしてインストールしています。
「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
問題なく動作しました。