發布日期:2022-05-20 點擊率:36
藍牙(Bluetooth)是由東芝、愛立信、IBM、Intel和諾基亞等公司等于1998 年5 月共同提出的近距離無線數據通信技術標準。它能夠在10 米的半徑范圍內實現單點對多點的無線數據和聲音傳輸,其數據傳輸帶寬可達到1Mbps.本文利用藍牙技術開發一個用于手機文件數據傳輸的軟件,具有即建即連、使用靈活、安全高效等特點,避免傳統網絡文件傳輸軟件存在的問題。
1 藍牙通信的關鍵技術
藍牙無線電技術基于在工業、科學以及醫學(ISM)上公用的2.45GHz 開放頻段,這一頻段無需授權并全球通用。當藍牙設備互相連接時,他們將組成一個微微網(piconet),即以一個主設備和最大7 個從設備的形式動態創建網絡。其私有化和個性化特征表現得尤為突出。
1.1 藍牙協議棧
藍牙協議棧提供了一組的高層協議和API 以完成發現服務和模擬串行I/O,還有一個關于包分割和重組的低層協議以及多路技術協議和質量服務。藍牙協議棧分為硬件和軟件兩部分,藍牙硬件協議棧由設備硬件提供,藍牙軟件協議棧則由軟件實現。
藍牙軟件協議棧是程序開發中的關鍵部分,其層次從下至上依次是: 宿主控制器接口(HostController Interface,HCI) 是藍牙軟件協議棧的最底層,直接和宿主控制器接口固件(Host ControllerInterface FIRmware)交互。邏輯鏈路控制和適配協議(Logical link Control and Adaptation Protocol,L2CAP) 該層負責處理包分割重組,為上層協議提供了有保證的服務。服務發現協議(ServiceDiscovery Protocol,SDP)包含用于發現服務是否有效等操作。RFCOMM 位于L2CAP 之上,提供了模擬標準串口通信的能力。對象交換協議(Object Exchange Protocol,OBEX)用于實際程序中的對象數據交換。
圖1 藍牙協議棧
1.2 J2ME 對藍牙的支持
早在JSR82 規范中就定義了javax.bluetooth 和javax.obex 兩個包,其中javax.bluetooth 定義了與藍牙通信相關的API , 而javax.obex(Object ExchangeProtocol)是建立在串口通信之上,實現以對象為單位的通信。在javax.bluetooth 中,Java 藍牙API 可以被分解為三個部分:發現服務、設備管理和藍牙通信,其主要類及接口有:本地藍牙管理器LocalDevice、遠程藍牙設備RemoteDevice、搜索代理DiscoveryAgent、搜索偵聽DiscoveryListener、描述藍牙服務的特征屬性ServiceRecord 及藍牙服務屬性的類型DataElement.
1.3 J2ME 平臺下藍牙通信流程
圖2 藍牙通信流程圖
藍牙通信也是基于通用連接框架,與常見的C/S架構類似,只是客戶端不知服務端的存在,需要通過無線搜索去發現。搜索到遠程設備后,還需要進行服務搜索去發現對方提供了哪些服務。
其中,藍牙通信是基于通用連接框架,對不同客戶端而言,需要通過搜索來獲得與服務端的連接信息。
藍牙服務端使用連接通知者對象,用于等待遠程設備的連接,類似于阻塞式socket 服務端,它將一直等待直到接收到客戶端的連接請求。對于藍牙客戶端的搜索服務分為設備搜索和服務搜索,后者需要基于指定的遠程設備才能進行。客戶端和服務器端在獲得藍牙協議連接后,通過連接創建輸入/輸出流來進行通信。
2 手機文件傳輸軟件的實現
2.1 藍牙服務端的實現
2.1.1 獲得本地設備管理器
獲得本地設備管理器會導致系統提示是否需要啟動藍牙服務,該步驟是藍牙設備通信最基本的初始化。
通過LocalDevice 類的getLocalDevice 方法即可獲取本地設備管理器。
try {
localDevice = LocalDevice.getLocalDevice();
} catch (BluetoothStateException init) {
init.printStackTrace();
}
1234
下一篇: PLC、DCS、FCS三大控
上一篇: 超聲波測距系統的設計