胡 昊,賀 喜,聶桂根
(武漢大學衛星導航定位技術研究中心,湖北 武漢 430079)
?
采用NFC通信的RTK GNSS接收機及Android終端軟件設計
胡 昊,賀 喜,聶桂根
(武漢大學衛星導航定位技術研究中心,湖北 武漢 430079)
現代RTK接收機在野外傳輸數據時,會采用藍牙傳輸方式。手持終端設備采集多部接收機時,有易混淆藍牙名稱、操作復雜、耗時長的問題。本文設計了基于NFC技術的RTK接收機及Android終端軟件,Android終端只需觸碰接收機NFC標簽,便可以與接收機迅速建立藍牙連接,并且顯示接收機編號、搜星數目、定位精度、電池耗電等基本信息。試驗結果表明,使用NFC技術的RTK接收機藍牙配對時間不足1 s,Android終端可以方便地控制接收機的工作方式,并且數據接收穩定。
NFC;RTK;接收機;藍牙;Android
現代RTK接收機都配有藍牙功能[1],解決了傳統串口傳輸操作不便、設備易損壞、維護成本高等問題[2]。藍牙連接時間大約為6 s,再加上搜索及輸入密碼的程序,連接過程需要20~30 s,而且當一個手持終端需要采集多個接收機數據或多個手持終端要隨機采集不同接收機數據時,易混淆數據內容。
目前與接收機配套的終端控制系統大多采用Windows CE或Windows Mobile系統[3],需要搭載于專用的硬件平臺上,價格十分高昂。與此同時,Android終端所配置的處理器速度越來越快,集成著4G、近場通信(near field communication,NFC)、藍牙、WiFi等多種通信方式[4]。相比于iOS和Windows CE系統,Android作為開源操作系統,對開發人員更有吸引力,Android終端正逐步擴大著自己的市場,可以預見,未來Android設備將擔當手持終端設備與RTK接收機交互使用。
NFC允許電子設備通過簡單觸碰的方式完成信息交換與服務的訪問,NFC標簽是集成了NFC芯片的非接觸式IC標簽[5],NFC可以用于輔助藍牙設備連接。
本文首次提出并設計了一款基于NFC的RTK GNSS接收機及配套的Android軟件。用戶只需使用Android設備的NFC功能掃描RTK接收機的NFC標簽,便可以獲取接收機的定位衛星數、電池電量、定位精度等信息,并且在不到1 s時間內就能建立藍牙連接,可以實現單個終端快速切換不同的接收機。
NFC最早是由Nokia和NXP發起的,目前由NFC論壇(NFC Forum)負責制定技術標準,NFC Forum涵蓋了芯片開發商、手機制造商、電視制造商及國際金融組織等。NFC起源于RFID,是一種工作頻率為13.5 MHz、通信距離為0~20 cm(實際產品大部分都在10 cm以內)的近距離無線通信技術,目前可選擇106 kbit/s、212 kbit/s、424 kbit/s中的一種作為傳輸速率[6]。NFC有主動通信和被動通信兩種通信模式。在主動通信模式下,每臺NFC設備向其他NFC設備發送數據時,必須產生自己的射頻場。在被動通信模式下,NFC發起設備即主動啟動NFC通信的設備在整個通信過程中提供射頻場。
NFC根據應用的不同可采取3種工作模式:讀寫模式、點對點模式、卡模擬模式。讀寫模式下NFC終端可以讀寫外部非接觸式卡片信息;點對點模式下NFC終端之間可以進行數據交換;卡模擬模式下NFC終端可以作為一張非接觸式卡與讀卡器進行交互。基于以上3種工作模式,NFC廣泛應用于手機支付、智能海報、數據傳輸、門禁等領域[7]。
智能手機逐漸走入大眾的生活,人們使用手機打電話、上網搜尋信息、導航、娛樂等。越來越多的手機集成了NFC功能,主流廠商如蘋果、三星、華為、中興、聯想、htc、黑莓等都生產了配置有NFC功能的手機[8]。
NFC相比于藍牙連接速度更快,但是傳輸速度不及藍牙[9]。如果將NFC與藍牙結合,發揮彼此的優勢,可以免去藍牙復雜的配對過程,減少操作時間。
1.RTK接收機組成
本文設計的RTK接收機由微型處理器、NFC模塊、藍牙模塊、GNSS模塊、串口模塊、電源模塊及存儲模塊等構成。微型處理器作為控制器接收GNSS模塊的數據,并對接收的數據進行存儲,同時與其他各個模塊通信。接收機結構如圖1所示。

圖1 接收機結構
微型處理器選擇ST公司的 STM32F407VGT6,它配置了單周期DSP指令系統和FPU功能,并且處理器主頻達到了168 MHz,擁有高性能處理數字信號的能力。通信接口包括3個I2C接口、6個通用同步異步串口、3個SPI接口和1個SDIO接口等。
GNSS模塊選用UB370 ,該板卡支持北斗B1/B2/B3、GPS L1/L2及GLONASS L1/L2,提供毫米級載波相位觀測值和厘米級高精度RTK 定位,擁有優于0.2°的定向精度。
藍牙模塊選用藍牙4.0模塊,最高速率高達18 kbit/s,空曠距離傳輸距離為80 m。
sd卡為存儲設備,擁有4 GB容量,可以存儲5 s采樣率約12個月的雙頻GNSS數據。
串口模塊將TTL電平或CMOS電平轉換為RS-232電平,便于PC端使用串口進行調試。
NFC模塊采用PN532芯片,在讀寫器模式下支持ISO/IEC 1443A/MIFARE、FeliCa、ISO/IEC 1443B機制。在卡模擬模式下支持ISO 14443A/MIFRRE、FeliCa機制。通信接口為UART,工作電壓為3.3 V或5 V。
2.NFC通信
NFC Forum定義了NFC協議,由物理層到應用層分別由Analog、Digital/Activity、工作模式協議層及應用層共4部分組成。在工作模式協議層定義了點對點通信、卡模擬、讀寫模式3種通信模式;在讀寫模式中定義了4種類型的標簽:type1、type2、type3、type4。
設定NFC模塊為卡模擬工作方式,Android終端為讀寫模式,這樣不僅滿足數據由NFC模塊向Android終端單向傳遞的需要,而且相比于點對點通信可以降低接收機的功耗。NFC模塊模擬type2標簽,標簽2協議基礎為ISO/IEC 14443 TypeA,存儲容量為2 KB,傳輸速度為106 kbit/s。將符合NFC數據交換格式(NFC data exchange format,NDEF)規范的數據按既定指令寫入模塊就能完成卡模擬。
自定義傳輸數據結構見表1,它包含了接收機的基本信息及藍牙連接的信息。

表1 傳輸數據結構
需要說明的是:①定位方式設定0表示無定位,1表示單點定位,2代表偽距差分,3代表RTK固定解,4代表RTK浮動解。②測量狀態高4位表示測量模式,0001b表示點測量,0010b表示線測量;低4位表示當前狀態,0000b代表正常測量,0001b代表坐標超差重新測量中,0010b代表測量完成。
自定義傳輸數據結構通過Base64算法編碼后生成84字節的ASCII字符串,再打包成NFC支持的NDEF消息。
NDEF消息由一個或多個Record組成,不同的Record可以封裝不同類型的負載。Record的格式見表2,Record的首字節的含義及設置說明見表3。

表2 Record結構

表3 Record首字節含義及設置說明
所傳輸的數據包為ASCII字符串,僅用一個Record就可完成傳輸,故該Record既是首記錄也是尾記錄。負載長度為84 B即0×54,用一個字節就可以表示。因此Record首字節設置為11010001B即0×D1。
記錄類型定義(Record type definition,RTD)規范定義了Record負載的編碼格式。NFC Forum定義了文本RTD、URI RTD、智能海報RTD、通用控制RTD、簽名RTD。接收機需要傳輸的數據都是ASKII碼表示,屬于RTD_TEXT(即文本記錄類型),它用來存儲Tag中的文本信息。RTD_TEXT由狀態標志位(1個字節)、語言碼(ISO/IANA語言碼,如“fi”、“en-US”、“jp”等,編碼為US-ASCII)、實際文本信息(編碼為UTF-8或UTF-16,取決于狀態標志位)3部分組成。文本信息為UTF-8編碼,IANA語言碼長度為2,設置狀態標志位為0×02。編碼為US-ASCII碼(即“en”),故本系統中設置ISO/IANA語言碼為0×65 0×6E。實際文本信息為打包的84字節ASCII數據。
綜上,NDEF可以設置為純RTD_TEXT類型Hex串:D1 01 54 54 02 65 6E+“接收機數據包”。微處理器按照給定的串口命令將NDEF信息寫入NFC模塊,便完成了接收機NFC的卡模擬。
3.接收機NFC工作流程
微處理器需要依次初始化GNSS模塊、藍牙模塊、NFC模塊及其他功能模塊,設置NFC模塊為卡模擬工作方式,將解碼的GNSS信息及藍牙信息傳輸給NFC模塊,具體步驟如下:
1) 初始化GNSS模塊。GNSS模塊通過串口與STM32處理器進行通信,設置串口波特率設置為115 200 bit/s。GNSS采樣率為1 Hz。
2) 初始化藍牙模塊。藍牙模塊通過串口與微處理器進行通信。設置串口波特率為115 200 bit/s。藍牙采用從模式(Slave)偵聽外部藍牙設備配對及連接請求。
3) 初始化NFC模塊工作模式。NFC模塊通過串口與微處理器通信,PN532設置為卡模擬工作方式,采用NFC Forum制定的標簽2規范。
4) 處理器接收GNSS數據、解碼GNSS數據,轉為RINEX格式存儲。
5) 微處理器將解碼GNSS數據、接收機運行狀態及藍牙信息打包成NFC支持的NDEF數據,并發送給NFC模塊。
6) 重復步驟4),直至確認藍牙已連接。
7) Android終端通過藍牙向接收機傳輸信息或發送控制命令。
8) 如果藍牙連接斷開,則重復步驟4)。
4.硬件設計需要注意的問題
由于NFC模塊的天線覆蓋的面積直接決定著射頻發射的效果,因此在設計美觀、操作方便的RTK GNSS接收機時,結構上需要避免天線部分由金屬固定。
1.軟件構架
軟件實現了對接收機NFC Tag的讀操作,通過讀取Tag的信息建立藍牙連接并顯示接收機狀態的部分信息,建立藍牙后通過UI界面控制接收機測量及傳輸。軟件由文件管理、通信、邏輯連接及用戶界面4部分組成。軟件構架如圖2所示。

圖2 Android終端軟件構架
文件管理模塊對接收到的文件進行處理,包含保存RINEX文件、NMEA-0183文件及其他工程文件,并對文件進行導入/導出管理。
通信模塊完成Android終端與接收機之間NFC、藍牙、串口通信及互聯網NTRIP(networked transport of RTCM via Internet protocol,通過互聯網進行RTCM網絡傳輸的協議)等通信功能的實現。
邏輯連接模塊銜接其他模塊之間的工作:包括完成NFC輔助藍牙連接、GNSS解碼、工程管理及坐標轉換等功能。NFC輔助藍牙連接就是將NFC模塊收到的信息進行處理,完成藍牙快速連接及顯示接收機基本信息。GNSS解碼后以便存儲和信息讀取,并在用戶界面顯示。
UI模塊作為操作人員與終端的交互界面,包含文件操作、測量、設置及狀態4部分。文件操作實現打開文件、保存文件、導入文件、導出文件;測量功能利用靜態點測量、RTK、CORS等測量方式獲取數據;設置功能完成通信方式、接收機參數、文件管理等設置;狀態包含接收機、CORS、衛星狀態的顯示。
2.Android NFC開發
Android提供了Android.NFC和Android.NFC.tech兩個包進行NFC開發[10]。其中Android.NFC包提供了NFC設備對NFC Tag讀寫NDEF消息的函數及兩個NFC設備之間進行數據交換的函數。Android.NFC.tech包提供了對不同Tag的讀寫操作類。本文設計的接收機NFC模塊模擬Type2符合NDEF標準,使用Android.NFC便可以完成對Tag信息的處理。
Android提供intent完成不同activity之間的通信,NFC標簽調度系統定義了3個intent對象,按照優先級由高到低為ACTION_NDEF_DISCOVERED、ACTION_THCH_DISCOVERED、ACTION_TAB_DISCOVERED。其中ACTION_NDEF_DISCOVERED用于啟動包含NDEF負載和已知類型標簽的activity。
當Android設備掃描到接收機的NFC Tag時,系統會讀取NdefMesage的第一條NdefRecord,獲取到TNF、Record類型、Id信息、負載信息等。NFC標簽調度系統會使用TNF和RTD將MIME類型映射到NDEF消息中,會將這些信息跟實際的負載一起封裝到ACTION_NDEF_DISCOVERED類型的intent中。通過設置NFC Intent過濾器,該intent對象會啟動NFC應用程序。Android終端讀取模擬卡中的DNEF信息軟件編寫的步驟如下:
1) 在Android Manifest中添加NFC權限,使得軟件獲得使用Android NFC硬件的權限:
2) 通過NfcAdapter類的getDefaultAdapter()函數獲取Android終端默認的適配器??梢酝ㄟ^此適配器對Android終端是否支持NFC功能,以及是否已經開啟NFC功能進行檢測,同時在AndroidManifest.xml中聲明過濾器類型。
3) 定義Tag對象:
Tag tag=getIntent().getIntent()
.getParcelableExtra(NfcAction())
4) 通過NdefMessage類獲取NDEF格式數據。
5) NdefRecord類獲取Record信息。
6) 解析Record信息。getTnf()函數獲取tnf類型,get.payload()獲取負載數據并通過byte數組存儲。
7) Base64解碼負載數據得到自定義傳輸數據結構,彈出對話框顯示接收機狀態并提示用戶是否連接。
8) 建立藍牙連接,進入常規作業。
將第三代小米手機作為Android終端進行測試,首先在終端上安裝編寫的Android應用程序,然后將Android終端在已運行的接收機NFC標簽上“貼一下”,界面會彈出圖3(a)界面,選擇“是”按鈕,進入Android終端控制主界面。圖3(b)為主界面狀態欄,顯示了接收機、CORS及衛星分布狀態。

圖3
使用NFC技術輔助接收機和Android終端進行藍牙連接,避免了煩瑣的藍牙搜索、配對連接程序,使藍牙連接操作時間縮短至1 s內。
本文研究了NFC傳輸協議在RTK GNSS接收機中的應用及Android提供的NFC開發包與相應函數的使用方法,將NFC技術運用于RTK GNSS接收機與Android終端連接,Android終端可以迅速獲取接收機的基本信息和藍牙信息,在1 s內便可與接收機進行藍牙連接。利用NFC技術,Android終端用戶在野外獲取數據時避免了搜索接收機藍牙與配對的操作過程,節省了時間,并且避免了接收機數據采集易混淆的問題。使用NFC在提高工作效率的同時降低了手持終端成本,可以預見NFC將作為繼藍牙、WiFi之后又一個新的通信技術應用于RTK GNSS接收機。
[1] 林超.智能RTK GNSS接收機的關鍵技術研究[J].測繪工程,2013,22(4):52-54.
[2] 王寶山,楊春全,徐麗麗.藍牙通信技術在電子測量儀器數據傳輸上的應用[J].測繪與空間地理信息,2011,34(1):41-42.
[3] 褚世仙,楊雷生,樊增龍,等.集成GPS/PDA/TS的地下管網信息采集系統的設計與開發[J].測繪通報,2013(7):66-70.
[4] 劉斌.藍牙及WIFI技術在智能手機上的應用與發展[J].科技與企業,2014(10):121.
[5] 熊良林.基于Android手機NFC應用系統的開發[D].廣州:華南理工大學, 2014:7-8.
[6] 王淼.NFC技術原理與應用[M].北京:化學工業出版社,2014.
[7] 董琦.基于Android平臺的NFC終端設計[D].成都:電子科技大學,2014:1-2.
[8] 劉敬濤,黃鷹,覃澤穎.基于Android平臺的GPS-RTK手簿系統[J].地理空間信息,2014,12(5):56-58.
[9] 儲波.基于NFC技術的高校管理系統的設計及安全性研究[D].上海:華東理工大學,2014:6-7.
[10] 周建煒.基于公眾網絡的行業應用智能終端開發與產業化[D].濟南:山東大學,2013.
Design of RTK GNSS Receiver and Android Application Based on NFC Technology
HU Hao,HE Xi,NIE Guigen
胡昊,賀喜,聶桂根.采用NFC通信的RTK GNSS接收機及Android終端軟件設計[J].測繪通報,2015(7):89-93.
10.13474/j.cnki.11-2246.2015.0220
2015-02-05
國家自然科學基金(41074023)
胡 昊(1988—),男,碩士生,研究方向為嵌入式開發。E-mail:263993206@qq.com
P208
:B
:0494-0911(2015)07-0089-05