uniapp: 低功耗藍牙(BLE)的使用

在微信小程序中實現藍牙對接藍牙秤的重量功能,主要依賴微信小程序提供的低功耗藍牙(BLE)API。以下是一個清晰的步驟指南,幫助你完成從連接藍牙秤到獲取重量數據的開發流程。需要注意的是,具體實現可能因藍牙秤的協議和硬件特性而有所不同,因此你需要參考藍牙秤的開發文檔(比如服務UUID、特征值UUID等)。


開發步驟

1. 配置小程序權限

在小程序的 app.json 文件中添加藍牙相關權限,確保小程序有權使用藍牙功能:

json

{"permission": {"scope.bluetooth": {"desc": "您的藍牙權限將用于連接藍牙秤"}}
}

2. 初始化藍牙適配器

使用 wx.openBluetoothAdapter 初始化藍牙模塊,確保手機藍牙已開啟:

javascript

wx.openBluetoothAdapter({success(res) {console.log('藍牙適配器初始化成功');// 繼續后續操作},fail(res) {console.log('藍牙適配器初始化失敗,請檢查藍牙是否開啟', res);}
});

3. 搜索藍牙設備

調用 wx.startBluetoothDevicesDiscovery 開始搜索附近的藍牙設備。通常需要根據藍牙秤的設備名稱或服務UUID進行過濾:

javascript

wx.startBluetoothDevicesDiscovery({success(res) {console.log('開始搜索藍牙設備');wx.onBluetoothDeviceFound((res) => {res.devices.forEach(device => {// 根據設備名稱或服務UUID篩選藍牙秤if (device.name.includes('YourScaleName')) { // 替換為實際藍牙秤名稱console.log('發現藍牙秤:', device);// 停止搜索wx.stopBluetoothDevicesDiscovery();// 保存設備IDconst deviceId = device.deviceId;// 連接設備connectBLE(deviceId);}});});},fail(res) {console.log('搜索設備失敗', res);}
});

4. 連接藍牙秤

使用 wx.createBLEConnection 連接指定的藍牙秤:

javascript

function connectBLE(deviceId) {wx.createBLEConnection({deviceId: deviceId,success(res) {console.log('連接藍牙秤成功');// 獲取服務getBLEDeviceServices(deviceId);},fail(res) {console.log('連接失敗', res);}});
}

5. 獲取服務和特征值

連接成功后,使用 wx.getBLEDeviceServiceswx.getBLEDeviceCharacteristics 獲取藍牙秤的服務和特征值。特征值中通常會有一個用于讀取重量數據的特征(參考設備文檔):

javascript

function getBLEDeviceServices(deviceId) {wx.getBLEDeviceServices({deviceId: deviceId,success(res) {res.services.forEach(service => {// 假設目標服務UUID已知if (service.uuid === 'YOUR_SERVICE_UUID') { // 替換為實際服務UUIDgetBLEDeviceCharacteristics(deviceId, service.uuid);}});}});
}function getBLEDeviceCharacteristics(deviceId, serviceId) {wx.getBLEDeviceCharacteristics({deviceId: deviceId,serviceId: serviceId,success(res) {res.characteristics.forEach(characteristic => {// 找到支持通知(notify)的特征值,用于接收重量數據if (characteristic.properties.notify) {enableNotify(deviceId, serviceId, characteristic.uuid);}});}});
}

6. 啟用通知并監聽重量數據

使用 wx.notifyBLECharacteristicValueChange 啟用特征值通知,并通過 wx.onBLECharacteristicValueChange 監聽藍牙秤發送的重量數據:

javascript

function enableNotify(deviceId, serviceId, characteristicId) {wx.notifyBLECharacteristicValueChange({deviceId: deviceId,serviceId: serviceId,characteristicId: characteristicId,state: true,success() {console.log('啟用通知成功');// 監聽特征值變化wx.onBLECharacteristicValueChange((res) => {const value = res.value; // ArrayBuffer類型數據const weight = parseWeightData(value); // 自定義解析函數console.log('當前重量:', weight);});}});
}// 解析重量數據(需根據藍牙秤協議實現)
function parseWeightData(buffer) {const dataView = new DataView(buffer);// 示例:假設重量數據是2字節整數,單位為克const weightInGrams = dataView.getUint16(0, true); // 小端序return weightInGrams / 1000; // 轉換為千克
}

7. 斷開連接(可選)

使用完成后,可以通過 wx.closeBLEConnection 斷開與藍牙秤的連接:

javascript

wx.closeBLEConnection({deviceId: deviceId,success(res) {console.log('斷開連接成功');}
});

注意事項

  1. 藍牙秤協議:每款藍牙秤的通信協議不同(如服務UUID、特征值UUID、數據格式),需仔細閱讀設備提供的開發文檔。
  2. 兼容性:iOS和Android在藍牙實現上可能有細微差異,尤其是特征值UUID的處理(有時大小寫敏感)。
  3. 數據解析:藍牙秤返回的重量數據可能是二進制格式(如ArrayBuffer),需要根據協議轉換為可讀的重量值。
  4. 錯誤處理:確保在每個步驟中添加失敗回調,提示用戶檢查藍牙狀態或設備連接。

流程總結

  1. 初始化藍牙適配器。
  2. 搜索并連接目標藍牙秤。
  3. 獲取服務和特征值,找到重量數據的特征。
  4. 啟用通知并監聽實時重量數據。
  5. 根據協議解析數據并顯示。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903491.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903491.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903491.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

3D架構圖軟件 iCraft Editor 正式發布 @icraft/player-react 前端組件, 輕松嵌入3D架構圖到您的項目

安裝 pnpm install icraft/player-react --saveimport { ICraftPlayer } from "icraft/player-react";export default function MyScene() {return <ICraftPlayer srcyour-scene.iplayer />; }icraft/player-react 為開發者提供了一站式的3D數字孿生可視化解決…

云數據中心整體規劃方案PPT(113頁)

1. 引言 概述&#xff1a;云數據中心整體規劃方案旨在構建彈性、高效的云計算基礎設施&#xff0c;通過軟件定義數據中心&#xff08;SDDC&#xff09;實現資源虛擬化與管理自動化。 2. 技術趨勢與背景 技術革新&#xff1a;隨著云計算、虛擬化及自動化技術的發展&#xff0c…

(六)機器學習---聚類與K-means

到本篇文章&#xff0c;我們先對前幾篇所學習的算法進行一個回顧&#xff1a; 而本篇文章我們將會介紹聚類以及K-means算法。 分類問題回歸問題聚類問題各種復雜問題決策樹√線性回歸√K-means√神經網絡√邏輯回歸√嶺回歸密度聚類深度學習√集成學習√Lasso回歸譜聚類條件隨機…

在html中如何創建vue自定義組件(以自定義文件上傳組件為例,vue2+elementUI)

1、先上代碼&#xff1a;vueUpload.js var dom <div class"upload-file"><el-upload :action"uploadFileUrl" :before-upload"handleBeforeUpload" :file-list"fileList" :limit"limit":on-error"handleUpl…

計算機基礎:二進制基礎14,二進制加法

專欄導航 本節文章分別屬于《Win32 學習筆記》和《MFC 學習筆記》兩個專欄&#xff0c;故劃分為兩個專欄導航。讀者可以自行選擇前往哪個專欄。 &#xff08;一&#xff09;WIn32 專欄導航 上一篇&#xff1a;計算機基礎&#xff1a;二進制基礎13&#xff0c;十六進制與二進…

可視化圖解算法: 判斷是不是二叉搜索樹(驗證二叉搜索樹)

1. 題目 描述 給定一個二叉樹根節點&#xff0c;請你判斷這棵樹是不是二叉搜索樹。 二叉搜索樹滿足每個節點的左子樹上的所有節點的值均嚴格小于當前節點的值&#xff1b;并且右子樹上的所有節點的值均嚴格大于當前節點的值。 數據范圍&#xff1a;節點數量滿足 1≤n≤10^4…

Markdown轉WPS office工具pandoc實踐筆記

隨著DeepSeek、文心一言、訊飛星火等AI工具快速發展&#xff0c;其輸出網頁內容拷貝到WPS Office過程中&#xff0c;文檔編排規整的格式很難快速復制。 注&#xff1a;WPS Office不支持Markdown格式&#xff0c;無法識別式樣。 在這里推薦個免費開源工具Pandoc&#xff0c;實現…

python的turtle庫實現四葉草

實現代碼&#xff1a; import turtle turtle.pencolor(‘green’) turtle.fillcolor(‘green’) turtle.begin_fill() turtle.circle(100,90) turtle.left(90) turtle.circle(100,90) turtle.right(180) turtle.circle(100, 90) turtle.left(90) turtle.circle(100,90) tu…

北重數控滑臺加工廠家:汽車零部件試驗鐵地板-安全性能的測試方法

汽車零部件的安全性能測試是非常重要的&#xff0c;其中鐵地板測試是其中的一種常見測試方法之一。鐵地板測試主要用于評估汽車零部件在發生碰撞或事故時的安全性能&#xff0c;以確保零部件在各種情況下都能提供有效的保護和安全性能。 鐵地板測試通常包括以下步驟和方法&…

Linux0.11系統調用:預備知識

系統調用 預備知識 目標&#xff1a;了解系統調用的流程&#xff0c;在Linux 0.11上添加兩個系統調用&#xff0c;并編寫兩個簡單的應用程序測試它們。 對應章節&#xff1a;同濟大學趙炯博士的《Linux內核0.11完全注釋&#xff08;修正版V3.0&#xff09;》的第5.5節 下面就針…

如何防止 ES 被 Linux OOM Killer 殺掉

當 Linux 系統內存不足時&#xff0c;內核會找出一個進程 kill 掉它釋放內存&#xff0c;旨在保障整個系統不至于崩潰。如果 ES 按照最佳實踐去實施部署&#xff0c;會保留一半的內存&#xff0c;不至于發生此類事情。但事情總有例外&#xff0c;有的朋友可能 ES 和其他的程序部…

swagger2升級至openapi3的利器--swagger2openapi

背景&#xff1a; 因為項目需要升級JDK&#xff0c;涉及到swagger2升級至openapi3的情況。由于swagger 2和openapi 3的語法差距太大&#xff0c;需要對yaml進行升級。無奈單個yaml文件的內容太大&#xff0c;高至4萬多行&#xff0c;手動進行語法的轉換肯定是不可能了&#xff…

在yolo中Ultralytics是什么意思呢?超越分析的智能

在YOLO&#xff08;You Only Look Once&#xff09;目標檢測框架中&#xff0c;Ultralytics 是一家專注于計算機視覺和機器學習技術的公司&#xff0c;同時也是YOLO系列模型&#xff08;如YOLOv5、YOLOv8等&#xff09;的官方開發和維護團隊。以下是關鍵點解析&#xff1a; 1. …

【阿里云大模型高級工程師ACP習題集】2.7 通過微調增強模型能力 (上篇)(?????? 重點章節!!!)

習題集: 【單選題】在大模型微調中,與提示工程和RAG相比,微調的獨特優勢在于( ) A. 無需外部工具即可提升模型表現 B. 能讓模型學習特定領域知識,提升底層能力 C. 可以更高效地檢索知識 D. 能直接提升模型的知識邊界,無需訓練 【多選題】以下關于機器學習和傳統編程的說…

CuML + Cudf (RAPIDS) 加速python數據分析腳本

如果有人在用Nvidia RAPIDS加速pandas和sklearn等庫&#xff0c;請看我這個小示例&#xff0c;可以節省你大量時間。 1. 創建環境 請使用uv&#xff0c;而非conda/mamba。 # install uv if not yetcurl -LsSf https://astral.sh/uv/install.sh | shuv init data_gpucd data_g…

2-SAT之完美塔防

小N最近喜歡玩一款塔防游戲。 題目描述 這款游戲的棋盤是一個 nm 的網格&#xff0c;每個格子上會有以下類型物件&#xff1a; A 型炮臺&#xff1a;會向上下兩個方向同時發射激光&#xff0c;符號為 |;B 型炮臺&#xff1a;會向左右兩個方向同時發射激光&#xff0c;符號為…

【android bluetooth 案例分析 03】【PTS 測試 】【PBAP/PCE/SSM/BV-02-C】

1. 測試介紹 PBAP/PCE/SSM/BV-02-C [PCE Closes a PBAP Session] 1. Test Purpose Verify that the PCE can terminate a PBAP session. 2. Initial Condition IUT: The IUT is engaged in a PBAP session with the Lower Tester.Lower Tester: The Lower Tester is engag…

ArcGIS:開啟洪水災害普查、評估與制圖新征程

技術點目錄 一、洪水普查技術規范解讀二、ArcGIS介紹及數據管理三、空間數據的轉換與處理四、洪水淹沒專題地圖制作五、矢量數據的采集與處理六、柵格數據的下載與處理七、ArcGIS水文分析八、ArcGIS洪水分析九、ArcGIS淹沒分析了解更多 ———————————————————…

【系統參數合法性校驗】spring-boot-starter-validation

JSR303校驗 統一校驗的需求 前端請求后端接口傳輸參數&#xff0c;是在controller中校驗還是在Service中校驗&#xff1f; 答案是都需要校驗&#xff0c;只是分工不同。 Contoller中校驗請求參數的合法性&#xff0c;包括&#xff1a;必填項校驗&#xff0c;數據格式校驗&…

[零基礎]內網ubuntu映射到云服務器上,http訪問(frp內網穿透)

阿里云服務器&#xff0c;高校教師可以半價&#xff0c; frp下載地址&#xff1a;https://github.com/fatedier/frp/releases&#xff0c;選amd64&#xff0c; 云服務器開放端口 選擇網絡與安全–>安全組->管理規則 配置開放端口&#xff0c;7000為支持frp開放的端口&…