總網頁瀏覽量

2014年11月16日 星期日

Arduino NFC/RFID = Arduino UNO + NFC Reader (PN532)


NFC/RFID 實驗在Arduino 上其實也很簡單, 這次利用PN532相容板來做實驗, 此塊板子支援 I2C 和 SPI介面, 我就來用 SPI 跟Arduino連接! 參考下圖:

Arduino       PN532
    D10  ------>  SS
    D11  ------>  MOSI
    D12  ------>  MISO
    D13  ------>  SCK
     5V  ------->  5V
    GND ------>  GND






Sketch 範例程式:

 #include <arduino.h>
#include <PN532.h>

#define SCK 13
#define MOSI 11
#define SS 10
#define MISO 12

PN532 nfc(SCK, MISO, MOSI, SS);

void setup(void) {
    Serial.begin(9600);
    Serial.println("Hello!");

    nfc.begin();

    uint32_t versiondata = nfc.getFirmwareVersion();
    if (! versiondata) {
        Serial.print("Didn't find PN53x board");
        while (1); // halt
    }
    // Got ok data, print it out!
    Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX);
    Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC);
    Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
    Serial.print("Supports "); Serial.println(versiondata & 0xFF, HEX);

    // configure board to read RFID tags and cards
    nfc.SAMConfig();
}


void loop(void) {
    uint32_t id;
    // look for MiFare type cards
    id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A);

    if (id != 0) {
        Serial.print("Read card #"); Serial.println(id);
    }
}


PN532 arduino library 下載點 here.

很簡單! 拿起 NFC tag 感應一下就會跑出 Card id.


9 則留言:

  1. 看了大大的文章 小弟有個問題想請教一下,我用Motoduino和s4a來做藍芽遙控車,而將s4a的腳位修改成相容Motoduino腳位後,p5 p6腳位可動作但是p7 p8腳位無法做正反轉的動作,想問大大是哪裡出了問題

    回覆刪除
    回覆
    1. 有參考過這裡?
      http://website.mlc.edu.tw/wzd000393/index/page/id/37817

      刪除
    2. 有 我就是參考這裡的修改方式

      刪除
  2. 我想請問一下,當我執行左轉指令(p5設定135pwm p8設定off p6設定135pwm p7設定on)時,板子的LED7跟LED8會同時亮起,是正常嗎? 不因該是p8off p7on?

    回覆刪除
  3. 請問一下,我試著照範例碼上傳板子,但是在畫面上總是顯示找不到PN53X的板子,請問要怎麼解決?

    回覆刪除
  4. 確認是PN532 的NFC? 如果是那應該是接線沒接好

    回覆刪除
  5. 你好 為什麼我的會顯示出 nfc' was not declared in this scope

    回覆刪除
  6. 你好 我把函式庫都用好 為什麼編譯會顯示
    no matching function for call to 'PN532::PN532(int, int, int, int)' 是什麼原因

    回覆刪除
  7. 'PN532::PN532(int, int, int, int)' 是什麼原因

    回覆刪除