2014/11/12

[廣告] 初探 NFC:近距離無線通訊與Arduino、Android 和 PhoneGap (Beginning NFC: Near Field Communication with Arduino, Android, and PhoneGap)

嗨,我翻譯了一本書,在這裡打打廣告。

顧名思義,這本書的主題是NFC(近距離無線通訊),NFC裝置貼近後,便能透過無線電波傳遞訊號交換資料,諸如無線支付、電子錢包、悠遊卡,無不與NFC(或RFID)有關。

書中範例包含各式各樣的技術,將會介紹各種規格的NFC標籤,採用PhoneGap,可在各種行動裝置上運行,但以Android為主,也會有Node.js的範例,另外,不僅會介紹微控制器開發板Arduino,也會介紹單板電腦Raspberry Pi與BeagleBone,內容非常豐富。

書名:初探 NFC:近距離無線通訊與Arduino、Android 和 PhoneGap
原書名:Beginning NFC: Near Field Communication with Arduino, Android, and PhoneGap
作者:Tom Igoe、Don Coleman、Brian Jepson
譯者:我
出版社:碁峰
出版日期:2014年10月16日
頁數:250


內容簡介

第一章:導論
概觀本書。

第二章:NFC 與RFID
藉由比較 NFC(Near Field Communication,近距離無線通訊)與 RFID(Radio
Frequency Identification,無線射頻辨識)之間的差異,引領你進入 NFC 的世界。簡言
之,NFC 將 RFID 包含在內,任何短距離 RFID 可辦到的事,NFC 也都做得到,而且功
能更強,在這一章裡,你將看到大部分的重要詞彙,看看 NFC 系統的架構,得知你將
需要使用哪些工具以及去哪取得。

第三章:學習PhoneGap 與PhoneGap-NFC 程式庫
開始介紹 PhoneGap 以及供 PhoneGap 使用的 NFC 附加元件。將會安裝各種所需
程式庫與工具,以之在 Android 平台上開發 PhoneGap 應用程式,建置且執行你的第一
組應用軟體,在這一章結束時,你就能從 Android 裝置讀取 NFC 標籤了。

第四章:介紹NDEF
深入概括介紹 NDEF(NFC Data Exchange Format,NFC 資料交換格式)。
學習它的階層架構,親眼看看如何實際撰寫應用程式、運用不同類型的 NDEF 記錄來完
成功能相同的基本任務,並且瞭解每一種記錄類型如何影響使用者與 Android 裝置之間
的互動操作。

第五章:聆聽NDEF 訊息
內容包含在 Android 上聆聽 NDEF 訊息,你將學習如何過濾不同類型的標籤與
訊息,如何在開發 NFC 應用軟體時,充分利用 Android 的標籤分派系統。

第六章:NFC 應用軟體開發實例
將在 Android 上打造一支完整的 NFC 應用軟體,功能包括使用者互動操作、音樂
播放、以及控制與網站相連接的燈泡,全部都以 NFC 標籤為媒介。本章目標在於告訴
你如何規畫應用軟體的互動設計以及資料格式,充分發揮 NFC 的能力。

第七章:Arduino 與NFC
帶領讀者進入另一套平台:Arduino 微控制器開發平台,你將學習如何使用
Arduino 的 NDEF 程式庫來讀取與寫入 NDEF 訊息,還會使用 Arduino 與 Node.js 來開
發另一支完整的應用程式。

第八章:點對點對等式傳輸
介紹如何在 Android 上運用 NFC 進行點對點對等式資料交換,你將學會透過對等
方式交換的記錄類型如何影響接收方的裝置,也會介紹如何以 NFC 進行協商把傳輸大
量資料的任務換手交給別的無線傳輸技術,諸如藍牙與 WiFi。

第九章:NFC 與嵌入式系統
 將 以 Raspberry Pi 與 BeagleBone 為 範 例, 告 訴 你 在 嵌 入 式 Linux 平 台 上 關 於
NFC 發展的最新狀況,你將瞭解目前在嵌入式 Linux 世界裡可做到哪些事情,此章也
會以 Node.js 示範幾個例子;在這個領域裡,仍有許多地方尚待改進、補強,所以請注
意,此章可不適合害怕接觸技術的人,你必須熟悉 Linux 的命令列模式操作介面,才能
看懂此章大部分的內容;不過話說回來,其中也涵蓋了某些 NFC 最令人感到驚奇的可
能性,所以是個值得一探究竟的領域。

附錄A:NFC 規格碼

18 comments:

  1. Anonymous30/3/15 12:53

    您是偶的偶像,您的書怎可不買!!!

    ReplyDelete
    Replies
    1. 聽您的語氣,莫非你是...?

      Delete
  2. 我是您的 super fans

    ReplyDelete
  3. Anonymous27/1/16 14:24

    請問
    若是要透過NFC 讓Android與Arduino的PN532交握
    需要從哪方面先著手呢 ?

    ReplyDelete
    Replies
    1. 你問的太籠統了。
      這本書裡面有講。

      Delete
    2. Anonymous27/1/16 22:40

      你好~
      我目前的問題是
      Arduino可以依照書上說的範例WrtieTag 透過PN532傳遞到空白的RFID卡
      再用手機的NFC讀RFID卡,那手機會跑出我寫的TAG

      我想問的是有沒有辦法不透過RFID,讓手機去直接讀Arduino PN532直接發的TAG呢 ?

      Delete
    3. 你說的是peer-to-peer exchange,這本書第8章介紹的主題。

      Delete
  4. 我想問 手機nfc要傳輸給pn532是靠什麼訊號傳輸uid還是imie碼 我手機要當tag傳輸資料給pn532接收然後arduino做控制 這是哪方面的傳輸方式

    ReplyDelete
    Replies
    1. 不太懂你說的問題。

      應該就是NFC的peer-to-peer exchange吧。

      Delete
  5. 你好 我想問手機要對nfc開發板接arduino 那有什麼範例可以測試 這個nfc開發板是我們可以使用的
    該怎麼測試nfc開發板可以讀取到手機資料

    ReplyDelete
    Replies
    1. > 手機要對nfc開發板接arduino
      不懂。

      Delete
  6. 請問 這程式碼是在說什麼 為什麼我arduino連接pn532會顯示Didn't find PN53x board 是什麼原因
    #include

    #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();
    }

    char DataOut[]="HELLO INITIATOR"; //16bytes
    char DataIn[16];//Should be 16bytes

    void loop(void) {

    // Configure PN532 as Peer to Peer Target
    if(nfc.configurePeerAsTarget()) //if connection is error-free
    {
    //trans-receive data
    if(nfc.targetTxRx(DataOut,DataIn))
    {
    Serial.print("Data Received: ");
    Serial.println(DataIn);
    }
    }

    }



    ReplyDelete
    Replies
    1. 你用的程式庫跟板子,不是同一國的吧。

      Delete
  7. 我想問nfc手機程式透過pn532傳到arduino適用什麼指令
    像是透過tag是寫String const myUID = "56 60 CB 3B";
    NfcTag tag = nfc.read(); // read the NFC tag
    String scannedUID = tag.getUidString(); // get the NFC tag's UID

    那想請問手機的程式指令要要怎麼寫

    ReplyDelete
    Replies
    1. 呃,您問的問題,不就是這本書的內容嗎?
      請查閱相關章節。

      Delete
  8. 為什麼這個程式 用其他tag也可以控制繼電器 它們uid不同 為什麼還可以執行動作

    #include
    #include "PN532_SPI.h"
    #include "PN532.h"
    #include "NfcAdapter.h"
    String const myUID = "56 60 CB 3B";
    const int relayPin = 9;
    int relayState = 0;
    PN532_SPI interface(SPI, 10);
    NfcAdapter nfc = NfcAdapter(interface);

    void setup(void) {
    Serial.begin(115200);
    nfc.begin();
    pinMode(relayPin, OUTPUT);
    }

    void switchRelay()
    {
    if (relayState == 1)
    relayState = 0; // 把繼電器狀態改為 ON
    else
    relayState = 1; // 把繼電器狀態改為 OFF
    digitalWrite(relayPin, relayState); // 讓繼電器作動, 切換開關
    Serial.print("Relay status: "); // 把繼電器的狀態印到 Serial Port
    Serial.println(relayState);
    }


    void loop(void) {
    if (nfc.tagPresent())
    {
    NfcTag tag = nfc.read(); // read the NFC tag
    String scannedUID = tag.getUidString(); // get the NFC tag's UID
    if( myUID.compareTo(scannedUID) == 0)
    Serial.print("open door");
    switchRelay();
    delay(3000);
    switchRelay();
    }
    }























    ReplyDelete
    Replies
    1. 看不出問題所在。

      用Serial.println把東西印出來吧,
      查看myUID與scannedUID

      Delete