このあいだ、Raspberry pi で node.js + typescriptで書いてるアプリでNFCを読む機会があり、調べたのでメモ。
ハードウェア
NFCリーダーはこれ
中身は PN532
これを、Raspberry Pi のGPIOピンヘッダにGroveコネクタ生やすやつで接続した。こういうの。
https://amzn.to/3wwxkSB
UART を使用可能にする
Raspberry Pi 3以降ではBluetoothの接続でuartを使っているために、そのままではuartが使えない(これ知らずに結構時間をロスした...)。
Device Tree Overlay の miniuart-bt で対処した。
以下など参照。
node.js
PN532のデバドラは以下のライブラリを使用。
使い方はこんな感じ。
import SerialPort from 'serialport';
import pn532 from 'pn532';
const DEVICE_FILE_PATH = '/dev/serial0';
const SERIAL_OPTION = { baudRate: 115200 };
const serialPort = new SerialPort(DEVICE_FILE_PATH, SERIAL_OPTION);
const rfid = new pn532.PN532(serialPort);
// Poll for a tag
rfid.on('ready', async () => {
console.log('Listening for a tag scan...');
rfid.on('tag', (tag) => {
console.log(tag);
console.log('tag:', tag.uid);
});
});
動かすとこんな感じ。
実際には、上記をラップしたdomainオブジェクト作成して、tagを検知した時にeventemitterで飛ばしてる。