kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

rasberry piとnfc読み取りプログラム ~ 読み込み待ちで苦戦 ~

f:id:kazu22002:20200928064534p:plain

nfcpyを利用したnfcタグの読み取りプログラムを開発している中でいろいろなサンプルをみました。

どのサンプルも簡単に動作し、ライブラリの優秀さやpythonのシンプルさが実感できて楽しかったです。

ただよく書かれているサンプルソースが終了の際に、「Ctrl + c」やkillで終了をしていることが多く実運用には向かないサンプルが多い状態でした。

原因としては、カードを読取る部分のソースが読み取り待ち状態になりカードを一度読み込むまで進まない状態になっていました。

終了フラグを立てておけば、カードを読み込むことで終了できますが納得できてない状態です。

サンプルソース

import nfc
import os
 
if __name__ == '__main__':
    clf = nfc.ContactlessFrontend('usb')
    try:
        tag = clf.connect(rdwr={'on-connect': lambda tag: False})
        print(tag)
    finally:
        clf.close()

実行

$ python3 read_sample.py
Type2Tag 'NXP NTAG213' ID=00000000000

読み込みサンプルができました。

ただしこのソースでは、clf.connectの部分でカード読み込み待ち状態になります。イベント型にならないかドキュメントを読んでいるところです。

nodejsでサンプルを発見

dev.classmethod.jp

コマンド実行でデータを受け取る方法もあるのか。と新しい発想に感動しましたが、もっとよかったのはサンプルを実行して終了した場合でもpythonのプログラムがプロセスを占有していない状態になっていました。

別のやり方でもいけるのか模索する価値が出てきました。

もう少し足掻いてみましょうか。