在好例子网,分享、交流、成长!
您当前所在位置:首页Config 开发实例数据库配置 → 微信小程序蓝牙通讯

微信小程序蓝牙通讯

数据库配置

下载此实例
  • 开发语言:Config
  • 实例大小:0.10M
  • 下载次数:108
  • 浏览次数:651
  • 发布时间:2020-02-22
  • 实例类别:数据库配置
  • 发 布 人:ugvbdepxwy
  • 文件格式:.rar
  • 所需积分:2

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】

// pages/bleble/ble.js
var TAG = 'ble';
//监护正在运行的状态: 0,停止或初始状态 1,正在搜索蓝牙,2,正在接收数据
var mJianHuStatus = 0;
//要显示的数据
var mStreee = new Array();
///////////////////////////////////////////////////////////////////////////
////////////只需要在这里更改你的参数即可
////////////////////////////////////////////////////////////////////////////
//主服务或者 外设
var main_uuid = '';
//  开始命令
var start_code = ''
//停止命令 
var stop_code = ''
//需要查找的服务
var write_service = ''
////////////////////////////////////////////////////////////////
//可加我微信好友单聊  w857408545
/////////////////////////////////////////////////////////////
Page({

  /**
   * 页面的初始数据
   */
  data: {
    startStopBtnText: '开始',
    showdata: [],
    toview: 't0'
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    //观察蓝牙状态
    this.watchBleStatus();
    this.setShowData('123');
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    //打开蓝牙适配器
    console.log("页面显示时打开蓝牙适配器");
    this.openBleAdapter();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },
  /////////////////////////////////////////////////////////////
  ////////蓝牙各种操作
  /////////////////////////
  /**
   * 观察蓝牙各种状态 
   */
  watchBleStatus: function () {
    var that = this;
    wx.onBluetoothAdapterStateChange(function (res) {
      //蓝牙已经关闭
      if (res.available == false) {

        that.data.switchStatus = false;
        console.log(TAG, "手机蓝牙关闭")
        that.setShowData("手机蓝牙关闭");
      } else {
        if (res.discovering == true) {
          console.log(TAG, "正在搜索设备..")
          that.setShowData("正在搜索设备..");
        } else {
          console.log(TAG, "蓝牙已打开,未搜索设备");
          that.setShowData("蓝牙已打开,未搜索设备");
          that.data.switchStatus = true;
        }
      }

    })
    wx.onBluetoothDeviceFound(function (devices) {
      that.data.devices = devices.devices[0];
      that.data.deviceID = devices.devices[0].deviceId;
      //断开蓝牙搜索 
      that.stopBleSearch(0);
      //开始进厅设备连接情况
      that.autoConnect();
    })
  },

  /**
   * 搜索设备 
   */
  searchDevice: function (e) {
    var that = this
    if (that.data.switchStatus) {
      //正在搜索蓝牙,还没有搜索到设备,则停止搜索
      if (mJianHuStatus == 1) {
        that.stopBleSearch(1);
        //断开蓝牙连接 
        that.closeBleAdapter();
      } else if (mJianHuStatus == 2)//正在接收数据,则断开蓝牙的链接
      {
        //发送停止监护包
        //停止命令 
        that.writeBleData(stop_code);
        //  console.log("开始断开蓝牙的链接 mJianHuStatus==", mJianHuStatus);
        //断开蓝牙连接 
        wx.closeBLEConnection({
          deviceId: that.data.deviceID,
          success: function (res) {
            mJianHuStatus = 0;
            that.setData(
              {
                startStopBtnText: '开始',
                mBJianHuFinished: true,
              }
            )
            that.closeBleAdapter();
            console.log("蓝牙断开成功", mJianHuStatus);
            that.setShowData("蓝牙断开成功");
          },
        })
      } else if (mJianHuStatus == 0)//开始搜索设备
      {
        //that.setShowData('');
        that.clearbuffer();
        wx.openBluetoothAdapter({
          success: function (res) {
            console.log("打开蓝牙适配成功");
            that.setShowData("打开蓝牙适配成功");
            setTimeout(that.dontfindDevice, 30000);
            ///20s之后搜索不到设备,则停止搜索 
            wx.startBluetoothDevicesDiscovery({
              services: [main_uuid],
              success: function (res) {
                mJianHuStatus = 1;
                that.setData
                  (
                  {
                    startStopBtnColor: '#ff0000',
                    startStopBtnText: '停止'
                  }
                  )
              },
              fail: function (res) {
                mJianHuStatus = 0;
                that.setData
                  (
                  {
                    startStopBtnColor: '#ee6565',
                    startStopBtnText: '开始'
                  }
                  )
              }
            })
          },
        })
      }
    } else {
      console.log('没有打开蓝牙适配器,请打开蓝牙适配器!');
      that.setShowData('没有打开蓝牙适配器,请打开蓝牙适配器!');
    }
  },
  /**
   * @20s 之后如果没有找到设备,则停止搜索 
   */
  dontfindDevice: function () {
    // console.log("触发定时器", mJianHuStatus);
    if (mJianHuStatus == 1) {
      this.stopBleSearch(1);
      console.log("没有找到设备,请重新搜索!", mJianHuStatus);
      that.setShowData('没有找到设备,请重新搜索!');
    }
  },
  /**
   * 向蓝牙通道里面写数据 
   */
  writeBleData: function (data) {
    var that = this;
    var hex = data
    var typedArray = new Uint8Array(hex.match(/[\da-f]{2}/gi).map(function (h) {
      return parseInt(h, 16)
    }))
    var buffer1 = typedArray.buffer
    console.log("发送的数据=="   typedArray)
    that.setShowData("发送的数据=="   typedArray);
    wx.writeBLECharacteristicValue({
      deviceId: that.data.connectedDeviceId,
      serviceId: that.data.serviceId,
      characteristicId: that.data.writecharacId,
      value: buffer1,
      success: function (res) {
        console.log('writeBLECharacteristicValue success data==', res)
      },
      fail: function (res) {
        console.log('writeBLECharacteristicValue failed data==', res)
      },
      complete: function (res) {
        console.log('writeBLECharacteristicValue complete', res)
      }
    })
  },
  /**
   * 打开蓝牙适配器
   */
  openBleAdapter: function () {
    var that = this;
    wx.openBluetoothAdapter({
      success: function (res) {
        that.data.switchStatus = true;
        console.log("打开蓝牙适配器成功");
        that.setShowData("打开蓝牙适配器成功");
      },
      fail: function (res) {
        that.data.switchStatus = false;
        console.log("打开蓝牙适配器失败");
        that.setShowData('打开蓝牙适配器失败');
      }
    })
  },
  /**
   * 停止蓝牙搜索 
   * f:1手动停止搜索设备 0;找到设备后,主动停止搜索设备
   */
  stopBleSearch: function (f) {
    var that = this;
    wx.stopBluetoothDevicesDiscovery({
      success: function (res) {
        if (f == 1) {
          mJianHuStatus = 0;
          that.setData(
            {
              startStopBtnColor: '#ee6565',
              //开始搜索和停止搜索文字
              startStopBtnText: '开始'
            }
          )
        }
      },
      fail: function (res) {
        console.log('停止搜索设备失败', res)
        that.setShowData('停止搜索设备失败');
      }
    })
  },
  /**
   * 关闭蓝牙适配器 
   */
  closeBleAdapter: function () {
    var that = this;
    wx.closeBluetoothAdapter({
      success: function (res) {
        console.log(TAG, "关闭蓝牙适配器成功");
        wx.showToast({
          title: '关闭蓝牙适配器成功',
        })
      },
      fail: function (res) {
        console.log(TAG, "关闭蓝牙适配器失败");
        wx.showToast({
          title: '关闭蓝牙适配器失败',
        })
      }
    })
  },
  /**
   * 自动连接设备
   * */
  autoConnect: function () {
    var that = this
    wx.createBLEConnection({
      deviceId: that.data.deviceID,
      success: function (res) {
        //设备连接成功后 连接服务器
        that.setData({
          connectedDeviceId: that.data.deviceID,
        })
        //获取各种服务
        that.getTargetService();
      },
      fail: function (res) {
        mJianHuStatus = 0;

        that.setData(
          {
            startStopBtnColor: '#ee6565',
            startStopBtnText: '开始'
          }
        )
        that.closeBleAdapter();
        wx.showToast({
          title: '连接设备失败,请重新搜索!',
        })
      }
    })
  },
  /**
   * 获取目标服务
   * **/
  getTargetService: function () {
    var that = this
    wx.getBLEDeviceServices({
      deviceId: that.data.connectedDeviceId,
      success: function (res) {
        var count = res.services.length;
        for (var i = 0; i < count; i  ) {
          //找到相关服务 然后退出(一般以一个服务为主)
          if (res.services[i].uuid.indexOf(write_service) >= 0) {
            that.getTargetCharacteric(res.services[i].uuid);
            break;
          }
        }
      }
    })
  },
  /**
   * 获取目标 特征 
   * **/
  getTargetCharacteric: function (serviceid) {
    var that = this
    wx.getBLEDeviceCharacteristics({
      deviceId: that.data.connectedDeviceId,
      serviceId: serviceid,
      success: function (res) {
        console.log('设置写监听:', res.characteristics[0].uuid)
        that.setData({
          serviceId: serviceid,
          writecharacId: res.characteristics[0].uuid
        })
        //写入开始命令 
        that.writeBleData(start_code);
        setTimeout(function () {
          wx.notifyBLECharacteristicValueChange({
            state: true, // 启用 notify 功能
            deviceId: that.data.connectedDeviceId,
            serviceId: serviceid,
            characteristicId: res.characteristics[0].uuid,
            success: function (res) {
              console.log('监听蓝牙notify服务成功 characteristicId')
              mJianHuStatus = 2;
              that.setData(
                {
                  mBJianHuFinished: false,
                }
              )
              that.recieveequ();
            },
            fail: function (res) {
              mJianHuStatus = 0;
            }
          })
        }, 3000)
      }
    })
  },
  /**
   * 监听蓝牙获取的数据 
   * */
  recieveequ: function () {
    var that = this
    wx.onBLECharacteristicValueChange(function (characteristic) {
      let buffer = characteristic.value
      // console.log("接收数据为:hex=="   Array.prototype.map.call(new Uint8Array(buffer), x => ('00'   x.toString(16)).slice(-2)).join(''))
      var tmpStrr = "接收数据为:hex=="   Array.prototype.map.call(new Uint8Array(buffer), x => ('00'   x.toString(16)).slice(-2)).join('');
      that.setShowData(tmpStrr);
    })
  },
  /**
   * 设置要显示的数据
   */
  setShowData: function (tmpStr) {
    var that = this;
    var tmpddd = {
      txt: tmpStr,
    }
    mStreee.push(tmpddd);
    that.setData(
      {
        showdata: mStreee,
        toview: 't'   (mStreee.length - 1),
      }
    )
  },
  /**
   * 清空数据
   */
  clearbuffer: function () {
    var that = this;
    mStreee = new Array();
    that.setData(
      {
        showdata: mStreee,
        toview: 't0',
      }
    )
  }
})

实例下载地址

微信小程序蓝牙通讯

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警