1. 程式人生 > 其它 >微信藍芽連線列印流程

微信藍芽連線列印流程

1、經歷:最近在進行微信藍芽列印功能模組的開發,瞭解了下藍芽連線的全流程,好記性不如爛筆頭,記錄一下

2、感想:

  先來說一下藍芽連線的幾個流程吧,雖然官方有且很詳細了:https://developers.weixin.qq.com/miniprogram/dev/framework/device/ble.html

  首先是藍芽介面卡模組的初始化wx.openBluetoothAdapter,不初始化是無法使用其他藍芽介面的

  初始化後,要開始掃描周圍的藍芽裝置wx.startBluetoothDevicesDiscovery,還要配置掃描到藍芽裝置的監聽方法wx.onBluetoothDeviceFound

  觸發掃描到藍芽裝置的監聽方法後,我們可以呼叫wx.getBluetoothDevices獲取在藍芽模組生效期間所有搜尋到的藍芽裝置

  獲取到devices列表後我們可以在頁面展示出來,當點選要連線的藍芽裝置就取出該裝置device裡面的deviceId進行連線wx.createBLEConnection

  連線成功後我們要停止掃描周圍藍芽裝置wx.stopBluetoothDevicesDiscovery,同時取消監聽藍芽介面卡狀態變化事件wx.offBluetoothDeviceFound,因為掃描裝置比較耗費系統資源

  之後呼叫wx.getBLEDeviceServices獲取連線的藍芽裝置提供的所有服務services,這時遍歷一下如果有service裡的isPrimary是true,說明這個service是主服務,就可以進行通訊,如果多個主服務的話,就按業務需求操作就好了

  選了主服務service後用這個服務的uuid和連線裝置的deviceId去查該服務的所有特徵值wx.getBLEDeviceCharacteristics

  查到這個服務的所有特徵值後進行遍歷通過辨別特徵的properties裡面的write、read、notify來判斷是否具備讀寫、訂閱等功能

  存在properties.read可以用wx.readBLECharacteristicValue,存在properties.notify的話可以監聽訂閱的notify事件,簡單來說就是建立長連線,獲取裝置發出的資料

  存在properties.write的話就可以呼叫wx.writeBLECharacteristicValue

傳入特徵的uuid、服務的uuid和連線裝置的deviceId來寫入二進位制資料資料

  藍芽列印的話,直接把資料轉二進位制傳過去是不行的,印表機是識別不了的,因為js裡面用的Unicode編碼,譯名為萬國碼、國際碼。而印表機裡面用的是GBK編碼,也就是國標碼,編碼不同,所以要經過轉義才行

  轉義完後,傳給印表機的資料也不是隨便傳,除了傳列印資料,還要傳印表機能識別的指令,印表機才能動起來,目前主流的印表機控制語言有三種:Epson公司的ESC命令集、HP公司的PCL命令集、Adobe公司的PostScript(簡稱PS)命令集

  剛好我開發的業務主要是列印票據,而ESC命令集是針式印表機和票據列印領域的事實上的工業標準,所以我用的是ESC命令集

  寫完資料後,印表機就成功打印出票據了,就可以呼叫wx.closeBLEConnection斷開連線了,再呼叫wx.closeBluetoothAdapter關閉藍芽模組,流程就結束了

wx.openBluetoothAdapter                         //初始化藍芽模組
wx.startBluetoothDevicesDiscovery               //開始掃描裝置
wx.onBluetoothDeviceFound                       //監聽發現裝置時的事件
wx.getBluetoothDevices                          //獲取藍芽模組生效期間所有的裝置
wx.createBLEConnection                          //連線裝置
wx.stopBluetoothDevicesDiscovery                //停止掃描裝置
wx.offBluetoothDeviceFound                     //取消監聽發現裝置的事件
wx.getBLEDeviceServices                        //獲取該裝置所有服務
wx.getBLEDeviceCharacteristics                 //獲取單個服務的所有特徵
wx.writeBLECharacteristicValue                 //寫入資料
wx.readBLECharacteristicValue                  //讀取資料
wx.closeBLEConnection                          //斷開連線
wx.closeBluetoothAdapter                       //關閉藍芽模組