空余时间简单写了一个微信小程序 ibeacon三点定位。

事先淘宝买了七八个ibeacon小设备,放置在办公司角落。分别设置三个ibeacon的位置坐标点,根据每一个ibeacon到已经开启蓝牙的目标物距离,计算出目标物在当前区域内坐标位置。适用于区域内购物指示。当然,进入该区域事先要打开手机蓝牙。

下面代码:

var app = getApp()
Page({data: {motto: 'Hello World',openBLE:'打开蓝牙设备',startBLEDiscovery:'初始化蓝牙设备',startBLEDevices:'目标定位',reStartSearchBLE:'重置蓝牙',startSearchBLE:'默认空',userInfo: {},deviceId: '',searchFlag:true,deviceRSSI:'',deviceName:'',deviceId:[],advertisServiceUUIDs: [],advertisData:[],canvasPointX:'',canvasPointY:'',avatarUrl:'../index/bg-image.jpg',showPosition:'' },//事件处理函数bindViewTap: function() {wx.navigateTo({url: '../logs/logs'})},onLoad: function () { var that = this//调用应用实例的方法获取全局数据 //that.setData({ deviceId: opt.deviceId })  app.getUserInfo(function(userInfo){//更新数据 that.setData({userInfo:userInfo})//判断兼容性if (wx.openBluetoothAdapter) { //打开蓝牙适配器,如果没有打开 showtoastwx.openBluetoothAdapter({success: function(res){// success//获取本机的蓝牙适配器状态wx.getBluetoothAdapterState({success: function(res){// successthat.setData({searchFlag:true}) },fail: function(res) {// fail that.setData({searchFlag:false})},complete: function(res) {// complete}})},fail: function(res) {// fail 本机是否已经打开蓝牙设备wx.showToast({title:'请打开本机蓝牙设备,重新扫码', duration:10000  })},complete: function(res) {// complete}})} else {// 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示wx.showModal({title: '提示',content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'})}  })}, startBLEDevices: function(){var that = this  wx.startBluetoothDevicesDiscovery({services: [],success: function(res){ //获取本机蓝牙设备状态   // success  that.setData({showPosition:setInterval(that.devicesFunc,1000)})    },fail: function(res) {// fail },complete: function(res) {// complete }})},//  startBLEDevices: function(){//    var that = this//    that.setData({//      showPosition:setInterval(that.devicesFunc,1000)//    }) //  },devicesFunc: function(){var that = this wx.getBluetoothDevices({success: function(res){// console.log(res); var arrayRSSI = new Array();var arraydeviceName = new Array();var arraydeviceId = new Array();// var arrayUUIDs = new Array();var arrayadvertisData = new Array();  var pointADistance = '';var pointBDistance = '';var pointCDistance = ''; for(var i = 0; i<res.devices.length;i++){ //console.log(res.devices[i].name);  if(res.devices[i].name.indexOf('craft')==0){  //console.log(res.devices[i]);arrayRSSI.push(res.devices[i].RSSI);arraydeviceName.push(res.devices[i].name); arraydeviceId[i]= res.devices[i].deviceId;arrayUUIDs[i]= res.devices[i].advertisServiceUUIDs[i];arrayadvertisData[i]= res.devices[i].advertisData   ;调用计算rssi对应距离的函数var iRssi = Math.abs(arrayRSSI[i]);  var power = (iRssi-59)/(10*2.0);  var mm =  Math.pow(10, power); console.log(arraydeviceName[i]+"距离的位置是"+mm+"米");   取01,02,03分别为,(2,0),(2,2),(0,2)固定坐标点,做定位if(res.devices[i].name.indexOf('craft01')==0){var pointARSSi = res.devices[i].RSSI ;var iRssi = Math.abs(pointARSSi);  var power = (iRssi-55)/(10*2.0);  var pointADistance =  Math.pow(10, power);  console.log("a"+pointADistance); console.log(pointARSSi);  }if(res.devices[i].name.indexOf('craft02')==0){var pointBRSSi = res.devices[i].RSSI;var iRssi = Math.abs(pointBRSSi);  var power = (iRssi-55)/(10*2.0);  var pointBDistance = Math.pow(10, power); console.log("b"+pointBDistance);console.log(pointBRSSi);  }if(res.devices[i].name.indexOf('craft03')==0){var pointCRSSi = res.devices[i].RSSI;var iRssi = Math.abs(pointCRSSi);  var power = (iRssi-57)/(10*2.0);   var pointCDistance = Math.pow(10, power);  console.log("c"+pointCDistance); console.log(pointCRSSi);  }  } }  // 从 arrayRSSI 取三个距离定位点最近的ibeacon参与定位if(arrayRSSI.length > 3){//根据arrayRSSI进行信号强弱排序.距离越远rssi值越小for(var i = 0 ; i < arrayRSSI.length ; i ++){for(var j = i+1 ; j< arrayRSSI.length ; j++){if(arrayRSSI[i]<arrayRSSI[j]){var select = arrayRSSI[i];arrayRSSI[i] = arrayRSSI[j];arrayRSSI[j] = select;}} }//获取最近的三个距离for(var i = 0 ; i < 3; i++){if(i==0){ var pointARSSi = res.devices[i].RSSI ;var iRssi = Math.abs(pointARSSi);  var power = (iRssi-55)/(10*2.0);  var pointADistance =  Math.pow(10, power);  console.log("a"+pointADistance); console.log(pointARSSi);  }if(i==1){var pointBRSSi = res.devices[i].RSSI;var iRssi = Math.abs(pointBRSSi);  var power = (iRssi-55)/(10*2.0);  var pointBDistance = Math.pow(10, power); console.log("b"+pointBDistance);console.log(pointBRSSi);  }if(i==2){ var pointCRSSi = res.devices[i].RSSI;var iRssi = Math.abs(pointCRSSi);  var power = (iRssi-57)/(10*2.0);   var pointCDistance = Math.pow(10, power);  console.log("c"+pointCDistance); console.log(pointCRSSi);  }   } } //获取定位点的x和yif(!pointADistance==''&&!pointBDistance==''&&!pointCDistance==''){var pointDX='';var pointDY = '';var p = Math.pow(pointADistance,2)/10-Math.pow(pointBDistance,2)/10;pointDX = 2.5 - p;  var m = Math.pow(pointADistance,2)/10-Math.pow(pointCDistance,2)/10;pointDY = 2.5 - m; console.log('目标所在位置X是'+pointDX);console.log('目标所在位置Y是'+pointDY);if(pointDX > 0 && pointDY > 0){ wx.showToast({title:'欢迎进入25楼craft', duration:4000  }); }that.setData({canvasPointX:pointDX,canvasPointY:pointDY})//创建画布 //计算坐标点在规定canvas上的位置显示var context = wx.createCanvasContext(); context.setStrokeStyle("#00ff00");//a,b,c,d,e,f   a,b起始坐标,c半径,d,e起始和终止角度 context.arc(that.data.canvasPointX*30,that.data.canvasPointY*30,5,0,2*Math.PI);context.fill();wx.drawCanvas({canvasId: 'firstCanvas',actions: context.getActions() // 获取绘图动作数组}) wx.showModal({title:'X轴:'+pointDX+'Y轴:'+pointDY, duration:5000  }); //开始网络请求wx.request({url: 'http://craftww.cn/weixinIbeacon/index.php',data: {},method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT// header: {}, // 设置请求的 headersuccess: function(res){// success},fail: function(res) {// fail},complete: function(res) {// complete}})}else{wx.showToast({title:'正在搜索...', duration:1000  })开始网络请求wx.request({url: 'http://craftww.cn/weixinIbeacon/index.php',data: {},method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT// header: {}, // 设置请求的 headersuccess: function(res){// success},fail: function(res) {// fail},complete: function(res) {// complete}})} },fail: function(res) {// fail},complete: function(res) {// complete}}) } ,//动态显示createList: function(thisName){var that = this that.setData({array:[{deviceDistance:"1"},{deviceDistance:"1"},{deviceDistance:"1"},{deviceDistance:"1"},{deviceDistance:"1"}]}) },reStartSearchBLE: function(){ var that = this//清除本地数据缓存wx.stopBluetoothDevicesDiscovery({success: function(res){// success},fail: function(res) {// fail},complete: function(res) {// complete}})wx.clearStorageSync();clearInterval(that.data.showPosition); console.log(that.data.showPosition);// that.context.clearRect(0,0,canvas.width,canvas.height);//断开蓝牙var that = thiswx.closeBluetoothAdapter({success: function(res){// successconsole.log('重置成功');//打开蓝牙适配器,如果没有打开 showtoastwx.openBluetoothAdapter({success: function(res){// success//获取本机的蓝牙适配器状态wx.getBluetoothAdapterState({success: function(res){// success },fail: function(res) {// fail  },complete: function(res) {// complete}})},fail: function(res) {},complete: function(res) {// complete}})},fail: function(res) {// fail},complete: function(res) {// complete}})}//zheli
})

小程序ibeacon三点定位相关推荐

  1. 微信小程序iBeacon获取问题(wx.onBeaconUpdate不执行)【已解决】

    微信小程序iBeacon获取问题(wx.onBeaconUpdate不执行)[已解决] 问题描述 软件硬件 使用代码 问题现象 解决办法 问题描述 长话短说,使用某公司的iBeacon标签设备,开发微 ...

  2. 微信小程序iBeacon测距及稳定程序的实现

    iBeacon是苹果公司推出的一项低耗能蓝牙技术,由蓝牙设备发射包含指定信息的信号,再由移动设备接收信号,从而实现近场通信.微信小程序2017年开始支持iBeacon,摇一摇附近就是基于iBeacon ...

  3. 微信小程序蓝牙ibeacon_微信小程序iBeacon测距及稳定程序的实现解析

    前言 iBeacon是苹果公司推出的一项低耗能蓝牙技术,由蓝牙设备发射包含指定信息的信号,再由移动设备接收信号,从而实现近场通信.微信小程序2017年开始支持iBeacon,摇一摇附近就是基于iBea ...

  4. 基于ibeacons三点定位(微信小程序)

    本文章分享三点定位核心代码,以及在写的过程中发现的问题 1:三点定位,不是有三个ibeacons就可以一定都连接上,在wx.getBeacons({})就会发现轻易很难拿到三个,所以做测试多买几个ib ...

  5. 微信小程序如何检测接收iBeacon信号

    前话 微信小程序开发带着许多坑,最近就遇到了个需求,检测iBeacon来进行地点签到. (╯▔皿▔)╯ 微信小程序对于iBeacon的文档也写的十分精简,只简单介绍了每个接口的作用,这就导致我以为简单 ...

  6. 微信小程序蓝牙ibeacon_微信开放蓝牙iBeacon接口小程序靠近原生APP功能

    腾讯一直要连接一切,特别是新的物联网浪潮涌来的时候,不管大众重视程度与否,微信已经又走在了我们前面.在物联网中最基础最通用的当属每个人手机上都具有的蓝牙功能.所以,继2014年微信开放了基于低功耗蓝牙 ...

  7. 基于ibeacon蓝牙定位(微信小程序)

    前段时间做定位,查了很多资料,最后感觉ibeacon做定位比较简单,主要微信小程序有对应的接口所以非常简单.需要的硬件ibeacon,这个硬件在淘宝都有,简单的定位一个就可以,复杂就需要根据需求购买了 ...

  8. 【小程序】蓝牙信标ibeacon获取

    最近在研究ibeacon,有一点小结论,分享给大家: 1.小程序获取信标数据有2种方式,可以理解为主动方式和被动方式: 被动方式:onBeaconUpdate,就是等待接收的方式.目前经过测试是同一个 ...

  9. 2021-09-15核芯物联推荐生态合作伙伴莱讯科技#蓝牙AoA微信小程序跨楼层高精度定位导航,支持ibeacon+aoa融合,完美解决ibeacon导航存在的覆盖盲区

    2021-09-15核芯物联推荐生态合作伙伴莱讯科技#蓝牙AoA微信小程序跨楼层高精度定位导航,支持ibeacon+aoa融合,完美解决ibeacon导航存在的覆盖盲区 核芯物联推荐生态合作伙伴莱讯科 ...

最新文章

  1. ISME:微生物网络构建与分析面临的挑战
  2. java随机数语句_Java语言程序设计(七)Math类生成随机数及if语句
  3. java socket回调_Java ServerSocketChannel SocketChannel(回调)
  4. 教你如何找网络上的图片素材
  5. worldwind系列教程
  6. UVC协议CT_ZOOM_RELATIVE_CONTROL选择子放大缩小停止的问题
  7. Android应用开发--MP3音乐播放器代码实现(一),学Android看这就完事了
  8. 运筹学牛顿法c语言源代码,运筹学与MATlab编程.doc
  9. S32K1xx 系列安全手册
  10. 基于ricequant线性回归量化交易
  11. c语言编程利用泰勒级数,C语言程序设计:用泰勒级数计算cos
  12. redis命令行查询某个key值
  13. CDRouter IPv6 Test Case
  14. SAP RETAIL 执行事务代码WRP1,报错-Transaction WRP1 cannot be executed-
  15. zbrush是什么软件
  16. php artisan command,php artisan命令
  17. 关于Centos使用wget下载: 无法解析主机地址问题
  18. asp手机拍照显示_WeX5V3.1手机拍照例子-后台ASP.NET
  19. matlab半实物仿真,半实物仿真系统及半实物仿真方法
  20. 正弦波,三角函数,波形

热门文章

  1. 跨考计算机者艰难的2019自白
  2. 跨考计算机—努力换青春无悔(纪录篇)
  3. 世界上最值钱的初创公司
  4. 弗洛伊德 精神分析学理论
  5. 传统与现代的碰撞——脉学与HRV
  6. 搭建Cacti监控(2)
  7. 【推荐系统】Criteo数据集介绍
  8. mysql mdf ldf_mdf和ldf是什么文件
  9. mdf数据库文件打开
  10. 指甲半月痕的奥秘!!