JavaScript是一門廣泛應用于現代Web技術的語言,近年來藍牙技術的普及也讓JavaScript中的藍牙功能需要被更加關注。本文將介紹藍牙在JavaScript中的應用、具體用法,同時演示示例函數。
為了使得本文便于理解且具有可操作性,我們將使用以下場景,在其中進行藍牙連接來實際展示藍牙功能的實現。我們可以想象一個基于Web的遠程機器人控制端,該控制端需要通過藍牙連接移動端上的機器人端進行控制。
//下面的代碼是藍牙基礎設置 navigator.bluetooth.requestDevice({ filters: [{ services: ['heart_rate'] }] }) .then(device => { }); const setConnected = () => { //藍牙連接成功后將會執行該方法 };
在上述代碼中,我們進行了藍牙請求,申請獲得一個與Heart Rate指定服務相連接的設備,在該代碼中我們忽略了一些常見的藍牙設置,例如:發現服務、設置通道、服務、以及寫入值等設置。我們假設,在實際場景中這些值已經被正確設置。
//下面的代碼是服務通信和數據更新的代碼 device.gatt.connect() .then(server => { return server.getPrimaryService(0xff00); }) .then(service => { return service.getCharacteristics(); }) .then(characteristics => { //數據更新的主方法 characteristic.addEventListener('characteristicvaluechanged', (event) => { setConnected(); const value = event.target.value; const command = parseCommand(value); //讀取設備對象并調用其對應方法 controller[command.name].apply(controller, command.args); }); }) .catch(error => { console.error(error); }); const parseCommand = (value) => { //對收到的值進行解析 const decoded = new TextDecoder().decode(value); const parts = decoded.split(':'); return { name: parts[0], args: parts.slice(1) }; };
在上述代碼中,我們使用GATT的connect方法進行服務通信的建立,并獲取primary service。特征值(characteristics)被獲取并監聽了characteristicvaluechanged事件。當收到數據更新時,數據將被解析成可讀的格式并傳遞給機器人控制器對象的方法執行。
在機器人控制端中,以下代碼將被用于數據設置和執行實際指令:
class RobotController { forward(distance) { //向前運動distance
cm } backward(distance) { //向后運動distance
cm } left(degrees) { // 向左旋轉degrees
角度 } right(degrees) { // 向右旋轉degrees
角度 } } const controller = new RobotController();
綜合上述代碼,我們已經實現了機器人控制端頁面中的遠程控制器。我們可以將其運行在任意設備上,無需使用額外的移動應用程式即可連接到機器人的主控端。使用 JavaScript 中的藍牙功能有助于我們快速實現 Web 應用到藍牙設備的通信,使得開發 Web 應用時使用外圍設備變得更加容易。