长寿花 發表於 2019-9-12 17:50:00

微信小程序开发-蓝牙功能开发

<p><strong><span style="font-size: 16px">0. 前言</span></strong><br><span style="font-size: 16px">  这两天刚好了解了一下微信小程序的蓝牙功能。主要用于配网功能。发现微信的小程序蓝牙API已经封装的很好了。编程起来很方便。什么蓝牙知识都不懂的情况下,不到两天就晚上数据的收发了,剩下的就是数据帧格式的定义,当然这部分就不是本次博客的重点。</span><br><strong><span style="font-size: 16px">1. 准备硬件</span></strong><br><span style="font-size: 16px">  这里我准备了CH341SER这个作为USB转串口。用sscom5.13.1 串口工具。由于我不太懂硬件开发。硬件部分都是由公司其他人开发的。我只是负责把环境搭建起来。然后负责我的微信小程序开发。</span><br><img src="https://img2018.cnblogs.com/blog/485067/201909/485067-20190912170942188-1660162724.png" alt=""></p>
<p><img src="https://img2018.cnblogs.com/blog/485067/201909/485067-20190912170956340-1367777669.png" alt=""><br><br><strong><span style="font-size: 16px">2. 开发小程序简单讲解</span></strong><br><strong><span style="font-size: 16px">  </span></strong><span style="font-size: 16px">onLoad 这个一方面是用来获取当前连接的WiFi名称,减少用户输入,另一方面也是用来判断当前是否开启GPS功能。对于Android用户,是需要打开GPS蓝牙功能才能搜索到周围的蓝牙设备。</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>   onLoad: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(options) {
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 0, 1)">    wx.startWifi({
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">      success(res) {
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res.errMsg)
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">      wx.getConnectedWifi({
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>         success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">            console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 0, 1)">            that.setData({
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">            ssid: res.wifi.SSID
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">            })
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">          },
</span><span style="color: rgba(0, 128, 128, 1)">13</span>         fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)">14</span>             <span style="color: rgba(0, 0, 255, 1)">if</span>(res.errCode == 12006<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">            wx.showModal({
</span><span style="color: rgba(0, 128, 128, 1)">16</span>               title: '请打开GPS定位'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">17</span>               content: 'Android手机不打开GPS定位,无法搜索到蓝牙设备.'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">18</span>               showCancel: <span style="color: rgba(0, 0, 255, 1)">false</span>
<span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)">            })
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 0, 1)">            console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">          }
</span><span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 0, 1)">      })
</span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">26</span>   },</pre>
</div>
<p>  <span style="font-size: 16px">搜索蓝牙设备相关代码</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>   searchBleEvent: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(ret){
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> ssid = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.ssid;
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> pass = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.pass;
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">    console.log(ssid, pass);
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> (util.isEmpty(ssid) ||<span style="color: rgba(0, 0, 0, 1)"> util.isEmpty(pass)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>       util.toastError('请输入WiFi名称及密码'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>       <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>   <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.initBLE();
</span><span style="color: rgba(0, 128, 128, 1)">10</span>   },</pre>
</div>
<p>  <span style="font-size: 16px">初始化蓝牙适配器</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>   initBLE: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog("启动蓝牙适配器, 蓝牙初始化"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">    wx.openBluetoothAdapter({
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">      that.findBLE();
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>       fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)">10</span>         util.toastError('请先打开蓝牙'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">13</span>   },</pre>
</div>
<p>  <span style="font-size: 16px">定义搜索设备任务</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>   findBLE: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog("打开蓝牙成功."<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">    wx.startBluetoothDevicesDiscovery({
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>       allowDuplicatesKey: <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>       interval: 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">      wx.showLoading({
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>         title: '正在搜索设备'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">      })
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)">12</span>         delayTimer = setInterval(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 128, 1)">13</span>         that.discoveryBLE() <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">3.0 //这里的discovery需要多次调用</span>
<span style="color: rgba(0, 128, 128, 1)">14</span>         }, 1000<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">15</span>         setTimeout(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)">16</span>         <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (isFound) {
</span><span style="color: rgba(0, 128, 128, 1)">17</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">18</span>         } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)">            wx.hideLoading();
</span><span style="color: rgba(0, 128, 128, 1)">20</span>             console.log("搜索设备超时"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 0, 1)">            wx.stopBluetoothDevicesDiscovery({
</span><span style="color: rgba(0, 128, 128, 1)">22</span>               success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (res) {
</span><span style="color: rgba(0, 128, 128, 1)">23</span>               console.log('连接蓝牙成功之后关闭蓝牙搜索'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">            })
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)">            clearInterval(delayTimer)
</span><span style="color: rgba(0, 128, 128, 1)">27</span> <span style="color: rgba(0, 0, 0, 1)">            wx.showModal({
</span><span style="color: rgba(0, 128, 128, 1)">28</span>               title: '搜索设备超时'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">29</span>               content: '请检查蓝牙设备是否正常工作,Android手机请打开GPS定位.'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">30</span>               showCancel: <span style="color: rgba(0, 0, 255, 1)">false</span>
<span style="color: rgba(0, 128, 128, 1)">31</span> <span style="color: rgba(0, 0, 0, 1)">            })
</span><span style="color: rgba(0, 128, 128, 1)">32</span>             util.toastError("搜索设备超时,请打开GPS定位,再搜索"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">33</span>             <span style="color: rgba(0, 0, 255, 1)">return</span>
<span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 0, 1)">          }
</span><span style="color: rgba(0, 128, 128, 1)">35</span>         }, 15000<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">37</span>       fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)">38</span>         that.printLog("蓝牙设备服务发现失败: " +<span style="color: rgba(0, 0, 0, 1)"> res.errMsg);
</span><span style="color: rgba(0, 128, 128, 1)">39</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">40</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">41</span>   },</pre>
</div>
<p>  <span style="font-size: 16px">搜索设备回调</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>   discoveryBLE: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 0, 1)">    wx.getBluetoothDevices({
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> list =<span style="color: rgba(0, 0, 0, 1)"> res.devices;
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(list);
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>         <span style="color: rgba(0, 0, 255, 1)">if</span>(list.length &lt;= 0<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">10</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> devices =<span style="color: rgba(0, 0, 0, 1)"> [];
</span><span style="color: rgba(0, 128, 128, 1)">11</span>         <span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> i = 0; i &lt; list.length; i++<span style="color: rgba(0, 0, 0, 1)">) {   
</span><span style="color: rgba(0, 128, 128, 1)">12</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">that.data.inputValue:表示的是需要连接的蓝牙设备ID,</span>
<span style="color: rgba(0, 128, 128, 1)">13</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">简单点来说就是我想要连接这个蓝牙设备,</span>
<span style="color: rgba(0, 128, 128, 1)">14</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">所以我去遍历我搜索到的蓝牙设备中是否有这个ID</span>
<span style="color: rgba(0, 128, 128, 1)">15</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> name = list.name ||<span style="color: rgba(0, 0, 0, 1)"> list.localName;
</span><span style="color: rgba(0, 128, 128, 1)">16</span>         <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(util.isEmpty(name)){
</span><span style="color: rgba(0, 128, 128, 1)">17</span>             <span style="color: rgba(0, 0, 255, 1)">continue</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">          }
</span><span style="color: rgba(0, 128, 128, 1)">19</span>         <span style="color: rgba(0, 0, 255, 1)">if</span>(name.indexOf('JL') &gt;= 0 &amp;&amp; list.RSSI != 0<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)">            console.log(list);
</span><span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 0, 1)">            devices.push(list);
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">          }
</span><span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">24</span>         console.log('总共有' + devices.length + "个设备需要设置"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">25</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (devices.length &lt;= 0<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">26</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">27</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">28</span> <span style="color: rgba(0, 0, 0, 1)">      that.connectBLE(devices);
</span><span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">30</span>       fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
</span><span style="color: rgba(0, 128, 128, 1)">31</span>         util.toastError('搜索蓝牙设备失败'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">33</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">34</span>   },</pre>
</div>
<p>  <span style="font-size: 16px">设置可以进行连接的设备</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>   connectBLE: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(devices){
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog('总共有' + devices.length + "个设备需要设置"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">    wx.hideLoading();
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>   isFound = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">    clearInterval(delayTimer);
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">    wx.stopBluetoothDevicesDiscovery({
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (res) {
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>         that.printLog('连接蓝牙成功之后关闭蓝牙搜索'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">12</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">两个的时候需要选择</span>
<span style="color: rgba(0, 128, 128, 1)">13</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> list =<span style="color: rgba(0, 0, 0, 1)"> [];
</span><span style="color: rgba(0, 128, 128, 1)">14</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> i = 0; i &lt; devices.length; i++<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">15</span>       <span style="color: rgba(0, 0, 255, 1)">var</span> name = devices.name ||<span style="color: rgba(0, 0, 0, 1)"> devices.localName;
</span><span style="color: rgba(0, 128, 128, 1)">16</span>       list.push(name + "[" + devices.deviceId + "]"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">18</span>   <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
</span><span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)">      deviceArray: list
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">21</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">默认选择</span>
<span style="color: rgba(0, 128, 128, 1)">22</span>   <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
</span><span style="color: rgba(0, 128, 128, 1)">23</span>       currDeviceID: list
</span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">25</span>   },</pre>
</div>
<p>  <span style="font-size: 16px">选择设备,然后点击对应的配网按钮,创建BLE连接</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>   createBLE: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(deviceId){
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog("连接: [" + deviceId+"]"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.closeBLE(deviceId, <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>       console.log("预先关闭,再打开"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>       setTimeout(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">      wx.createBLEConnection({
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">          deviceId: deviceId,
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>         success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (res) {
</span><span style="color: rgba(0, 128, 128, 1)">10</span>             that.printLog("设备连接成功"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">            that.getBLEServiceId(deviceId);
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">          },
</span><span style="color: rgba(0, 128, 128, 1)">13</span>         fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (res) {
</span><span style="color: rgba(0, 128, 128, 1)">14</span>             that.printLog("设备连接失败" +<span style="color: rgba(0, 0, 0, 1)"> res.errMsg);
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">          }
</span><span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 0, 1)">      })
</span><span style="color: rgba(0, 128, 128, 1)">17</span>       }, 2000<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">    });
</span><span style="color: rgba(0, 128, 128, 1)">19</span>   },</pre>
</div>
<p>  <span style="font-size: 16px">获取蓝牙设备提供的服务UUID(本项目由于只会提供一个服务,就默认选择,实际项目,会自定义这个UUID的前缀或者后缀规则,定义多个不同的服务)</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取服务UUID</span>
<span style="color: rgba(0, 128, 128, 1)"> 2</span>   getBLEServiceId: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(deviceId){
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog("获取设备[" + deviceId + "]服务列表"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 0, 1)">    wx.getBLEDeviceServices({
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">      deviceId: deviceId,
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> services =<span style="color: rgba(0, 0, 0, 1)"> res.services;
</span><span style="color: rgba(0, 128, 128, 1)">10</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (services.length &lt;= 0<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">11</span>         that.printLog("未找到主服务列表"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">12</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">14</span>         that.printLog('找到设备服务列表个数: ' +<span style="color: rgba(0, 0, 0, 1)"> services.length);
</span><span style="color: rgba(0, 128, 128, 1)">15</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (services.length == 1<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">16</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> service = services;
</span><span style="color: rgba(0, 128, 128, 1)">17</span>         that.printLog("服务UUID:["+service.uuid+"] Primary:" +<span style="color: rgba(0, 0, 0, 1)"> service.isPrimary);
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">          that.getBLECharactedId(deviceId, service.uuid);
</span><span style="color: rgba(0, 128, 128, 1)">19</span>         }<span style="color: rgba(0, 0, 255, 1)">else</span>{ <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">多个主服务</span>
<span style="color: rgba(0, 128, 128, 1)">20</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">TODO</span>
<span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">23</span>       fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
</span><span style="color: rgba(0, 128, 128, 1)">24</span>         that.printLog("获取设备服务列表失败" +<span style="color: rgba(0, 0, 0, 1)"> res.errMsg);
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">27</span>   },</pre>
</div>
<p>  <span style="font-size: 16px">获取服务下的特征值(由于这个例子,是包含两个特征值,一个用于读,一个用于写,实际项目,跟上面的服务一样,要定义好特征量UUID的规则)</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>   getBLECharactedId: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(deviceId, serviceId){
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog("获取设备特征值"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">    wx.getBLEDeviceCharacteristics({
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 0, 1)">      deviceId: deviceId,
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">      serviceId: serviceId,
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">这里会获取到两个特征值,一个用来写,一个用来读</span>
<span style="color: rgba(0, 128, 128, 1)">10</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> chars =<span style="color: rgba(0, 0, 0, 1)"> res.characteristics;
</span><span style="color: rgba(0, 128, 128, 1)">11</span>         <span style="color: rgba(0, 0, 255, 1)">if</span>(chars.length &lt;= 0<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">12</span>         that.printLog("未找到设备特征值"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">13</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">15</span>         that.printLog("找到设备特征值个数:" +<span style="color: rgba(0, 0, 0, 1)"> chars.length);
</span><span style="color: rgba(0, 128, 128, 1)">16</span>         <span style="color: rgba(0, 0, 255, 1)">if</span>(chars.length == 2<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">17</span>         <span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">var</span> i=0; i&lt;chars.length; i++<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">18</span>             <span style="color: rgba(0, 0, 255, 1)">var</span> <span style="color: rgba(0, 0, 255, 1)">char</span> =<span style="color: rgba(0, 0, 0, 1)"> chars;
</span><span style="color: rgba(0, 128, 128, 1)">19</span>             that.printLog("特征值[" + <span style="color: rgba(0, 0, 255, 1)">char</span>.uuid + "]"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">20</span>             <span style="color: rgba(0, 0, 255, 1)">var</span> prop = <span style="color: rgba(0, 0, 255, 1)">char</span><span style="color: rgba(0, 0, 0, 1)">.properties;
</span><span style="color: rgba(0, 128, 128, 1)">21</span>             <span style="color: rgba(0, 0, 255, 1)">if</span>(prop.notify == <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">22</span>               that.printLog("该特征值属性: Notify"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">23</span>               that.recvBLECharacterNotice(deviceId, serviceId, <span style="color: rgba(0, 0, 255, 1)">char</span><span style="color: rgba(0, 0, 0, 1)">.uuid);
</span><span style="color: rgba(0, 128, 128, 1)">24</span>             }<span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span>(prop.write == <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">25</span>               that.printLog("该特征值属性: Write"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">26</span>               that.sendBLECharacterNotice(deviceId, serviceId, <span style="color: rgba(0, 0, 255, 1)">char</span><span style="color: rgba(0, 0, 0, 1)">.uuid);
</span><span style="color: rgba(0, 128, 128, 1)">27</span>             }<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">28</span>               that.printLog("该特征值属性: 其他"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">30</span> <span style="color: rgba(0, 0, 0, 1)">          }
</span><span style="color: rgba(0, 128, 128, 1)">31</span>         }<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">32</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">TODO</span>
<span style="color: rgba(0, 128, 128, 1)">33</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">35</span>       fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
</span><span style="color: rgba(0, 128, 128, 1)">36</span>         that.printLog("获取设备特征值失败"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">37</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">38</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">39</span>   },</pre>
</div>
<p>  <span style="font-size: 16px">recv 接收设备发送过来数据</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>   recvBLECharacterNotice: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(deviceId, serviceId, charId){
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">接收设置是否成功</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog("注册Notice 回调函数"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 0, 1)">    wx.notifyBLECharacteristicValueChange({
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">      deviceId: deviceId,
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">      serviceId: serviceId,
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">      characteristicId: charId,
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>       state: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">启用Notify功能</span>
<span style="color: rgba(0, 128, 128, 1)">10</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)">11</span>         wx.onBLECharacteristicValueChange(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">          console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)">13</span>         that.printLog("收到Notify数据: " +<span style="color: rgba(0, 0, 0, 1)"> that.ab2hex(res.value));
</span><span style="color: rgba(0, 128, 128, 1)">14</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">关闭蓝牙</span>
<span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">          wx.showModal({
</span><span style="color: rgba(0, 128, 128, 1)">16</span>             title: '配网成功'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 0, 1)">            content: that.ab2hex(res.value),
</span><span style="color: rgba(0, 128, 128, 1)">18</span>             showCancel: <span style="color: rgba(0, 0, 255, 1)">false</span>
<span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)">          })
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)">      });
</span><span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">22</span>       fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
</span><span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)">24</span>         that.printLog("特征值Notice 接收数据失败: " +<span style="color: rgba(0, 0, 0, 1)"> res.errMsg);
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">27</span>   },</pre>
</div>
<p>  <span style="font-size: 16px">send 小程序发送数据到设备</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>   sendBLECharacterNotice: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (deviceId, serviceId, charId){
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">发送ssid/pass</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog("延时1秒后,发送SSID/PASS"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> cell =<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>       "ssid": <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.ssid,
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>       "pass": <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.pass
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> buffer = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.string2buffer(JSON.stringify(cell));
</span><span style="color: rgba(0, 128, 128, 1)">10</span>   setTimeout(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">      wx.writeBLECharacteristicValue({
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">      deviceId: deviceId,
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">      serviceId: serviceId,
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)">      characteristicId: charId,
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">      value: buffer,
</span><span style="color: rgba(0, 128, 128, 1)">16</span>         success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)">17</span>         that.printLog("发送SSID/PASS 成功"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">19</span>         fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)">          console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)">21</span>         that.printLog("发送失败." +<span style="color: rgba(0, 0, 0, 1)"> res.errMsg);
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">23</span>         complete: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 128, 1)">24</span>         
<span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)">      })
</span><span style="color: rgba(0, 128, 128, 1)">27</span>      
<span style="color: rgba(0, 128, 128, 1)">28</span>   }, 1000<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">29</span>   },</pre>
</div>
<p>  <span style="font-size: 16px">手机端可以同时连接多个蓝牙设备,但是同一个蓝牙设备不能被多次连接,所以需要在每次连接前关闭BLE连接</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>   closeBLE: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(deviceId, callback){
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 0, 1)">    wx.closeBLEConnection({
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">      deviceId: deviceId,
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>         that.printLog("断开设备[" + deviceId + "]成功."<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res)
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>       fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
</span><span style="color: rgba(0, 128, 128, 1)">10</span>         that.printLog("断开设备成功."<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">      complete: callback
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">14</span>   },</pre>
</div>
<p><span style="font-size: 16px">  说明:接收数据和发送数据时,注意BLE限制了发送数据包的大小,现在20byte。具体参考微信小程序官方文档:&nbsp;https://developers.weixin.qq.com/miniprogram/dev/api/device/bluetooth-ble/wx.writeBLECharacteristicValue.html</span></p>
<p>&nbsp;</p>
<p><strong><span style="font-size: 16px">3. </span><span style="font-size: 16px">蓝牙相关的所有JS代码</span></strong></p>
<div class="cnblogs_code"><img id="code_img_closed_7f52b81c-4e5d-4093-99e0-02d7ee4eb8f8" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_7f52b81c-4e5d-4093-99e0-02d7ee4eb8f8" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_7f52b81c-4e5d-4093-99e0-02d7ee4eb8f8" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> pages/bluetoothconfig/bluetoothconfig.js</span>
<span style="color: rgba(0, 128, 128, 1)">2</span> const util = require('../../utils/util.js'<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">3</span>
<span style="color: rgba(0, 128, 128, 1)">4</span> <span style="color: rgba(0, 0, 255, 1)">var</span> delayTimer; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">用来控制是否持续服务发现</span>
<span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 255, 1)">var</span> isFound = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">6</span>
<span style="color: rgba(0, 128, 128, 1)">7</span> <span style="color: rgba(0, 0, 0, 1)">Page({
</span><span style="color: rgba(0, 128, 128, 1)">8</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)">9</span> <span style="color: rgba(0, 128, 0, 1)">   * 页面的初始数据
</span><span style="color: rgba(0, 128, 128, 1)"> 10</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 11</span> <span style="color: rgba(0, 0, 0, 1)">data: {
</span><span style="color: rgba(0, 128, 128, 1)"> 12</span>   ssid: ''<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 13</span>   pass: ''<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 14</span> <span style="color: rgba(0, 0, 0, 1)">    logs: [],
</span><span style="color: rgba(0, 128, 128, 1)"> 15</span> <span style="color: rgba(0, 0, 0, 1)">    deviceArray: [],
</span><span style="color: rgba(0, 128, 128, 1)"> 16</span>   currDeviceID: '请选择...'
<span style="color: rgba(0, 128, 128, 1)"> 17</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)"> 18</span>   onLoad: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(options) {
</span><span style="color: rgba(0, 128, 128, 1)"> 19</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 20</span> <span style="color: rgba(0, 0, 0, 1)">    wx.startWifi({
</span><span style="color: rgba(0, 128, 128, 1)"> 21</span> <span style="color: rgba(0, 0, 0, 1)">      success(res) {
</span><span style="color: rgba(0, 128, 128, 1)"> 22</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res.errMsg)
</span><span style="color: rgba(0, 128, 128, 1)"> 23</span> <span style="color: rgba(0, 0, 0, 1)">      wx.getConnectedWifi({
</span><span style="color: rgba(0, 128, 128, 1)"> 24</span>         success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)"> 25</span> <span style="color: rgba(0, 0, 0, 1)">            console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)"> 26</span> <span style="color: rgba(0, 0, 0, 1)">            that.setData({
</span><span style="color: rgba(0, 128, 128, 1)"> 27</span> <span style="color: rgba(0, 0, 0, 1)">            ssid: res.wifi.SSID
</span><span style="color: rgba(0, 128, 128, 1)"> 28</span> <span style="color: rgba(0, 0, 0, 1)">            })
</span><span style="color: rgba(0, 128, 128, 1)"> 29</span> <span style="color: rgba(0, 0, 0, 1)">          },
</span><span style="color: rgba(0, 128, 128, 1)"> 30</span>         fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)"> 31</span>             <span style="color: rgba(0, 0, 255, 1)">if</span>(res.errCode == 12006<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)"> 32</span> <span style="color: rgba(0, 0, 0, 1)">            wx.showModal({
</span><span style="color: rgba(0, 128, 128, 1)"> 33</span>               title: '请打开GPS定位'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 34</span>               content: 'Android手机不打开GPS定位,无法搜索到蓝牙设备.'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 35</span>               showCancel: <span style="color: rgba(0, 0, 255, 1)">false</span>
<span style="color: rgba(0, 128, 128, 1)"> 36</span> <span style="color: rgba(0, 0, 0, 1)">            })
</span><span style="color: rgba(0, 128, 128, 1)"> 37</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 38</span> <span style="color: rgba(0, 0, 0, 1)">            console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)"> 39</span> <span style="color: rgba(0, 0, 0, 1)">          }
</span><span style="color: rgba(0, 128, 128, 1)"> 40</span> <span style="color: rgba(0, 0, 0, 1)">      })
</span><span style="color: rgba(0, 128, 128, 1)"> 41</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 42</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)"> 43</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)"> 44</span>   bindPickerChange: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(ret){
</span><span style="color: rgba(0, 128, 128, 1)"> 45</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> array = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.deviceArray;
</span><span style="color: rgba(0, 128, 128, 1)"> 46</span> <span style="color: rgba(0, 0, 0, 1)">    console.log(array);
</span><span style="color: rgba(0, 128, 128, 1)"> 47</span>   <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
</span><span style="color: rgba(0, 128, 128, 1)"> 48</span> <span style="color: rgba(0, 0, 0, 1)">      currDeviceID: array
</span><span style="color: rgba(0, 128, 128, 1)"> 49</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)"> 50</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)"> 51</span>   searchBleEvent: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(ret){
</span><span style="color: rgba(0, 128, 128, 1)"> 52</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> ssid = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.ssid;
</span><span style="color: rgba(0, 128, 128, 1)"> 53</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> pass = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.pass;
</span><span style="color: rgba(0, 128, 128, 1)"> 54</span> <span style="color: rgba(0, 0, 0, 1)">    console.log(ssid, pass);
</span><span style="color: rgba(0, 128, 128, 1)"> 55</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> (util.isEmpty(ssid) ||<span style="color: rgba(0, 0, 0, 1)"> util.isEmpty(pass)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 56</span>       util.toastError('请输入WiFi名称及密码'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 57</span>       <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 58</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 59</span>   <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.initBLE();
</span><span style="color: rgba(0, 128, 128, 1)"> 60</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)"> 61</span>   bleConfigEvent: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (ret) {
</span><span style="color: rgba(0, 128, 128, 1)"> 62</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> deviceID = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.currDeviceID;
</span><span style="color: rgba(0, 128, 128, 1)"> 63</span>   console.log("选中:" +<span style="color: rgba(0, 0, 0, 1)"> deviceID);
</span><span style="color: rgba(0, 128, 128, 1)"> 64</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> (util.isEmpty(deviceID) || deviceID == "请选择..."<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)"> 65</span>       util.toastError("请先搜索设备"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 66</span>       <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)"> 67</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 68</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> device = deviceID.split('['<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 69</span>   <span style="color: rgba(0, 0, 255, 1)">if</span>(device.length &lt;= 1<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)"> 70</span>       util.toastError("请先搜索设备"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 71</span>       <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)"> 72</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 73</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> id = device.replace("]", ""<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 74</span> <span style="color: rgba(0, 0, 0, 1)">    console.log(id);
</span><span style="color: rgba(0, 128, 128, 1)"> 75</span>   util.toastError("连接" +<span style="color: rgba(0, 0, 0, 1)"> id);
</span><span style="color: rgba(0, 128, 128, 1)"> 76</span>   <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.createBLE(id);
</span><span style="color: rgba(0, 128, 128, 1)"> 77</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)"> 78</span>
<span style="color: rgba(0, 128, 128, 1)"> 79</span>
<span style="color: rgba(0, 128, 128, 1)"> 80</span>   initBLE: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
</span><span style="color: rgba(0, 128, 128, 1)"> 81</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog("启动蓝牙适配器, 蓝牙初始化"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 82</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 83</span> <span style="color: rgba(0, 0, 0, 1)">    wx.openBluetoothAdapter({
</span><span style="color: rgba(0, 128, 128, 1)"> 84</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)"> 85</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)"> 86</span> <span style="color: rgba(0, 0, 0, 1)">      that.findBLE();
</span><span style="color: rgba(0, 128, 128, 1)"> 87</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)"> 88</span>       fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)"> 89</span>         util.toastError('请先打开蓝牙'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 90</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 91</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)"> 92</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)"> 93</span>   findBLE: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
</span><span style="color: rgba(0, 128, 128, 1)"> 94</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog("打开蓝牙成功."<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 95</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span>
<span style="color: rgba(0, 128, 128, 1)"> 96</span> <span style="color: rgba(0, 0, 0, 1)">    wx.startBluetoothDevicesDiscovery({
</span><span style="color: rgba(0, 128, 128, 1)"> 97</span>       allowDuplicatesKey: <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 98</span>       interval: 0<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 99</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)">100</span> <span style="color: rgba(0, 0, 0, 1)">      wx.showLoading({
</span><span style="color: rgba(0, 128, 128, 1)">101</span>         title: '正在搜索设备'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">102</span> <span style="color: rgba(0, 0, 0, 1)">      })
</span><span style="color: rgba(0, 128, 128, 1)">103</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)">104</span>         delayTimer = setInterval(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 128, 1)">105</span>         that.discoveryBLE() <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">3.0 //这里的discovery需要多次调用</span>
<span style="color: rgba(0, 128, 128, 1)">106</span>         }, 1000<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">107</span>         setTimeout(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)">108</span>         <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (isFound) {
</span><span style="color: rgba(0, 128, 128, 1)">109</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">110</span>         } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">111</span> <span style="color: rgba(0, 0, 0, 1)">            wx.hideLoading();
</span><span style="color: rgba(0, 128, 128, 1)">112</span>             console.log("搜索设备超时"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">113</span> <span style="color: rgba(0, 0, 0, 1)">            wx.stopBluetoothDevicesDiscovery({
</span><span style="color: rgba(0, 128, 128, 1)">114</span>               success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (res) {
</span><span style="color: rgba(0, 128, 128, 1)">115</span>               console.log('连接蓝牙成功之后关闭蓝牙搜索'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">116</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">117</span> <span style="color: rgba(0, 0, 0, 1)">            })
</span><span style="color: rgba(0, 128, 128, 1)">118</span> <span style="color: rgba(0, 0, 0, 1)">            clearInterval(delayTimer)
</span><span style="color: rgba(0, 128, 128, 1)">119</span> <span style="color: rgba(0, 0, 0, 1)">            wx.showModal({
</span><span style="color: rgba(0, 128, 128, 1)">120</span>               title: '搜索设备超时'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">121</span>               content: '请检查蓝牙设备是否正常工作,Android手机请打开GPS定位.'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">122</span>               showCancel: <span style="color: rgba(0, 0, 255, 1)">false</span>
<span style="color: rgba(0, 128, 128, 1)">123</span> <span style="color: rgba(0, 0, 0, 1)">            })
</span><span style="color: rgba(0, 128, 128, 1)">124</span>             util.toastError("搜索设备超时,请打开GPS定位,再搜索"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">125</span>             <span style="color: rgba(0, 0, 255, 1)">return</span>
<span style="color: rgba(0, 128, 128, 1)">126</span> <span style="color: rgba(0, 0, 0, 1)">          }
</span><span style="color: rgba(0, 128, 128, 1)">127</span>         }, 15000<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">128</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">129</span>       fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)">130</span>         that.printLog("蓝牙设备服务发现失败: " +<span style="color: rgba(0, 0, 0, 1)"> res.errMsg);
</span><span style="color: rgba(0, 128, 128, 1)">131</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">132</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">133</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">134</span>   discoveryBLE: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
</span><span style="color: rgba(0, 128, 128, 1)">135</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span>
<span style="color: rgba(0, 128, 128, 1)">136</span> <span style="color: rgba(0, 0, 0, 1)">    wx.getBluetoothDevices({
</span><span style="color: rgba(0, 128, 128, 1)">137</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)">138</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> list =<span style="color: rgba(0, 0, 0, 1)"> res.devices;
</span><span style="color: rgba(0, 128, 128, 1)">139</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(list);
</span><span style="color: rgba(0, 128, 128, 1)">140</span>         <span style="color: rgba(0, 0, 255, 1)">if</span>(list.length &lt;= 0<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">141</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">142</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">143</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> devices =<span style="color: rgba(0, 0, 0, 1)"> [];
</span><span style="color: rgba(0, 128, 128, 1)">144</span>         <span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> i = 0; i &lt; list.length; i++<span style="color: rgba(0, 0, 0, 1)">) {   
</span><span style="color: rgba(0, 128, 128, 1)">145</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">that.data.inputValue:表示的是需要连接的蓝牙设备ID,</span>
<span style="color: rgba(0, 128, 128, 1)">146</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">简单点来说就是我想要连接这个蓝牙设备,</span>
<span style="color: rgba(0, 128, 128, 1)">147</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">所以我去遍历我搜索到的蓝牙设备中是否有这个ID</span>
<span style="color: rgba(0, 128, 128, 1)">148</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> name = list.name ||<span style="color: rgba(0, 0, 0, 1)"> list.localName;
</span><span style="color: rgba(0, 128, 128, 1)">149</span>         <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)">(util.isEmpty(name)){
</span><span style="color: rgba(0, 128, 128, 1)">150</span>             <span style="color: rgba(0, 0, 255, 1)">continue</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">151</span> <span style="color: rgba(0, 0, 0, 1)">          }
</span><span style="color: rgba(0, 128, 128, 1)">152</span>         <span style="color: rgba(0, 0, 255, 1)">if</span>(name.indexOf('JL') &gt;= 0 &amp;&amp; list.RSSI != 0<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">153</span> <span style="color: rgba(0, 0, 0, 1)">            console.log(list);
</span><span style="color: rgba(0, 128, 128, 1)">154</span> <span style="color: rgba(0, 0, 0, 1)">            devices.push(list);
</span><span style="color: rgba(0, 128, 128, 1)">155</span> <span style="color: rgba(0, 0, 0, 1)">          }
</span><span style="color: rgba(0, 128, 128, 1)">156</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">157</span>         console.log('总共有' + devices.length + "个设备需要设置"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">158</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (devices.length &lt;= 0<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">159</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">160</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">161</span> <span style="color: rgba(0, 0, 0, 1)">      that.connectBLE(devices);
</span><span style="color: rgba(0, 128, 128, 1)">162</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">163</span>       fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">() {
</span><span style="color: rgba(0, 128, 128, 1)">164</span>         util.toastError('搜索蓝牙设备失败'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">165</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">166</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">167</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">168</span>   connectBLE: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(devices){
</span><span style="color: rgba(0, 128, 128, 1)">169</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog('总共有' + devices.length + "个设备需要设置"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">170</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">171</span> <span style="color: rgba(0, 0, 0, 1)">    wx.hideLoading();
</span><span style="color: rgba(0, 128, 128, 1)">172</span>   isFound = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">173</span> <span style="color: rgba(0, 0, 0, 1)">    clearInterval(delayTimer);
</span><span style="color: rgba(0, 128, 128, 1)">174</span> <span style="color: rgba(0, 0, 0, 1)">    wx.stopBluetoothDevicesDiscovery({
</span><span style="color: rgba(0, 128, 128, 1)">175</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (res) {
</span><span style="color: rgba(0, 128, 128, 1)">176</span>         that.printLog('连接蓝牙成功之后关闭蓝牙搜索'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">177</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">178</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">179</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">两个的时候需要选择</span>
<span style="color: rgba(0, 128, 128, 1)">180</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> list =<span style="color: rgba(0, 0, 0, 1)"> [];
</span><span style="color: rgba(0, 128, 128, 1)">181</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> i = 0; i &lt; devices.length; i++<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">182</span>       <span style="color: rgba(0, 0, 255, 1)">var</span> name = devices.name ||<span style="color: rgba(0, 0, 0, 1)"> devices.localName;
</span><span style="color: rgba(0, 128, 128, 1)">183</span>       list.push(name + "[" + devices.deviceId + "]"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">184</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">185</span>   <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
</span><span style="color: rgba(0, 128, 128, 1)">186</span> <span style="color: rgba(0, 0, 0, 1)">      deviceArray: list
</span><span style="color: rgba(0, 128, 128, 1)">187</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">188</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">默认选择</span>
<span style="color: rgba(0, 128, 128, 1)">189</span>   <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
</span><span style="color: rgba(0, 128, 128, 1)">190</span>       currDeviceID: list
</span><span style="color: rgba(0, 128, 128, 1)">191</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">192</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">193</span>
<span style="color: rgba(0, 128, 128, 1)">194</span>
<span style="color: rgba(0, 128, 128, 1)">195</span>   createBLE: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(deviceId){
</span><span style="color: rgba(0, 128, 128, 1)">196</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog("连接: [" + deviceId+"]"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">197</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">198</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.closeBLE(deviceId, <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
</span><span style="color: rgba(0, 128, 128, 1)">199</span>       console.log("预先关闭,再打开"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">200</span>       setTimeout(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 128, 1)">201</span> <span style="color: rgba(0, 0, 0, 1)">      wx.createBLEConnection({
</span><span style="color: rgba(0, 128, 128, 1)">202</span> <span style="color: rgba(0, 0, 0, 1)">          deviceId: deviceId,
</span><span style="color: rgba(0, 128, 128, 1)">203</span>         success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (res) {
</span><span style="color: rgba(0, 128, 128, 1)">204</span>             that.printLog("设备连接成功"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">205</span> <span style="color: rgba(0, 0, 0, 1)">            that.getBLEServiceId(deviceId);
</span><span style="color: rgba(0, 128, 128, 1)">206</span> <span style="color: rgba(0, 0, 0, 1)">          },
</span><span style="color: rgba(0, 128, 128, 1)">207</span>         fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (res) {
</span><span style="color: rgba(0, 128, 128, 1)">208</span>             that.printLog("设备连接失败" +<span style="color: rgba(0, 0, 0, 1)"> res.errMsg);
</span><span style="color: rgba(0, 128, 128, 1)">209</span> <span style="color: rgba(0, 0, 0, 1)">          }
</span><span style="color: rgba(0, 128, 128, 1)">210</span> <span style="color: rgba(0, 0, 0, 1)">      })
</span><span style="color: rgba(0, 128, 128, 1)">211</span>       }, 2000<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">212</span> <span style="color: rgba(0, 0, 0, 1)">    });
</span><span style="color: rgba(0, 128, 128, 1)">213</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">214</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取服务UUID</span>
<span style="color: rgba(0, 128, 128, 1)">215</span>   getBLEServiceId: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(deviceId){
</span><span style="color: rgba(0, 128, 128, 1)">216</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog("获取设备[" + deviceId + "]服务列表"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">217</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">218</span> <span style="color: rgba(0, 0, 0, 1)">    wx.getBLEDeviceServices({
</span><span style="color: rgba(0, 128, 128, 1)">219</span> <span style="color: rgba(0, 0, 0, 1)">      deviceId: deviceId,
</span><span style="color: rgba(0, 128, 128, 1)">220</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)">221</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)">222</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> services =<span style="color: rgba(0, 0, 0, 1)"> res.services;
</span><span style="color: rgba(0, 128, 128, 1)">223</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (services.length &lt;= 0<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">224</span>         that.printLog("未找到主服务列表"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">225</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">226</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">227</span>         that.printLog('找到设备服务列表个数: ' +<span style="color: rgba(0, 0, 0, 1)"> services.length);
</span><span style="color: rgba(0, 128, 128, 1)">228</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (services.length == 1<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">229</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> service = services;
</span><span style="color: rgba(0, 128, 128, 1)">230</span>         that.printLog("服务UUID:["+service.uuid+"] Primary:" +<span style="color: rgba(0, 0, 0, 1)"> service.isPrimary);
</span><span style="color: rgba(0, 128, 128, 1)">231</span> <span style="color: rgba(0, 0, 0, 1)">          that.getBLECharactedId(deviceId, service.uuid);
</span><span style="color: rgba(0, 128, 128, 1)">232</span>         }<span style="color: rgba(0, 0, 255, 1)">else</span>{ <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">多个主服务</span>
<span style="color: rgba(0, 128, 128, 1)">233</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">TODO</span>
<span style="color: rgba(0, 128, 128, 1)">234</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">235</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">236</span>       fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
</span><span style="color: rgba(0, 128, 128, 1)">237</span>         that.printLog("获取设备服务列表失败" +<span style="color: rgba(0, 0, 0, 1)"> res.errMsg);
</span><span style="color: rgba(0, 128, 128, 1)">238</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">239</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">240</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">241</span>   getBLECharactedId: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(deviceId, serviceId){
</span><span style="color: rgba(0, 128, 128, 1)">242</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog("获取设备特征值"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">243</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">244</span> <span style="color: rgba(0, 0, 0, 1)">    wx.getBLEDeviceCharacteristics({
</span><span style="color: rgba(0, 128, 128, 1)">245</span> <span style="color: rgba(0, 0, 0, 1)">      deviceId: deviceId,
</span><span style="color: rgba(0, 128, 128, 1)">246</span> <span style="color: rgba(0, 0, 0, 1)">      serviceId: serviceId,
</span><span style="color: rgba(0, 128, 128, 1)">247</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)">248</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)">249</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">这里会获取到两个特征值,一个用来写,一个用来读</span>
<span style="color: rgba(0, 128, 128, 1)">250</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> chars =<span style="color: rgba(0, 0, 0, 1)"> res.characteristics;
</span><span style="color: rgba(0, 128, 128, 1)">251</span>         <span style="color: rgba(0, 0, 255, 1)">if</span>(chars.length &lt;= 0<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">252</span>         that.printLog("未找到设备特征值"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">253</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">254</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">255</span>         that.printLog("找到设备特征值个数:" +<span style="color: rgba(0, 0, 0, 1)"> chars.length);
</span><span style="color: rgba(0, 128, 128, 1)">256</span>         <span style="color: rgba(0, 0, 255, 1)">if</span>(chars.length == 2<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">257</span>         <span style="color: rgba(0, 0, 255, 1)">for</span>(<span style="color: rgba(0, 0, 255, 1)">var</span> i=0; i&lt;chars.length; i++<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">258</span>             <span style="color: rgba(0, 0, 255, 1)">var</span> <span style="color: rgba(0, 0, 255, 1)">char</span> =<span style="color: rgba(0, 0, 0, 1)"> chars;
</span><span style="color: rgba(0, 128, 128, 1)">259</span>             that.printLog("特征值[" + <span style="color: rgba(0, 0, 255, 1)">char</span>.uuid + "]"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">260</span>             <span style="color: rgba(0, 0, 255, 1)">var</span> prop = <span style="color: rgba(0, 0, 255, 1)">char</span><span style="color: rgba(0, 0, 0, 1)">.properties;
</span><span style="color: rgba(0, 128, 128, 1)">261</span>             <span style="color: rgba(0, 0, 255, 1)">if</span>(prop.notify == <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">262</span>               that.printLog("该特征值属性: Notify"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">263</span>               that.recvBLECharacterNotice(deviceId, serviceId, <span style="color: rgba(0, 0, 255, 1)">char</span><span style="color: rgba(0, 0, 0, 1)">.uuid);
</span><span style="color: rgba(0, 128, 128, 1)">264</span>             }<span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span>(prop.write == <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">265</span>               that.printLog("该特征值属性: Write"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">266</span>               that.sendBLECharacterNotice(deviceId, serviceId, <span style="color: rgba(0, 0, 255, 1)">char</span><span style="color: rgba(0, 0, 0, 1)">.uuid);
</span><span style="color: rgba(0, 128, 128, 1)">267</span>             }<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">268</span>               that.printLog("该特征值属性: 其他"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">269</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">270</span> <span style="color: rgba(0, 0, 0, 1)">          }
</span><span style="color: rgba(0, 128, 128, 1)">271</span>         }<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)">272</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">TODO</span>
<span style="color: rgba(0, 128, 128, 1)">273</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">274</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">275</span>       fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
</span><span style="color: rgba(0, 128, 128, 1)">276</span>         that.printLog("获取设备特征值失败"<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">277</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">278</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">279</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">280</span>   recvBLECharacterNotice: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(deviceId, serviceId, charId){
</span><span style="color: rgba(0, 128, 128, 1)">281</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">接收设置是否成功</span>
<span style="color: rgba(0, 128, 128, 1)">282</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog("注册Notice 回调函数"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">283</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">284</span> <span style="color: rgba(0, 0, 0, 1)">    wx.notifyBLECharacteristicValueChange({
</span><span style="color: rgba(0, 128, 128, 1)">285</span> <span style="color: rgba(0, 0, 0, 1)">      deviceId: deviceId,
</span><span style="color: rgba(0, 128, 128, 1)">286</span> <span style="color: rgba(0, 0, 0, 1)">      serviceId: serviceId,
</span><span style="color: rgba(0, 128, 128, 1)">287</span> <span style="color: rgba(0, 0, 0, 1)">      characteristicId: charId,
</span><span style="color: rgba(0, 128, 128, 1)">288</span>       state: <span style="color: rgba(0, 0, 255, 1)">true</span>, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">启用Notify功能</span>
<span style="color: rgba(0, 128, 128, 1)">289</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)">290</span>         wx.onBLECharacteristicValueChange(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
</span><span style="color: rgba(0, 128, 128, 1)">291</span> <span style="color: rgba(0, 0, 0, 1)">          console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)">292</span>         that.printLog("收到Notify数据: " +<span style="color: rgba(0, 0, 0, 1)"> that.ab2hex(res.value));
</span><span style="color: rgba(0, 128, 128, 1)">293</span>         <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">关闭蓝牙</span>
<span style="color: rgba(0, 128, 128, 1)">294</span> <span style="color: rgba(0, 0, 0, 1)">          wx.showModal({
</span><span style="color: rgba(0, 128, 128, 1)">295</span>             title: '配网成功'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">296</span> <span style="color: rgba(0, 0, 0, 1)">            content: that.ab2hex(res.value),
</span><span style="color: rgba(0, 128, 128, 1)">297</span>             showCancel: <span style="color: rgba(0, 0, 255, 1)">false</span>
<span style="color: rgba(0, 128, 128, 1)">298</span> <span style="color: rgba(0, 0, 0, 1)">          })
</span><span style="color: rgba(0, 128, 128, 1)">299</span> <span style="color: rgba(0, 0, 0, 1)">      });
</span><span style="color: rgba(0, 128, 128, 1)">300</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">301</span>       fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
</span><span style="color: rgba(0, 128, 128, 1)">302</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)">303</span>         that.printLog("特征值Notice 接收数据失败: " +<span style="color: rgba(0, 0, 0, 1)"> res.errMsg);
</span><span style="color: rgba(0, 128, 128, 1)">304</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">305</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">306</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">307</span>   sendBLECharacterNotice: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (deviceId, serviceId, charId){
</span><span style="color: rgba(0, 128, 128, 1)">308</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">发送ssid/pass</span>
<span style="color: rgba(0, 128, 128, 1)">309</span>   <span style="color: rgba(0, 0, 255, 1)">this</span>.printLog("延时1秒后,发送SSID/PASS"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">310</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">311</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> cell =<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">312</span>       "ssid": <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.ssid,
</span><span style="color: rgba(0, 128, 128, 1)">313</span>       "pass": <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.pass
</span><span style="color: rgba(0, 128, 128, 1)">314</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">315</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> buffer = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.string2buffer(JSON.stringify(cell));
</span><span style="color: rgba(0, 128, 128, 1)">316</span>   setTimeout(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 128, 1)">317</span> <span style="color: rgba(0, 0, 0, 1)">      wx.writeBLECharacteristicValue({
</span><span style="color: rgba(0, 128, 128, 1)">318</span> <span style="color: rgba(0, 0, 0, 1)">      deviceId: deviceId,
</span><span style="color: rgba(0, 128, 128, 1)">319</span> <span style="color: rgba(0, 0, 0, 1)">      serviceId: serviceId,
</span><span style="color: rgba(0, 128, 128, 1)">320</span> <span style="color: rgba(0, 0, 0, 1)">      characteristicId: charId,
</span><span style="color: rgba(0, 128, 128, 1)">321</span> <span style="color: rgba(0, 0, 0, 1)">      value: buffer,
</span><span style="color: rgba(0, 128, 128, 1)">322</span>         success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)">323</span>         that.printLog("发送SSID/PASS 成功"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">324</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">325</span>         fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
</span><span style="color: rgba(0, 128, 128, 1)">326</span> <span style="color: rgba(0, 0, 0, 1)">          console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)">327</span>         that.printLog("发送失败." +<span style="color: rgba(0, 0, 0, 1)"> res.errMsg);
</span><span style="color: rgba(0, 128, 128, 1)">328</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">329</span>         complete: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 128, 1)">330</span>         
<span style="color: rgba(0, 128, 128, 1)">331</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">332</span> <span style="color: rgba(0, 0, 0, 1)">      })
</span><span style="color: rgba(0, 128, 128, 1)">333</span>      
<span style="color: rgba(0, 128, 128, 1)">334</span>   }, 1000<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">335</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">336</span>
<span style="color: rgba(0, 128, 128, 1)">337</span>   closeBLE: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(deviceId, callback){
</span><span style="color: rgba(0, 128, 128, 1)">338</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">339</span> <span style="color: rgba(0, 0, 0, 1)">    wx.closeBLEConnection({
</span><span style="color: rgba(0, 128, 128, 1)">340</span> <span style="color: rgba(0, 0, 0, 1)">      deviceId: deviceId,
</span><span style="color: rgba(0, 128, 128, 1)">341</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)">342</span>         that.printLog("断开设备[" + deviceId + "]成功."<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">343</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res)
</span><span style="color: rgba(0, 128, 128, 1)">344</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">345</span>       fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res){
</span><span style="color: rgba(0, 128, 128, 1)">346</span>         that.printLog("断开设备成功."<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">347</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">348</span> <span style="color: rgba(0, 0, 0, 1)">      complete: callback
</span><span style="color: rgba(0, 128, 128, 1)">349</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">350</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">351</span>   
<span style="color: rgba(0, 128, 128, 1)">352</span>
<span style="color: rgba(0, 128, 128, 1)">353</span>
<span style="color: rgba(0, 128, 128, 1)">354</span>
<span style="color: rgba(0, 128, 128, 1)">355</span>   printLog: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(msg){
</span><span style="color: rgba(0, 128, 128, 1)">356</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> logs = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.data.logs;
</span><span style="color: rgba(0, 128, 128, 1)">357</span> <span style="color: rgba(0, 0, 0, 1)">    logs.push(msg);
</span><span style="color: rgba(0, 128, 128, 1)">358</span>   <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({ logs: logs })
</span><span style="color: rgba(0, 128, 128, 1)">359</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">360</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)">361</span> <span style="color: rgba(0, 128, 0, 1)">   * 将字符串转换成ArrayBufer
</span><span style="color: rgba(0, 128, 128, 1)">362</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">363</span> <span style="color: rgba(0, 0, 0, 1)">string2buffer(str) {
</span><span style="color: rgba(0, 128, 128, 1)">364</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> (!str) <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">365</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> val = ""<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">366</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> i = 0; i &lt; str.length; i++<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">367</span>       val += str.charCodeAt(i).toString(16<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">368</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">369</span> <span style="color: rgba(0, 0, 0, 1)">    console.log(val);
</span><span style="color: rgba(0, 128, 128, 1)">370</span>   str =<span style="color: rgba(0, 0, 0, 1)"> val;
</span><span style="color: rgba(0, 128, 128, 1)">371</span>   val = ""<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">372</span>   let length =<span style="color: rgba(0, 0, 0, 1)"> str.length;
</span><span style="color: rgba(0, 128, 128, 1)">373</span>   let index = 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">374</span>   let array =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">375</span>   <span style="color: rgba(0, 0, 255, 1)">while</span> (index &lt;<span style="color: rgba(0, 0, 0, 1)"> length) {
</span><span style="color: rgba(0, 128, 128, 1)">376</span>       array.push(str.substring(index, index + 2<span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)">377</span>       index = index + 2<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">378</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">379</span>   val = array.join(","<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">380</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 将16进制转化为ArrayBuffer</span>
<span style="color: rgba(0, 128, 128, 1)">381</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">new</span> Uint8Array(val.match(/[\da-f]{2}/gi).map(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (h) {
</span><span style="color: rgba(0, 128, 128, 1)">382</span>       <span style="color: rgba(0, 0, 255, 1)">return</span> parseInt(h, 16<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">383</span> <span style="color: rgba(0, 0, 0, 1)">    })).buffer
</span><span style="color: rgba(0, 128, 128, 1)">384</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">385</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)">386</span> <span style="color: rgba(0, 128, 0, 1)">   * 将ArrayBuffer转换成字符串
</span><span style="color: rgba(0, 128, 128, 1)">387</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">388</span> <span style="color: rgba(0, 0, 0, 1)">ab2hex(buffer) {
</span><span style="color: rgba(0, 128, 128, 1)">389</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> hexArr =<span style="color: rgba(0, 0, 0, 1)"> Array.prototype.map.call(
</span><span style="color: rgba(0, 128, 128, 1)">390</span>       <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Uint8Array(buffer),
</span><span style="color: rgba(0, 128, 128, 1)">391</span>       <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (bit) {
</span><span style="color: rgba(0, 128, 128, 1)">392</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> ('00' + bit.toString(16)).slice(-2<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">393</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">394</span> <span style="color: rgba(0, 0, 0, 1)">    )
</span><span style="color: rgba(0, 128, 128, 1)">395</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> hexArr.join(''<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">396</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">397</span>   inputSSID: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)">398</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> ssid =<span style="color: rgba(0, 0, 0, 1)"> res.detail.value;
</span><span style="color: rgba(0, 128, 128, 1)">399</span>   <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
</span><span style="color: rgba(0, 128, 128, 1)">400</span> <span style="color: rgba(0, 0, 0, 1)">      ssid: ssid
</span><span style="color: rgba(0, 128, 128, 1)">401</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">402</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">403</span>   inputPASS: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(res) {
</span><span style="color: rgba(0, 128, 128, 1)">404</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> pass =<span style="color: rgba(0, 0, 0, 1)"> res.detail.value;
</span><span style="color: rgba(0, 128, 128, 1)">405</span>   <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
</span><span style="color: rgba(0, 128, 128, 1)">406</span> <span style="color: rgba(0, 0, 0, 1)">      pass: pass
</span><span style="color: rgba(0, 128, 128, 1)">407</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">408</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">409</span>
<span style="color: rgba(0, 128, 128, 1)">410</span> })</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>&nbsp;<span style="font-size: 16px">//补充util.js</span></p>
<div class="cnblogs_code"><img id="code_img_closed_a61b3c1d-3091-4658-b113-2a6d113a6113" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_a61b3c1d-3091-4658-b113-2a6d113a6113" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_a61b3c1d-3091-4658-b113-2a6d113a6113" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> const formatTime = date =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>   const year =<span style="color: rgba(0, 0, 0, 1)"> date.getFullYear()
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>   const month = date.getMonth() + 1
<span style="color: rgba(0, 128, 128, 1)"> 4</span>   const day =<span style="color: rgba(0, 0, 0, 1)"> date.getDate()
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>   const hour =<span style="color: rgba(0, 0, 0, 1)"> date.getHours()
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>   const minute =<span style="color: rgba(0, 0, 0, 1)"> date.getMinutes()
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>   const second =<span style="color: rgba(0, 0, 0, 1)"> date.getSeconds()
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> .map(formatNumber).join('/') + ' ' + .map(formatNumber).join(':'<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">11</span>
<span style="color: rgba(0, 128, 128, 1)">12</span> const formatNumber = n =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">13</span>   n =<span style="color: rgba(0, 0, 0, 1)"> n.toString()
</span><span style="color: rgba(0, 128, 128, 1)">14</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> n ? n : '0' +<span style="color: rgba(0, 0, 0, 1)"> n
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">16</span>
<span style="color: rgba(0, 128, 128, 1)">17</span> const isEmpty = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(str){
</span><span style="color: rgba(0, 128, 128, 1)">18</span>   <span style="color: rgba(0, 0, 255, 1)">if</span>(str == <span style="color: rgba(0, 0, 255, 1)">null</span> || str == undefined || str == ""<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)">19</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">21</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">23</span>
<span style="color: rgba(0, 128, 128, 1)">24</span> const randomWord = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(range){
</span><span style="color: rgba(0, 128, 128, 1)">25</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> str = ""<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">26</span>   arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'<span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 128, 128, 1)">27</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 随机产生</span>
<span style="color: rgba(0, 128, 128, 1)">28</span>   <span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> i = 0; i &lt; range; i++<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">29</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> pos = Math.round(Math.random() * (arr.length - 1<span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 128, 1)">30</span>   str +=<span style="color: rgba(0, 0, 0, 1)"> arr;
</span><span style="color: rgba(0, 128, 128, 1)">31</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">32</span>   <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> str;
</span><span style="color: rgba(0, 128, 128, 1)">33</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">34</span>
<span style="color: rgba(0, 128, 128, 1)">35</span> const toastServerError = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 128, 1)">36</span> <span style="color: rgba(0, 0, 0, 1)">wx.showToast({
</span><span style="color: rgba(0, 128, 128, 1)">37</span>   title: '服务器异常,请稍后重试!'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">38</span>   icon: 'none'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">39</span>   duration: 1200<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">40</span>   mask: <span style="color: rgba(0, 0, 255, 1)">true</span>
<span style="color: rgba(0, 128, 128, 1)">41</span> <span style="color: rgba(0, 0, 0, 1)">})
</span><span style="color: rgba(0, 128, 128, 1)">42</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">43</span> const toastError = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(info){
</span><span style="color: rgba(0, 128, 128, 1)">44</span> <span style="color: rgba(0, 0, 0, 1)">wx.showToast({
</span><span style="color: rgba(0, 128, 128, 1)">45</span> <span style="color: rgba(0, 0, 0, 1)">    title: info,
</span><span style="color: rgba(0, 128, 128, 1)">46</span>   icon: 'none'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">47</span>   duration: 1200<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">48</span>   mask: <span style="color: rgba(0, 0, 255, 1)">true</span>
<span style="color: rgba(0, 128, 128, 1)">49</span> <span style="color: rgba(0, 0, 0, 1)">})
</span><span style="color: rgba(0, 128, 128, 1)">50</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">51</span>
<span style="color: rgba(0, 128, 128, 1)">52</span> module.exports =<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">53</span> <span style="color: rgba(0, 0, 0, 1)">formatTime: formatTime,
</span><span style="color: rgba(0, 128, 128, 1)">54</span> <span style="color: rgba(0, 0, 0, 1)">isEmpty: isEmpty,
</span><span style="color: rgba(0, 128, 128, 1)">55</span> <span style="color: rgba(0, 0, 0, 1)">toastServerError: toastServerError,
</span><span style="color: rgba(0, 128, 128, 1)">56</span> <span style="color: rgba(0, 0, 0, 1)">toastError: toastError,
</span><span style="color: rgba(0, 128, 128, 1)">57</span> <span style="color: rgba(0, 0, 0, 1)">randomWord: randomWord
</span><span style="color: rgba(0, 128, 128, 1)">58</span> }</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p><span style="font-size: 16px">&nbsp;//补充分包代码</span></p>
<div class="cnblogs_code"><img id="code_img_closed_baf9b83a-177f-4054-b835-6762b51655fe" class="code_img_closed" src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" alt=""><img id="code_img_opened_baf9b83a-177f-4054-b835-6762b51655fe" class="code_img_opened" style="display: none" src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" alt="">
<div id="cnblogs_code_open_baf9b83a-177f-4054-b835-6762b51655fe" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 统一发送数据,带分包 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 2</span>   sendBLEData: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (deviceId, serviceId, charId, array){
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> that = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>   <span style="color: rgba(0, 0, 255, 1)">if</span>(array.length &lt;= 0<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>       that.printLog("发送SSID/PASS 完成"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>       <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> list = array.splice(0, 20<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> buffer = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Uint8Array(list).buffer;
</span><span style="color: rgba(0, 128, 128, 1)">10</span>
<span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">    wx.writeBLECharacteristicValue({
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 0, 1)">      deviceId: deviceId,
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">      serviceId: serviceId,
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)">      characteristicId: charId,
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 0, 1)">      value: buffer,
</span><span style="color: rgba(0, 128, 128, 1)">16</span>       success: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (res) {
</span><span style="color: rgba(0, 128, 128, 1)">17</span>         that.printLog("发送SSID/PASS 分包发送"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)">      that.sendBLEData(deviceId, serviceId, charId, array);
</span><span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">20</span>       fail: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (res) {
</span><span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res);
</span><span style="color: rgba(0, 128, 128, 1)">22</span>         that.printLog("发送失败." +<span style="color: rgba(0, 0, 0, 1)"> res.errMsg);
</span><span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 0, 1)">      },
</span><span style="color: rgba(0, 128, 128, 1)">24</span>       complete: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)">25</span>
<span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">27</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)">28</span>   },</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>&nbsp;</p>
<p><strong><span style="font-size: 16px">4. 运行时截图</span></strong></p>
<p><span style="font-size: 16px">&nbsp;<img src="https://img2018.cnblogs.com/blog/485067/201909/485067-20190912174017333-1816084703.jpg" alt="" width="300" height="540">&nbsp;<img src="https://img2018.cnblogs.com/blog/485067/201909/485067-20190912174103154-210399287.jpg" alt="" width="300" height="540">&nbsp;<img src="https://img2018.cnblogs.com/blog/485067/201909/485067-20190912174144519-445692130.jpg" alt="" width="300" height="540"></span></p>
<p><img src="https://img2018.cnblogs.com/blog/485067/201909/485067-20190912174305668-177266684.png" alt=""></p>
<p><span style="font-size: 16px">&nbsp;</span></p>
<p><br><span style="font-size: 14px">工具下载地址:</span></p>
<p><span style="font-size: 14px">  https://files.cnblogs.com/files/wunaozai/sscom5.13.1.zip</span></p>
<p><span style="font-size: 14px">  https://files.cnblogs.com/files/wunaozai/CH341SER_64bit.zip</span></p>
<p><span style="font-size: 14px">源代码下载 :</span></p>
<p><span style="font-size: 14px">  https://files.cnblogs.com/files/wunaozai/bluetoothconfig.rar</span></p>
<p><span style="font-size: 14px">参考资料:</span></p>
<p><span style="font-size: 14px">  https://www.cnblogs.com/guhonghao/p/9947144.html</span></p>
<p><span style="font-size: 14px">本文地址:</span></p>
<p><span style="font-size: 14px">&nbsp;  https://www.cnblogs.com/wunaozai/p/11512874.html</span></p>

</div>
<div id="MySignature" role="contentinfo">
    <table style="background: rgb(230, 250, 230); padding: 10px 10px 10px 10px; border: 1px dashed rgb(224, 224, 224); font-family: 微软雅黑; font-size: 13px">
    <tbody><tr><td>
      作者:无脑仔的小明 <br>
      出处:http://www.cnblogs.com/wunaozai/ <br>
      本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 <br>
      如果文中有什么错误,欢迎指出。以免更多的人被误导。有需要沟通的,可以站内私信,文章留言,或者关注“无脑仔的小明”公众号私信我。一定尽力回答。 <br>
    </td>
    <td align="right">
      <div id="qr_bg"></div>
    </td>
</tr></tbody></table><br><br>
来源:https://www.cnblogs.com/wunaozai/p/11512874.html
頁: [1]
查看完整版本: 微信小程序开发-蓝牙功能开发