BCSphere入門教程03:掃描周圍裝置
Bluetooth4.0優化了之前的掃描功能,讓搜尋周圍裝置的速度有了很大的提升,並且節約了功耗。基於Bluetooth4.0的這個特性,湧現出了IBeacon/Estimote等很多隻基於Bluetooth廣播包的智慧硬體應用。本章將重點介紹使用bc.js提供的掃描介面來掃描周邊的裝置,並深入介紹掃描到的Device物件中包含的資訊。
硬體最小支援
Service: Device Information
UUID: 0000180a-0000-1000-8000-00805f9b34fb
Characteristic 較多,這裡為了節約篇幅不再詳細羅列,具體可以參考Bluetooth4.0 的 Device Information 標準Profile
Function: Device Information Profile包括了軟硬體版本資訊,製造商分銷商等資訊,用於區別不同的裝置。
通過本章的學習,您可以:
- 學習到如何呼叫bc.js的掃描介面,並獲得自動生成的Device物件
- 學習到如何呼叫Device物件的介面讀取Device的Information,廣播包及訊號強度(RSSI)等資訊
- 通過一個使用HTML展現的頁面來開啟掃描,並展示出獲得到的周圍的裝置列表
StartScan介面
Scan介面註冊在了BC.Bluetooth上,呼叫BC.Bluetooth.StartScan(),即可開啟掃描。對於Android裝置,如果向StartScan中不傳入任何引數,那麼預設首先進行5秒鐘的BLE掃描,再進行12秒鐘的Classical掃描(可以掃描到2.1的裝置),如果中途不關閉掃描,那麼每17秒鐘進行一次這樣的混合掃描。如果是IOS裝置,那麼僅僅是BLE的掃描。如果希望Android只掃描BLE裝置那麼傳入字串“LE”即可,如果希望其只掃描Bluetooth2.1的裝置,傳入“Classical”即可。
function StartScan(){
BC.Bluetooth.StartScan("LE"); //只開啟BLE的掃描
}
開啟掃描之後,bc.js底層會通過newdevice
這個事件來將掃描到的裝置物件傳遞給處理函式。這個事件被註冊在了BC.bluetooth物件上。
document.addEventListener('bcready', onBCReady, false);
function onBCReady() {
BC.bluetooth.addEventListener("newdevice",function(event){
var newDevice = event.target;
newDevice.addEventListener("deviceconnected",function(arg){
alert(newDevice.deviceAddress +" is connected!");
});
newDevice.addEventListener("devicedisconnected",function(arg){
alert(newDevice.deviceAddress+" is disconnected!");
});
});
}
注意:BC.Bluetooth和BC.bluetooth並不是同一個物件,BC.Bluetooth物件上主要註冊了一些全域性靜態的函式,而BC.bluetooth物件是在bc.js載入時new出來的一個物件,上面註冊了物件事件以及裝置列表等需要動態載入的物件。
StopScan介面
StopScan介面不接收引數,呼叫過後會關閉所有型別的掃描。
function StopScan(){
BC.Bluetooth.StopScan();
}
獲取Device物件相關資訊
掃描到的Device物件都被儲存在BC.bluetooth.devices這個字典中,可以用device的Address來獲取指定的Device物件:
function(deviceAddress){
var device = BC.bluetooth.devices[deviceAddress];
alert(device.deviceAddress);
alert(device.deviceName);
}
Device物件如果由StartScan介面獲取,那麼可以得到該裝置的廣播包。其廣播包封裝成了一個字典,可以使用JSON.stringify
來檢視此Device都包含哪些廣播包欄位。廣播包欄位中IBeacon使用到了ManufacturerData這個欄位,此欄位比較特殊,其值為一個DataValue物件,因此可以像第二章中所提到的呼叫格式轉化方法,或者直接使用javascript方法對manufacturerData.value
直接進行處理。
function seeADVData(deviceAddress){
var device = BC.bluetooth.devices[deviceAddress];
alert(JSON.stringify(device.advertisementData));
if(device.advertisementData.manufacturerData){
alert("ManufacturerData(Hex):" + device.advertisementData.manufacturerData.getHexString()+"\n"+
"ManufacturerData(ASCII):" + device.advertisementData.manufacturerData.getASCIIString()+"\n"+
"ManufacturerData(Unicode):" + device.advertisementData.manufacturerData.getUnicodeString());
}
}
在裝置連線過後,還可以通過Device物件提供的getDeviceInfo
介面檢視它的Device Information Profile中的資訊,從Device Information Service包含的特徵值中讀取的資料都將放在Device物件的欄位當中。
function getDeviceInfo(device){
device.discoverServices(function(){
device.getDeviceInfo(function(){
alert("System ID:"+device.systemID.getHexString()+"\n"+
"Model Number:"+device.modelNum.getASCIIString()+"\n"+
"Serial Number:"+device.serialNum.getASCIIString()+"\n"+
"Firmware Revision:"+device.firmwareRevision.getASCIIString()+"\n"+
"Hardware Revision:"+device.hardwareRevision.getASCIIString()+"\n"+
"Software Revision:"+device.softwareRevision.getASCIIString()+"\n"+
"Manufacturer Name:"+device.manufacturerName.getASCIIString());
},function(){
alert("get device Information error!");
});
},function(){
alert("discover service error!");
});
}
關於訊號強度(RSSI)
訊號強度是藍芽裝置用來檢測裝置和手機端距離的重要數值,基於RSSI可以用於定位、測距等多種應用場景。在連線裝置之前,每一個廣播包中都會帶有當前的訊號強度,當裝置連線過後,可以通過Device物件提供的getRSSI
介面來獲取當前的RSSI:
function getRSSI(device){
device.getRSSI(function(rssi){
alert(rssi);
});
}
至此,您已經可以呼叫BC.Bluetooth物件來實現開啟關閉掃描的功能,並操作掃描到的Device物件了。本章同樣提供了對應的原始碼。
為了更深一步操作掃描到的裝置廣播包,下一章將介紹BCSphere提供的IBeacon掃描功能。
相關文章
- BCSphere入門教程目錄
- BCSphere入門教程01:Immediate Alert
- BCSphere入門教程02:操作 Characteristic
- 從 TWAIN 裝置中掃描影象AI
- 手持裝置掃描槍開發
- BCSphere入門教程06:使用Cordova標準模組
- BCSphere入門教程04:使用iBeacon介面
- BCSphere入門教程:導言和知識準備
- 原始碼掃描裝置/軟體列表原始碼
- oracle 全表掃描,索引範圍掃描與塊的理解Oracle索引
- BCSphere入門教程05:標準Profile與自定義Profile
- Nmap掃描教程之基礎掃描詳解
- 駭客玩具入門——4、漏洞掃描與Metasploit
- Nessus漏洞掃描教程之安裝Nessus工具
- 03 . Jenkins構建之程式碼掃描Jenkins
- MySQL8.0之跳躍範圍掃描MySql
- 網路安全漏洞掃描工具有哪些?老男孩網路安全入門教程
- 區域網內獲取周圍裝置的ip和埠
- Nessus漏洞掃描教程之使用Nmap工具掃描識別指紋
- vuls掃描安裝文件
- SAP PM 入門系列2 - IE03顯示裝置主資料
- 漏洞掃描軟體Nessus使用教程
- Mac 入門教程:如何更改你的 Mac 裝置名稱Mac
- 區域性範圍掃描的靈活應用
- 掃描技術和掃描工具
- 電腦執行twincat2掃描ethercat裝置並進行控制
- Nmap掃描教程之DNS服務類DNS
- 掃描二維碼登入思路
- 《MySQL 入門教程》第 03 篇 管理資料庫MySql資料庫
- QingScan掃描器安裝、使用
- AWVS掃描器掃描web漏洞操作Web
- Nmap掃描教程之Nmap基礎知識
- win10系統掃描器提示掃描不到掃描器如何解決Win10
- 03-SparkSQL入門SparkSQL
- 掃描王 for Mac專業圖片掃描工具Mac
- ubuntu安裝zbar二維碼掃描Ubuntu
- SonarQube系列-透過配置掃描分析範圍,聚焦關鍵問題
- 大表範圍掃描走SORT MERGE JOIN的SQL優化SQL優化