PaSoRi에서 NFC 태그 및 FeliCa 읽기 및 내보내기

입문


NFC 태그, FeliCa 읽기 중 깜빡임
ndef의 데이터는pretty()에서 읽는 예가 많기 때문에 등록된 텍스트만 꺼내는 것이 목표입니다.
Raspberry Pi의 설정과 nfcpy의 규격 확인이 중요합니다.

사용 장치


Raspberry Pi3
PaSoRi RC-S380
NFC 레이블

Raspberry Pi3


VNC Viewer를 통해 작성된 코드이기 때문에 와이파이(보통)와 이더리움 네트워크의 유선 연결(Raspberry Pi 설정), PaSoRi를 사용한다는 이유로 사용된다.

USB 허브가 있으면 Raspberry Pi Zero(W) 등도 가능합니다.여러 가지 물건이 있으면 가격이 많이 떨어지지 않을까요?

PaSoRi


RC-S380 이외에는 동작 확인이 없습니다.

NFC 레이블


카드 모양의 판에 NFC 라벨을 붙인 스티커판상NFC가 싸진 것 같다.

Raspberry pi 설정


USB로 연결된 전갈 확인


$ lsusb

nfcpy 설정


도저히 들어갈 수가 없어요. bzrbranchlp:nfcpy를 만들었어요. 원래의 소스를git로 clone했어요.
사용할 수 있는 결정 방법이 명확하지 않다.
참조할 웹 사이트의 URL을 기록합니다.
https://devadjust.exblog.jp/23018234/
https://github.com/nfcpy/nfcpy
http://pongsuke.hatenablog.com/entry/2017/05/17/164317

실시


nfcpy 사양


출력 사양

  • FeliCa 읽기 및 출력 IDm
  • NFC 태그를 읽고 쓴 텍스트를 읽고 출력합니다.텍스트 동시 요약
  • FeliCa를 마지막으로 터치할 때 끝
  • 코드


    나는 이 보도를 참고했다.
    https://qiita.com/undo0530/items/89540a03252e2d8f291b#idm%E3%82%92%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%99
    내가 다시 쓴python의 코드 구조는 매우 거칠어서 참고만 제공한다
    try~catch~finally를 따로 진행할 수 있다면.
    # coding: utf-8
    import nfc
    import binascii
    import time
    from threading import Thread, Timer
    
     # 待ち受けの1サイクル秒
    TIME_cycle = 10.0
    # 待ち受けの反応インターバル秒
    TIME_interval = 0.2
    # タッチされてから次の待ち受けを開始するまで無効化する秒
    TIME_wait = 3
    
    # NFC接続リクエストのための準備
    # 212F(FeliCa)で設定
    target_req_felica = nfc.clf.RemoteTarget("212F")
    
    # 106A(NFC type A)で設定
    target_req_nfc = nfc.clf.RemoteTarget("106A")
    
    def check_FeliCa():
        print  'FeliCa waiting...'
        # USBに接続されたNFCリーダに接続してインスタンス化
        clf = nfc.ContactlessFrontend('usb')
        # clf.sense( [リモートターゲット], [検索回数], [検索の間隔] )
        target_res = clf.sense(target_req_felica, iterations=int(TIME_cycle//TIME_interval)+1 , interval=TIME_interval)
        if not target_res is None:
            tag = nfc.tag.activate(clf, target_res)
    
            #IDmを取り出す
            idm = binascii.hexlify(tag.idm)
            print 'FeliCa detected. idm = ' + idm
    
            #sleepなしでは次の読み込みが始まって終了する
            print 'sleep ' + str(TIME_wait) + ' seconds'
            time.sleep(TIME_wait)
    
        clf.close()
    
    def check_NFC():
        print  'NFC and FeliCa waiting...'
        # USBに接続されたNFCリーダに接続してインスタンス化
        clf = nfc.ContactlessFrontend('usb')
    
        mydict = {}
        while True:
            target_res = clf.sense(target_req_nfc,target_req_felica, iterations=int(TIME_cycle//TIME_interval)+1 , interval=TIME_interval)
            if not target_res is None:
                tag = nfc.tag.activate(clf, target_res)
                print 'TAG type: ' + tag.type
    
                # FeliCaカードをタッチしたら読み込みをやめる
                if tag.type == "Type3Tag":
                    break
                # Type1,Type2:NFCタグ、Type4:Android端末でのNFCなど
                else:
                    # NFCタグに埋めたtextを読む
                    records = tag.ndef.records
                    for record in records:
                        print 'NFC detected. record.text = ' + record.text
                        # str()で変換するとユニコードオブジェクトにならない
                        key = str(record.text)
                        mydict[key] = key
    
                    print 'sleep ' + str(TIME_wait) + ' seconds'
                    time.sleep(TIME_wait)
        for dic in mydict :
            print(dic)
    
        clf.close()
    
    check_FeliCa()
    check_NFC()
    

    마지막


    재료는 거의 아마존에 있고, 가전제품 양판점에서도 배치 서비스 등이 있기 때문에 작은 부품을 찾는 수고가 없다.
    애초에 아이폰 앱으로 만들려고 했는데 펠리카가 잘 읽히지 않아서 라즈파를 사용했어요.
    아이폰으로 코어NFC에서 펠리카를 읽을 수 있다면.
    http://www.itmedia.co.jp/mobile/articles/1802/08/news030_2.html

    좋은 웹페이지 즐겨찾기