2010-11-26 上次介紹了Android利用麥克風(fēng)采集并顯示模擬信號,這種采集手段適用于無IO控制、單純讀取信號的情況。如果傳感器本身需要包含控制電路(例如采集血氧信號需要紅外和紅外線交替發(fā)射),那么傳感器本身就需要帶一片主控IC,片內(nèi)采集并輸出數(shù)字信號了。Android手機如何在不改硬件電路的前提下與這類數(shù)字傳感器交互呢?可選的通信方式就有USB和藍牙,兩種方式各有好處:USB方式可以給傳感器供電,藍牙方式要自備電源;USB接口標準不一,藍牙普遍支持SPP協(xié)議。本文選擇藍牙方式做介紹,介紹Android的藍牙API以及藍牙客戶端的用法。 5.由BluetoothDevice衍生出BluetoothSocket,準備SOCKET來讀寫設(shè)備; 6.通過BluetoothSocket的createRfcommSocketToServiceRecord()方法來選擇連接的協(xié)議/服務(wù),這里用的是SPP(UUID:00001101-0000-1000-8000-00805F9B34FB);
先來看看本文程序運行的效果圖,所選的SPP協(xié)議設(shè)備是一款單導(dǎo)聯(lián)心電采集表:
本文的代碼較多,可以到這里下載:http://www./downloads305/sourcecode/comm/android/detail1359043.html 本文程序包含兩個Activity(testBlueTooth和WaveDiagram),testBlueTooth是搜索建立藍牙連接。BluetoothAdapter、BluetoothDevice和BluetoothSocket的使用很簡單,除了前三者提供的功能外,還可以通過給系統(tǒng)發(fā)送消息來控制、獲取藍牙信息,例如: 注冊BroadcastReceiver:
在BroadcastReceiver的onReceive()枚舉所有消息的內(nèi)容:
在DDMS里面可以看到BluetoothDevice.ACTION_FOUND返回的消息:
程序另外一個Activity~~~WaveDiagram用于讀取藍牙數(shù)據(jù)并繪制波形圖,這里要注意一下JAVA的byte的取值范圍是跟C/C++不一樣的,Android接收到的byte數(shù)據(jù)要做"& 0xFF"處理,轉(zhuǎn)為C/C++等值的數(shù)據(jù)。 |
|