微信小程式連線藍芽電子秤

2022-08-21 15:27:16 字數 3962 閱讀 5636

###⚠️注意

* 此次,只涉及讀取資料,沒有寫入資料,具體 api 檢視小程式官方文件

* 確保手機藍芽已經開啟,並且可以搜尋到該電子秤的藍芽裝置,android 可以搜到,ios 搜不到 --- 但是沒有關係,小程式裡 getbluetoothdevices 可以成功就可以了

* 最終得到的結果是 arraybuffer 型資料,需要先轉為16進製制字串,再轉為10進製資料 --- 小程式官方文件上這樣提示,實際並不可行初始化藍芽模組 --- wx.openbluetoothadapter

// 定義資料

data:

// 藍芽 api 呼叫步驟

openbluetoothadapter() ,

fail: err => })}

/* wx.onbluetoothadapterstatechange(,

fail: err =>

})*/}})

}

###(2)搜尋藍芽裝置

####搜尋附近的藍芽外圍裝置 --- wx.startbluetoothdevicesdiscovery

* 入參 services 作用要搜尋的藍芽裝置主 service 的 uuid 列表,某些藍芽裝置會廣播自己的主 service 的 uuid,如果設定此引數,則只搜尋廣播包括對應 uuid 的主服務的藍芽裝置,可以通過該引數過濾掉周邊不需要處理的其他藍芽裝置

* 入參 allowduplicateskey 作用是否允許重複上報同一裝置,如果允許重複上報,則 wx.onbluetoothdevicefound 方法會多次上報同一裝置,但是 rssi 值會有不同,預設為 false

⚠️ 此操作比較耗費系統資源,需要在搜尋並連線到裝置後呼叫 wx.stopbluetoothdevicesdiscovery 方法停止搜尋

startbluetoothdevicesdiscovery() ,

fail: err =>

})}

###(3)獲取藍芽裝置

####獲取在藍芽模組生效期間所有已發現的藍芽裝置,包括已經連線成功的藍芽裝置 --- wx.getbluetoothdevices

```getbluetoothdevices() )

this.createbleconnection(); // (4) 與目標裝置建立連線

},fail: err =>

})}```

####這裡還可以用 wx.onbluetoothdevicefound(),但是相較於 wx.getbluetoothdevices(),這個只會監聽尋找新裝置,因而在一次編譯中,不方便同乙個藍芽裝置的復用

```// 監聽尋找新裝置

onbluetoothdevicefound() )

that.createbleconnection(that.data.deviceid);}})

})},

```###(4)建立連線

####與目標藍芽裝置建立連線,需要是低功耗藍芽裝置 --- wx.createbleconnection

```createbleconnection() )}})

// 建立連線

wx.createbleconnection(,

fail: err =>

})}```

###(5)獲取藍芽裝置服務

####獲取藍芽裝置所有主服務的 uuid --- wx.getbledeviceservices

* 入參 deviceid 為 wx.getbluetoothdevices 中獲取的目標藍芽裝置的 deviceid

⚠️開發過程中,主服務 serviceid 和 主服務的特徵值 characteristics 都是選取的實際操作過程中,得到的類似於該目標藍芽裝置的 id,但是小程式官方文件的 demo,遍歷了所有的列表(serviceid 和 characteristics),需要區分一下

getbledeviceservices() )

this.getbledevicecharacteristics() // (6) 獲取特徵值

// 官方 demo

for(var i = 0; i < res.services.length; i++) }},

fail: err =>

})}

###(6)獲取特徵值

####獲取藍芽裝置某個服務中所有特徵值 --- wx.getbledevicecharacteristics

* 入參 deviceid 為 wx.getbluetoothdevices 中獲取的目標藍芽裝置的 deviceid

* 入參 serviceid 為藍芽服務 uuid ,通過 wx.getbledeviceservices 獲取

```getbledevicecharacteristics(serviceid) )

(res.characteristics || ).foreach(item => )

}if(item.properties.notify || item.properties.indicate) )}})

}})

},fail: err =>

})this.onblecharacteristicvaluechange() // (8)監聽特徵值變化

}```

###(7)啟用 notify 功能

####啟用低功耗藍芽特徵值變化時的 notify 功能,訂閱特徵值

⚠️必須裝置的特徵值支援 notify 或者 indicate 才可以成功啟用

```notifyblecharacteristicvaluechange() )

}```

###(8)監聽特徵值變化

####監聽低功耗藍芽裝置特徵值的變化事件 --- wx.onblecharacteristicvaluechange

⚠️必須先啟用 notifyblecharacteristicvaluechange 介面才能接收到裝置推送的 notification(通知)

```// 先監聽一下,保證第一時間獲取資料

onblecharacteristicvaluechange() )

//     獲取最終結果 監聽值是否發生變化,變化時獲取最新值 避免一直監聽,資料改變量較大

let result = (this.ab2str(characteristic.value) || '').split(' ').reverse()[1];

if(this.data.weight == result) else )

}})

###(9)讀取資料

####讀取低功耗藍芽裝置的特徵值的二進位制資料值 --- wx.readblecharacteristicvalue

⚠️必須目標藍芽裝置的特徵值支援 read 才可以成功呼叫,並且單獨使用 readblecharacteristicvalue 並不能獲取到真正的特徵值,只能返回獲取特徵值的狀態,即是否成功獲取到值,真正的值需要使用 wx.onblecharacteristicvaluechange() 執行**才可以在 wx.onblecharacteristicvaluechange() 這個 api 中獲得讀取到的特徵值

readblecharacteristicvalue() ,

fail: err => })}

###(10)轉為 16 進製

####官方文件中介紹了 arraybuffer 轉為 16 進製的方法

// arraybuffer轉16進製制字串示例

ab2hex(buffer)

)return hexarr.join('');

}

###(11)值轉換

####官方文件介紹的方法似乎有點不適用哎,試下這個

電子秤連線 電子秤稱重儀表故障與維修

電子秤電子稱重儀表根據訊號源的種類可分為兩大類,即模擬稱重儀表與數字稱重儀表。模擬稱重儀表是接收的是模擬訊號,秤體使用的是模擬 感測器,是將加到秤台上的重量通過彈性體的變形引起電阻應變計的阻值變化轉變為成比例的電訊號輸出 數字稱重儀表是現代電子技術,微處理技術,數字補償技術與傳統的應變式稱重感測器相...

微信小程式藍芽連線裝置

參考官方文件 上 wxml bindtap initblue 初始化藍芽view 匹配到的藍芽 view 高壓 view 低壓 view 脈搏 view view wxjs page 1.0 wx.openbluetoothadapter 初始化藍芽模組 initblue function that...

電子秤連線 智慧型電子秤氣密性檢測方法是怎樣的呢?

隨著現在電子產品迅猛發展以及特別運用場合的需求,使用者的對電子產品要求也越來越高。電子秤作為大眾化的電子產品,電子秤的防水性也是得到了使用者和廠家的重視,且因電子稱產品因防水等級的不同,在防水的效能上不同防塵防水防護等級的電子秤也有必定的差異。廠家會對電子秤產品進行防水等級檢測,因此基本上電子秤產品...