WeChat アプレットに Bluetooth 接続を実装するにはどうすればよいですか? (コード例)

青灯夜游
リリース: 2018-11-13 13:55:24
転載
11179 人が閲覧しました

WeChat アプレットはどのようにして Bluetooth 接続を実装しますか?この記事では、WeChat アプレットで Bluetooth 接続を実装する方法 (手順) を紹介します。困っている友人は参考にしていただければ幸いです。

最近のプロジェクトでは、ミニ プログラムの Bluetooth 機能を使用してハードウェア デバイスに接続し、データ命令を相互に送信する必要がありました。共同デバッグ プロセス中にいくつかの問題が発見されたため、それらを記録することにしました。今後の参考のために!

1. Bluetooth デバイスの初期化

通常、Bluetooth 機能を使用する場合は、特定の Bluetooth デバイスに接続する必要があります。 Bluetooth デバイスの名前を知る必要があります。通常は QR コードをスキャンして接続し、このデバイスの QR コードをスキャンするときに、携帯電話の Bluetooth モジュールを初期化する必要があります。

##2. Bluetooth デバイスの検索

##携帯電話の Bluetooth が正常に初期化されると、周囲の Bluetooth デバイスが検索されます。 ##3. Bluetooth デバイス情報の取得

Bluetooth デバイスを検索した後、検索された Bluetooth デバイス情報を取得する必要があります。WeChat アプレットには、検索された Bluetooth を取得するための

2 つの方法があります。デバイス情報

、次のとおりです: wx.onBluetoothDeviceFound: 新しいデバイスの検出イベントをリッスンします。つまり、このメソッドは、新しい Bluetooth が確立されるまで 1 回呼び出されます。デバイスが見つかりました。

wx.getBluetoothDevices:Bluetooth モジュールの有効期間中に、すでにマシンに接続されているデバイスを含む、検出されたすべての Bluetooth デバイスを取得します

2 つのメソッドを見てください。はじめに それらの違いはわかっていますが、違いを理解していないとどのような問題が発生するのでしょうか? 初めて wx.onBluetoothDeviceFound メソッドを共同デバッグに使用したとき、デバッグ中にデバイスが 1 つしかなかったので、2 番目の Bluetooth デバイスを再スキャンしたときに、すべてが正常であることがわかりました。この方法では、これは新しいデバイスではなく、以前に接続されていたため、または何らかの理由で Bluetooth 経由でデータ コマンドを送信するときにエラーが発生し、再接続する必要があるため、このデバイスが見つかりませんでした。現在のデバイスに再度接続しても、同じ理由で見つかりません。現在のデバイスはこのメソッドの新しいデバイスではないためです。

そこで、wx.getBluetoothDevices メソッド

/**
* 初始化蓝牙设备
*/
  initBlue:function(){
    var that = this;
    wx.openBluetoothAdapter({//调用微信小程序api 打开蓝牙适配器接口
      success: function (res) {
        // console.log(res)
        wx.showToast({
          title: '初始化成功',
          icon: 'success',
          duration: 800
        })
        that.findBlue();//2.0
      },
      fail: function (res) {//如果手机上的蓝牙没有打开,可以提醒用户
        wx.showToast({
          title: '请开启蓝牙',
          icon: 'fails',
          duration: 1000
        })
      }
    })
  },
ログイン後にコピー
#を使用しました。

## 4. Bluetooth デバイスを接続します

前の手順で Bluetooth を見つけたら、Bluetooth デバイスの ID を使用して Bluetooth 接続を確立します

/**
*开始搜索蓝牙设备
*/
findBlue(){
    var that = this
    wx.startBluetoothDevicesDiscovery({
      allowDuplicatesKey: false,
      interval: 0,
      success: function (res) {
       
        wx.showLoading({
          title: '正在搜索设备',
        })
        that.getBlue()//3.0
      }
    })
  },
ログイン後にコピー

#5. サービス uuid の取得必要な Bluetooth デバイスに接続した後、この Bluetooth デバイスのサービス uuid を取得します

/**
  * 获取搜索到的设备信息
 */
  getBlue(){
    var that = this
    wx.getBluetoothDevices({
      success: function(res) {
        wx.hideLoading();
        for (var i = 0; i < res.devices.length; i++){
           /*that.data.inputValue:表示的是需要连接的蓝牙设备ID,简单点来说就是我想要连接这个蓝牙设备,所以我去遍历我搜索到的蓝牙设备中是否有这个ID*/
          if (res.devices[i].name == that.data.inputValue || res.devices[i].localName == that.data.inputValue){
            that.setData({
              deviceId: res.devices[i].deviceId,
              consoleLog: "设备:" + res.devices[i].deviceId,
            })
            that.connetBlue(res.devices[i].deviceId);//4.0
            return;
          }
        }
      },
      fail: function(){
        console.log("搜索蓝牙设备失败")
      }
    })
  },
ログイン後にコピー

6. ID 特性値による Bluetooth デバイスの表示##Bluetooth デバイスがデータの書き込みと送信を行う必要がある場合、特定の特性値が必要です。上記の手順で取得した ID を使用して、デバイスの現在の Bluetooth 特性値を表示できます

/**
  * 获取到设备之后连接蓝牙设备
 */
  connetBlue(deviceId){                    
    var that = this;
    wx.createBLEConnection({
      // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
      deviceId: deviceId,//设备id
      success: function (res) {
        wx.showToast({
          title: &#39;连接成功&#39;,
          icon: &#39;fails&#39;,
          duration: 800
        })
        console.log("连接蓝牙成功!")
        wx.stopBluetoothDevicesDiscovery({
          success: function (res) {
            console.log(&#39;连接蓝牙成功之后关闭蓝牙搜索&#39;);
          }
        })
        that.getServiceId()//5.0
      }
    })
  },
ログイン後にコピー

7. バックグラウンド サーバーから取得した指示

getServiceId(){
    var that = this
    wx.getBLEDeviceServices({
      // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
      deviceId: that.data.deviceId,
      success: function (res) {
        var model = res.services[0]
        that.setData({
          services: model.uuid
        })
        that.getCharacteId()//6.0
      }
    })
  },
ログイン後にコピー

8. バックグラウンドから提供されます取得した命令は Bluetooth デバイスに書き込まれます

getCharacteId(){
    var that = this 
    wx.getBLEDeviceCharacteristics({
      // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
      deviceId: that.data.deviceId,
      // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取
      serviceId: that.data.services,
      success: function (res) {
        for (var i = 0; i < res.characteristics.length; i++) {//2个值
          var model = res.characteristics[i]
          if (model.properties.notify == true) {
            that.setData({
              notifyId: model.uuid//监听的值
            })
            that.startNotice(model.uuid)//7.0
          }
          if (model.properties.write == true){
            that.setData({
              writeId: model.uuid//用来写入的值
            })
          }
        }
      }
    })
  },
ログイン後にコピー
注: 以下は 2 つの変換方法です。使用する必要がある形式
startNotice(uuid){
    var that = this;
    wx.notifyBLECharacteristicValueChange({
      state: true, // 启用 notify 功能
      // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接 
      deviceId: that.data.deviceId,
      // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取
      serviceId: that.data.services,
      // 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取
      characteristicId: uuid,  //第一步 开启监听 notityid  第二步发送指令 write
      success: function (res) {
      
          // 设备返回的方法
          wx.onBLECharacteristicValueChange(function (res) {
              // 此时可以拿到蓝牙设备返回来的数据是一个ArrayBuffer类型数据,所以需要通过一个方法转换成字符串
              var nonceId = that.ab2hex(res.value) 
      //拿到这个值后,肯定要去后台请求服务(当前步骤根据当前需求自己书写),获取下一步操作指令写入到蓝牙设备上去
      
     wx.request({
                    method: "POST",
         
                    data: {
                      xx:nonceId
                    },
                    url: url,
                    success: (res) => {
                      //res.data.data.ciphertext:我这边服务返回来的是16进制的字符串,蓝牙设备是接收不到当前格式的数据的,需要转换成ArrayBuffer
                      that.sendMy(that.string2buffer(res.data.data.ciphertext))//8.0
                      // 服务器返回一个命令  我们要把这个命令写入蓝牙设备
                    }
                   })
  }
    })
  },
ログイン後にコピー
注: 上記は Bluetooth 接続のプロセス全体ですが、実際の使用では間違いなくそれほどスムーズではありません。また、Bluetooth 経由でコマンドを送信するデバイスには次の機能があります。つまり、誰かが現在の Bluetooth デバイスに接続した後は、他の人はこの Bluetooth デバイスを検索できなくなるため、特別な状況を考慮して、コードで Bluetooth 接続を積極的に切断し、他のユーザーが使用できるようにデバイスを解放する必要があります。さらに、Bluetooth デバイスに命令を書き込むときに問題が発生しやすいため、コールバックを複数回書き込む必要があります。成功することは保証されています。

要約: 以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。 。 推奨される関連ビデオ チュートリアル:

WeChat ミニ プログラム開発ドキュメント


WeChat ミニ プログラムの包括的かつ詳細な分析ビデオ チュートリアル

##WeChat アプレット開発 CMS システム ビデオ チュートリアル

以上がWeChat アプレットに Bluetooth 接続を実装するにはどうすればよいですか? (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート