微信小程序藍牙開發詳解

一、藍牙技術簡介

藍牙技術是一種無線個人局域網技術,可用於連接移動電話、筆記本電腦、數字相機、PDA等設備。它是一種開放的供應商中立技術,由Ericsson等公司在1994年創立,屬於藍牙專業小組SIG的一部分。

藍牙技術最初旨在消除傳統串行線纜的困擾,改用無線通信方式。藍牙技術提供了簡單的、安全的無線連接,其中包括數據和音頻傳輸等多項服務,速度可達1Mbps,覆蓋範圍通常為10米。

藍牙技術主要分為經典藍牙和低功耗藍牙兩個版本,經典藍牙適用於數據傳輸等場景,低功耗藍牙適用於物聯網等長期低功耗場景。

二、微信小程序藍牙開發介紹

微信小程序提供了藍牙API,可以通過小程序與藍牙設備進行連接和數據交互。藍牙功能的開發步驟一般包括以下幾個方面:

1、初始化藍牙適配器


wx.openBluetoothAdapter({
    success: function (res) {
        console.log('藍牙適配器初始化成功')
    },
    fail: function (res) {
        console.log('藍牙適配器初始化失敗')
    }
})

2、搜索藍牙設備


wx.startBluetoothDevicesDiscovery({
    services: [],  //搜索目標設備的服務
    allowDuplicatesKey: false,  //搜索結果是否允許重複
    success: function (res) {
        console.log('搜索藍牙設備成功')
    },
    fail: function (res) {
        console.log('搜索藍牙設備失敗')
    }
})

3、監聽藍牙設備變化


wx.onBluetoothDeviceFound(function (devices) {
    console.log('新設備', devices)
})

4、連接藍牙設備


wx.createBLEConnection({
    deviceId: '',  //藍牙設備ID
    success: function (res) {
        console.log('藍牙設備連接成功')
    },
    fail: function (res) {
        console.log('藍牙設備連接失敗')
    }
})

5、監聽藍牙設備連接狀態


wx.onBLEConnectionStateChange(function (res) {
    console.log(`藍牙設備 ${res.deviceId} 連接狀態變化`, res.connected)
})

6、讀寫藍牙設備數據


wx.readBLECharacteristicValue({
    deviceId: '',  //藍牙設備ID
    serviceId: '',  //藍牙設備服務ID
    characteristicId: '',  //藍牙設備特徵值ID
    success: function (res) {
        console.log('讀取藍牙設備數據成功', res)
    },
    fail: function (res) {
        console.log('讀取藍牙設備數據失敗', res)
    }
})

wx.writeBLECharacteristicValue({
    deviceId: '',  //藍牙設備ID
    serviceId: '',  //藍牙設備服務ID
    characteristicId: '',  //藍牙設備特徵值ID
    value: new ArrayBuffer(1),  //寫入的數據
    success: function (res) {
        console.log('寫入藍牙設備數據成功', res)
    },
    fail: function (res) {
        console.log('寫入藍牙設備數據失敗', res)
    }
})

7、斷開藍牙設備連接


wx.closeBLEConnection({
    deviceId: '',  //藍牙設備ID
    success: function (res) {
        console.log('藍牙設備連接斷開成功')
    },
    fail: function (res) {
        console.log('藍牙設備連接斷開失敗')
    }
})

三、微信小程序藍牙開發實戰

通過藍牙技術,我們可以讓小程序連接到藍牙設備,並將設備上的數據展示到小程序上。下面,我們以連接智能體脂秤為例,演示具體的代碼實現過程。

1、初始化藍牙適配器


wx.openBluetoothAdapter({
    success: function (res) {
        console.log('藍牙適配器初始化成功')

        //開啟藍牙搜索
        wx.startBluetoothDevicesDiscovery({
            services: [],  //搜索目標設備的服務
            allowDuplicatesKey: false,  //搜索結果是否允許重複
            success: function (res) {
                console.log('搜索藍牙設備成功')
            },
            fail: function (res) {
                console.log('搜索藍牙設備失敗')
            }
        })
    },
    fail: function (res) {
        console.log('藍牙適配器初始化失敗')
    }
})

2、搜索藍牙設備

在onBluetoothDeviceFound事件回調函數中,獲取到設備後,根據設備名稱進行判斷,如果是智能體脂秤,則停止藍牙搜索,並連接藍牙設備。


//搜索到新設備
wx.onBluetoothDeviceFound(function (devices) {
    console.log('新設備', devices)

    //查找智能體脂秤設備
    if (devices.name == 'Smart Body Scale') {
        //停止搜索設備
        wx.stopBluetoothDevicesDiscovery({
            success: function (res) {
                console.log('停止搜索藍牙設備成功')

                //連接藍牙設備
                wx.createBLEConnection({
                    deviceId: devices.deviceId,
                    success: function (res) {
                        console.log('藍牙設備連接成功', res)

                        //監聽連接狀態變化
                        wx.onBLEConnectionStateChange(function (res) {
                            console.log(`藍牙設備 ${res.deviceId} 連接狀態變化`, res.connected)
                        })

                        //獲取藍牙設備服務列表
                        wx.getBLEDeviceServices({
                            deviceId: devices.deviceId,
                            success: function (res) {
                                console.log('獲取藍牙設備服務列表成功', res)

                                //獲取第一個服務ID
                                var serviceId = res.services[0].uuid

                                //獲取藍牙設備特徵值列表
                                wx.getBLEDeviceCharacteristics({
                                    deviceId: devices.deviceId,
                                    serviceId: serviceId,
                                    success: function (res) {
                                        console.log('獲取藍牙設備特徵值列表成功', res)

                                        //遍歷特徵值列表,找到讀取數據的特徵值ID和寫入數據的特徵值ID
                                        for (var i = 0; i < res.characteristics.length; i++) {
                                            var item = res.characteristics[i]

                                            //讀取數據的特徵值
                                            if (item.properties.read) {
                                                that.setData({
                                                    readCharacteristicId: item.uuid
                                                })
                                            }

                                            //寫入數據的特徵值
                                            if (item.properties.write) {
                                                that.setData({
                                                    writeCharacteristicId: item.uuid
                                                })
                                            }
                                        }

                                        //啟用特徵值的通知功能
                                        wx.notifyBLECharacteristicValueChange({
                                            deviceId: devices.deviceId,
                                            serviceId: serviceId,
                                            characteristicId: that.data.readCharacteristicId,
                                            state: true,
                                            success: function (res) {
                                                console.log('啟用特徵值的通知功能成功', res)

                                                //監聽藍牙設備數據變化
                                                wx.onBLECharacteristicValueChange(function (res) {
                                                    console.log('藍牙設備數據變化', res)

                                                    //處理藍牙設備數據,並展示在小程序上
                                                    var data = new Uint8Array(res.value)
                                                    var weight = data[4] + (data[5] * 256)  //體重
                                                    var fat = data[6] + (data[7] * 256)  //體脂率
                                                    var water = data[8] + (data[9] * 256)  //水分率
                                                    var muscle = data[10] + (data[11] * 256)  //肌肉量

                                                    that.setData({
                                                        weight: weight / 100,
                                                        fat: fat / 100,
                                                        water: water / 100,
                                                        muscle: muscle / 100
                                                    })
                                                })
                                            },
                                            fail: function (res) {
                                                console.log('啟用特徵值的通知功能失敗', res)
                                            }
                                        })
                                    },
                                    fail: function (res) {
                                        console.log('獲取藍牙設備特徵值列表失敗', res)
                                    }
                                })
                            },
                            fail: function (res) {
                                console.log('獲取藍牙設備服務列表失敗', res)
                            }
                        })
                    },
                    fail: function (res) {
                        console.log('藍牙設備連接失敗', res)
                    }
                })
            },
            fail: function (res) {
                console.log('停止搜索藍牙設備失敗', res)
            }
        })
    }
})

3、讀取藍牙設備數據

啟用特徵值的通知功能後,當設備上的數據發生變化時,會觸發onBLECharacteristicValueChange事件回調函數,從而讀取數據。


//監聽藍牙設備數據變化
wx.onBLECharacteristicValueChange(function (res) {
    console.log('藍牙設備數據變化', res)

    //處理藍牙設備數據,並展示在小程序上
    var data = new Uint8Array(res.value)
    var weight = data[4] + (data[5] * 256)  //體重
    var fat = data[6] + (data[7] * 256)  //體脂率
    var water = data[8] + (data[9] * 256)  //水分率
    var muscle = data[10] + (data[11] * 256)  //肌肉量

    that.setData({
        weight: weight / 100,
        fat: fat / 100,
        water: water / 100,
        muscle: muscle / 100
    })
})

4、斷開藍牙設備連接

在小程序頁面隱藏時,調用wx.closeBLEConnection方法斷開藍牙設備連接。


onHide: function () {
    //斷開藍牙設備連接
    wx.closeBLEConnection({
        deviceId: this.data.deviceId,
        success: function (res) {
            console.log('藍牙設備連接斷開成功')
        },
        fail: function (res) {
            console.log('藍牙設備連接斷開失敗')
        }
    })
}

四、小結

通過藍牙技術,可以讓小程序連接到藍牙設備,並進行數據讀寫。在實際開發中,需要注意以下幾點:

1、對藍牙設備進行操作時,需要先判斷藍牙是否可用,並且藍牙設備是否已連接。

2、對於不同的藍牙設備,需要了解其通信協議,並根據協議進行數據的解析和封裝。

3、在實際使用中,需要考慮藍牙設備的能耗問題,盡量減少不必

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/277001.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-19 13:20
下一篇 2024-12-19 13:20

相關推薦

  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • Python購物車程序

    Python購物車程序是一款基於Python編程語言開發的程序,可以實現購物車的相關功能,包括商品的添加、購買、刪除、統計等。 一、添加商品 添加商品是購物車程序的基礎功能之一,用…

    編程 2025-04-29
  • 爬蟲是一種程序

    爬蟲是一種程序,用於自動獲取互聯網上的信息。本文將從如下多個方面對爬蟲的意義、運行方式、應用場景和技術要點等進行詳細的闡述。 一、爬蟲的意義 1、獲取信息:爬蟲可以自動獲取互聯網上…

    編程 2025-04-29
  • Vb運行程序的三種方法

    VB是一種非常實用的編程工具,它可以被用於開發各種不同的應用程序,從簡單的計算器到更複雜的商業軟件。在VB中,有許多不同的方法可以運行程序,包括編譯器、發布程序以及命令行。在本文中…

    編程 2025-04-29
  • Python一元二次方程求解程序

    本文將詳細闡述Python一元二次方程求解程序的相關知識,為讀者提供全面的程序設計思路和操作方法。 一、方程求解 首先,我們需要了解一元二次方程的求解方法。一元二次方程可以寫作: …

    編程 2025-04-29
  • 如何使用GPU加速運行Python程序——以CSDN為中心

    GPU的強大性能是眾所周知的。而隨着深度學習和機器學習的發展,越來越多的Python開發者將GPU應用於深度學習模型的訓練過程中,提高了模型訓練效率。在本文中,我們將介紹如何使用G…

    編程 2025-04-29
  • Web程序和桌面程序的區別

    Web程序和桌面程序都是進行軟件開發的方式,但是它們之間存在很大的區別。本文將從多角度進行闡述。 一、運行方式 Web程序運行於互聯網上,用戶可以通過使用瀏覽器來訪問它。而桌面程序…

    編程 2025-04-29
  • 改善Python程序的90個建議pdf網盤

    本文將從多個方面對改善Python程序的90個建議pdf網盤進行詳細闡述,幫助Python開發者提高程序的性能和效率。 一、代碼優化 1、使用map函數或列表推導式代替for循環。…

    編程 2025-04-29

發表回復

登錄後才能評論