微信小程序?qū)崿F(xiàn)藍(lán)牙打印
最近剛好完成了一個(gè)打印標(biāo)簽的項(xiàng)目,其中就涉及到了小程序的藍(lán)牙功能。所以寫(xiě)下這篇粗略的文章記錄一下,同時(shí)也是給即將做相關(guān)項(xiàng)目的親們提供一個(gè)參考,也希望有什么描述不恰當(dāng)或者技術(shù)上不正確的地方大家可以指出,一起進(jìn)步。
藍(lán)牙打印只要按這九個(gè)步驟(前六個(gè)步驟連接藍(lán)牙,后三個(gè)步驟打印數(shù)據(jù))就可以搞定啦!步驟如下:
第一步:初始化藍(lán)牙模塊 wx.openBluetoothAdapter
wx.openBluetoothAdapter({
success (res) {
console.log(res)//res:{errMsg: "openBluetoothAdapter:ok"}
}
})
第二步:開(kāi)始搜尋附近的藍(lán)牙外圍設(shè)備 wx.startBluetoothDevicesDiscovery
wx.startBluetoothDevicesDiscovery({
//services: ['FEE7'],只搜索主服務(wù) UUID 為 FEE7 的設(shè)備,如果明確知道主服務(wù)UUID可以用此項(xiàng)做篩選
success (res) {
console.log(res)//res:{errCode: 0, errMsg: "startBluetoothDevicesDiscovery:ok", isDiscovering: true}
}
})
第三步:獲取已搜素到的藍(lán)牙設(shè)備列表 wx.getBluetoothDevices
wx.getBluetoothDevices({
success: function (res) {
console.log(res)//res:{errMsg: "getBluetoothDevices:ok", devices: Array(3)}
}
})
第四步:監(jiān)聽(tīng)尋找到新設(shè)備的事件 wx.onBluetoothDeviceFound(有時(shí)候會(huì)第三步會(huì)搜不到所以需要使用監(jiān)聽(tīng)器去隨時(shí)監(jiān)聽(tīng)搜索到的藍(lán)牙設(shè)備并返回給你)
wx.onBluetoothDeviceFound(function(res) {
console.log(res)//res:{devices: Array(1)}
})
第五步:連接藍(lán)牙設(shè)備 wx.createBLEConnection
wx.createBLEConnection({
deviceId,//上面選擇藍(lán)牙設(shè)備的deviceId,例:連接第一個(gè)設(shè)備devices[0].deviceId
success (res) {
console.log(res)//{errCode: 0, errMsg: "createBLEConnection:ok"}
}
})
第六步:停止搜尋附近的藍(lán)牙外圍設(shè)備 wx.stopBluetoothDevicesDiscovery(可以寫(xiě)在第五步成功回調(diào)之后,或者是
onUnload()函數(shù)里)
wx.stopBluetoothDevicesDiscovery({
success (res) {
console.log(res)
}
})
第七步:獲取藍(lán)牙設(shè)備所有服務(wù) wx.getBLEDeviceServices
wx.getBLEDeviceServices({
deviceId,//已連接的藍(lán)牙設(shè)備ID
success (res) {
console.log(res)//{errMsg: "getBLEDeviceServices:ok", services: Array(5), errCode: 0}
}
})
//這邊獲取到了5個(gè)服務(wù)
第八步:獲取藍(lán)牙設(shè)備中某一個(gè)服務(wù)的所有特征值 wx.getBLEDeviceCharacteristics
var characteristics="";
wx.getBLEDeviceCharacteristics({
deviceId,
serviceId,//第七步的服務(wù)ID,
success (res) {
//res:{errMsg: "getBLEDeviceCharacteristics:ok", characteristics: Array(4), errCode: 0}
//characteristics[0].properties: {read: true, write: false, notify: false, indicate: false}
//特征值有好幾種類(lèi)型,我們這邊打印需要的是item.properties.write為true的特征值
for (var i = 0; i < res.characteristics.length; i++) {
var item = res.characteristics[i];
if (item.properties.write) {
characteristics = item.uuid;
}
}
//保存特征值
}
})
第九步:向藍(lán)牙設(shè)備特征值中寫(xiě)入數(shù)據(jù) wx.writeBLECharacteristicValue
wx.writeBLECharacteristicValue({
deviceId,
serviceId,
characteristicId,//上面保存的特征值
value: buffer, // 這里的value是ArrayBuffer類(lèi)型,中間層傳過(guò)來(lái)的打印數(shù)據(jù)前端自己做轉(zhuǎn)換,轉(zhuǎn)換過(guò)程我這邊就不描述了;
success (res) {
console.log('writeBLECharacteristicValue success', res.errMsg)
}
})
//特別提醒建議每次寫(xiě)入的buffer不超過(guò)20字節(jié),超過(guò)會(huì)有寫(xiě)入錯(cuò)誤的風(fēng)險(xiǎn),所以一個(gè)打印的內(nèi)容可能要拆成N個(gè)20字節(jié)的buffer去循環(huán)writeBLECharacteristicValue,這樣就能打印成功啦。
附:
示例代碼(uniapp實(shí)現(xiàn)小程序藍(lán)牙打印簡(jiǎn)易流程)
另注:無(wú)論是原生、WePY、mpvue或uniapp、調(diào)用步驟都是一樣的,不過(guò)調(diào)用API的前綴需要改成對(duì)應(yīng)的就OK了
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
javascript實(shí)現(xiàn)根據(jù)時(shí)間段顯示問(wèn)候語(yǔ)的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)根據(jù)時(shí)間段顯示問(wèn)候語(yǔ)的方法,涉及javascript時(shí)間與字符串的相關(guān)操作技巧,需要的朋友可以參考下2015-06-06
javascript頁(yè)面加載完執(zhí)行事件代碼
本篇文章主要是對(duì)javascript頁(yè)面加載完執(zhí)行事件的代碼進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02
基于JS實(shí)現(xiàn)移動(dòng)端左滑刪除功能
最近做個(gè)項(xiàng)目,需要實(shí)現(xiàn)移動(dòng)端左滑刪除功能,當(dāng)時(shí)js代碼將網(wǎng)上找的進(jìn)行刪減優(yōu)化,下面通過(guò)本文給大家分享基于JS實(shí)現(xiàn)移動(dòng)端左滑刪除功能,感興趣的朋友一起看看2017-07-07
layui復(fù)選框限制選擇個(gè)數(shù)的方法
今天小編就為大家分享一篇layui復(fù)選框限制選擇個(gè)數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
JavaScript轉(zhuǎn)換數(shù)據(jù)庫(kù)DateTime字段類(lèi)型方法
下面小編就為大家?guī)?lái)一篇JavaScript轉(zhuǎn)換數(shù)據(jù)庫(kù)DateTime字段類(lèi)型方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
js(JavaScript)實(shí)現(xiàn)TAB標(biāo)簽切換效果的簡(jiǎn)單實(shí)例
本篇文章主要是對(duì)js(JavaScript)實(shí)現(xiàn)TAB標(biāo)簽切換效果的簡(jiǎn)單實(shí)例進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02
JavaScript實(shí)現(xiàn)小球沿正弦曲線(xiàn)運(yùn)動(dòng)
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)小球沿正弦曲線(xiàn)運(yùn)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
模仿JQuery sortable效果 代碼有錯(cuò)但值得看看
模仿JQuery sortable效果 代碼有錯(cuò)但值得看看,因?yàn)闀r(shí)間關(guān)系,需要的朋友可以參考下。2009-11-11
vue 組件銷(xiāo)毀并重置的實(shí)現(xiàn)
這篇文章主要介紹了vue 組件銷(xiāo)毀并重置的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01

