《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > Android應用之藍牙傳感應用
Android應用之藍牙傳感應用
摘要: 如果傳感器本身需要包含控制電路(例如采集血氧信號需要紅外和紅外線交替發(fā)射),那么傳感器本身就需要帶一片主控IC,片內(nèi)采集并輸出數(shù)字信號了。
Abstract:
Key words :

如果傳感器本身需要包含控制電路(例如采集血氧信號需要紅外和紅外線交替發(fā)射),那么傳感器本身就需要帶一片主控IC,片內(nèi)采集并輸出數(shù)字信號了。Android手機如何在不改硬件電路的前提下與這類數(shù)字傳感器交互呢?可選的通信方式就有USB和藍牙,兩種方式各有好處:USB方式可以給傳感器供電,藍牙方式要自備電源;USB接口標準不一,藍牙普遍支持SPP協(xié)議。本文選擇藍牙方式做介紹,介紹Android的藍牙API以及藍牙客戶端的用法。
      在Android 2.0,官方終于發(fā)布了藍牙API(2.0以下系統(tǒng)的非官方的藍牙API可以參考這里:http://code.google.com/p/android-bluetooth/)。Android手機一般以客戶端的角色主動連接SPP協(xié)議設備(接上藍牙模塊的數(shù)字傳感器),連接流程是:
1.使用registerReceiver注冊BroadcastReceiver來獲取藍牙狀態(tài)、搜索設備等消息;
2.使用BlueAdatper的搜索;
3.在BroadcastReceiver的onReceive()里取得搜索所得的藍牙設備信息(如名稱,MAC,RSSI);
4.通過設備的MAC地址來建立一個BluetoothDevice對象;

5.由BluetoothDevice衍生出BluetoothSocket,準備SOCKET來讀寫設備;

6.通過BluetoothSocket的createRfcommSocketToServiceRecord()方法來選擇連接的協(xié)議/服務,這里用的是SPP(UUID:00001101-0000-1000-8000-00805F9B34FB);
7.Connect之后(如果還沒配對則系統(tǒng)自動提示),使用BluetoothSocket的getInputStream()和getOutputStream()來讀寫藍牙設備。

先來看看本文程序運行的效果圖,所選的SPP協(xié)議設備是一款單導聯(lián)心電采集表:

本文的代碼較多,可以到這里下載:http://www.pudn.com/downloads305/sourcecode/comm/android/detail1359043.html

本文程序包含兩個Activity(testBlueTooth和WaveDiagram),testBlueTooth是搜索建立藍牙連接。BluetoothAdapter、BluetoothDevice和BluetoothSocket的使用很簡單,除了前三者提供的功能外,還可以通過給系統(tǒng)發(fā)送消息來控制、獲取藍牙信息,例如:

注冊BroadcastReceiver:

view plaincopy to clipboardprint?
IntentFilter intent = new IntentFilter();  
intent.addAction(BluetoothDevice.ACTION_FOUND);// 用BroadcastReceiver來取得搜索結果  
intent.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);  
intent.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);  
intent.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);  
registerReceiver(searchDevices, intent); 
  IntentFilter intent = new IntentFilter();
  intent.addAction(BluetoothDevice.ACTION_FOUND);// 用BroadcastReceiver來取得搜索結果
  intent.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
  intent.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
  intent.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
  registerReceiver(searchDevices, intent);

在BroadcastReceiver的onReceive()枚舉所有消息的內(nèi)容:

view plaincopy to clipboardprint?
String action = intent.getAction();  
            Bundle b = intent.getExtras();  
            Object[] lstName = b.keySet().toArray();  
 
            // 顯示所有收到的消息及其細節(jié)  
            for (int i = 0; i < lstName.length; i++) {  
                String keyName = lstName[i].toString();  
                Log.e(keyName, String.valueOf(b.get(keyName)));  
            } 
String action = intent.getAction();
   Bundle b = intent.getExtras();
   Object[] lstName = b.keySet().toArray();

   // 顯示所有收到的消息及其細節(jié)
   for (int i = 0; i < lstName.length; i++) {
    String keyName = lstName[i].toString();
    Log.e(keyName, String.valueOf(b.get(keyName)));
   }

在DDMS里面可以看到BluetoothDevice.ACTION_FOUND返回的消息:

 

 

程序另外一個Activity~~~WaveDiagram用于讀取藍牙數(shù)據(jù)并繪制波形圖,這里要注意一下JAVA的byte的取值范圍是跟C/C++不一樣的,Android接收到的byte數(shù)據(jù)要做"& 0xFF"處理,轉(zhuǎn)為C/C++等值的數(shù)據(jù)。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉(zhuǎn)載。
主站蜘蛛池模板: 国产精品亚洲一区二区无码| 在线观看免费大黄网站| 久久精品影院永久网址| 欧美换爱交换乱理伦片老| 伊人性伊人情综合网| 精品在线一区二区| 成人国产精品2021| 久久国产精品99精品国产987| 欧美bbbbxxxx| 亚洲天堂一级片| 永久免费毛片手机版在线看| 国产在线无码视频一区二区三区| 把女人的嗷嗷嗷叫视频软件| 成av免费大片黄在线观看| 亚洲丁香婷婷综合久久| 欧美特黄一片aa大片免费看| 人妻一本久道久久综合久久鬼色| 精品国产精品国产| 啦啦啦中文在线观看| 亚洲国产激情在线一区| 国产精品美女久久久久| 97在线公开视频| 在线观看欧洲成人免费视频| jizz大全欧美| 女人体1963毛片a级| 一本一本久久a久久精品综合 | 香蕉视频在线免费看| 国产日韩精品一区二区在线观看播放 | 一线在线观看全集免费高清中文| 日出水了特别黄的视频| 久久亚洲精品成人av无码网站| 武则天一边上朝一边做h| 人人澡人人澡人人看| 男女性色大片免费网站| 免费无码又爽又黄又刺激网站| 超级乱淫视频播放日韩| 国产在线果冻传媒在线观看| 高清不卡免费一区二区三区| 国产在线拍揄自揄拍无码| 黄页网址大全免费观看35| 国模gogo大胆高清网站女模|