没有合适的资源?快使用搜索试试~ 我知道了~
搭建简易蓝牙定位系统的实现方法
22 下载量 151 浏览量
2021-01-05
15:29:34
上传
评论 3
收藏 99KB PDF 举报
温馨提示
本文将简单介绍如何搭建一套蓝牙定位系统,供移动客户端(包括android和iOS)定位。 1、准备设备 所需硬件设备: (1)低功率蓝牙定位器若干(如:10个),网上有卖(单价从几十到几百都有) (2)android设备一台,系统版本4.2以上(SDK版本大于17) (3)iOS设备一台,支持蓝牙4.0 BLE 2、设置蓝牙定位器 移动设备扫描周边低功率蓝牙设备,可以获得蓝牙设备对应的Proximity UUID、Major、Minor等属性信息。而刚采购来的蓝牙设备属性可能都相同,互相区别不开,所以我们需要设置每台设备的属性。 设备厂商都会提供相关手机应用,共用户设置属性信息。给蓝牙设备装上
资源推荐
资源详情
资源评论
搭建简易蓝牙定位系统的实现方法搭建简易蓝牙定位系统的实现方法
本文将简单介绍如何搭建一套蓝牙定位系统,供移动客户端(包括android和iOS)定位。
1、准备设备、准备设备
所需硬件设备:
(1)低功率蓝牙定位器若干(如:10个),网上有卖(单价从几十到几百都有)
(2)android设备一台,系统版本4.2以上(SDK版本大于17)
(3)iOS设备一台,支持蓝牙4.0 BLE
2、设置蓝牙定位器、设置蓝牙定位器
移动设备扫描周边低功率蓝牙设备,可以获得蓝牙设备对应的Proximity UUID、Major、Minor等属性信息。而刚采购来的蓝牙
设备属性可能都相同,互相区别不开,所以我们需要设置每台设备的属性。
设备厂商都会提供相关手机应用,共用户设置属性信息。给蓝牙设备装上电池,打开手机应用,靠近蓝牙设备就能发现,然后
就可以设置其属性值了,其中:
UUID是一个32位的16进制数,表示设备厂商,该字段可以沿用出厂设置
Major表示不同区域(比如:某一楼层、某一地区),取值范围0到6万多
Minor表示不同的设备,取值范围0到6万多
样例:UUID = e2c56db5-dffb-48d2-b060-d0f5a71096e0, Major = 1001, Minor = 10001
每台设备设置完属性后准备一个标签,填上属性信息,贴到设备上,方便以后部署。
3、部署蓝牙设备、部署蓝牙设备
首先,准备目标场地地图数据,可以是基于经纬度坐标,也可以是简单图片坐标,看具体使用情况。
接下来,将蓝牙设备挨个部署到场地指定位置上,顺便记录每个设备地理坐标或图片坐标。
最后,得到一张表格信息,记录着每台蓝牙设备属性和位置信息。这张表就是整个定位系统的指纹库,为定位算法使用。
UUID Major Minor Lat Lon
e2c56db5-dffb-
48d2-b060-
d0f5a71096e0
1001 10001 39.45678 116.23456
e2c56db5-dffb-
48d2-b060-
d0f5a71096e0
1001 10002 39.45674 116.23476
… … … … …
固定蓝牙设备到场地指定位置比较容易,不过记录设备坐标信息可能复杂一点,需要在地图或图片上获得相应位置点。可以开
发一个App从而快速准确地记录位置信息,顺便将相关信息录入指纹库(数据库,比如:SQLite)。
部署蓝牙设备还有一个关注点就是部署间隔。低功率蓝牙设备容易受场地、环境影响,比较不稳定,所以根据场地条件每隔几
米或十几米部署一台蓝牙设备。间隔太大会影响定位精度,不过太密也是资源浪费,不是越密集定位精度越高。
4、客户端、客户端App开发开发
客户端app主要功能就是扫描周围蓝牙设备,将设备列表信息上传定位服务器,从而获得定位效果,并展现给终端用户。
4.1 Android应用开发应用开发
工程所需SDK版本大于17。
1. App所需权限(所需权限(AndroidManifest.xml文件)文件)
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
2. 创建创建beacon数据项类数据项类
public class IBeaconRecord {
public String address; // 设备地址(Mac)
public String uuid; // Proximity UUID
public int major; // Major
public int minor; // Minor
public int rssi; // 场强
}
其中,address属性可以不要,因为iOS设备获取不到该属性!
3. 创建扫描工具类创建扫描工具类
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.example.vo.IBeaconRecord;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothManager;
import android.content.Context;
import android.os.Build;
import android.os.Handler;
public class BLEPositioning {
private Context m_ctx;
private Handler handler;
private BluetoothManager bluetoothManager;
private BluetoothAdapter mBluetoothAdapter;
// 存储蓝牙扫描结果,key - name_address, value - List<IBeaconRecord>
private Map<String, List<IBeaconRecord>> mapBltScanResult;
public BLEPositioning(Context ctx) {
super();
this.m_ctx = ctx;
initParam();
}
/**
* 初始化
*/
private void initParam() {
handler = new Handler();
mapBltScanResult = new HashMap<String, List<IBeaconRecord>>();
// 设备SDK版本大于17(Build.VERSION_CODES.JELLY_BEAN_MR1)才支持BLE 4.0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
bluetoothManager = (BluetoothManager) this.m_ctx
.getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();
}
}
/**
* 开始扫描蓝牙设备
*/
public void startScan()
{
mapBltScanResult.clear();
if (mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()) {
// 5秒后停止扫描,毕竟扫描蓝牙设备比较费电,根据定位及时性自行调整该值
handler.postDelayed(new Runnable() {
@Override
public void run() {
mBluetoothAdapter.stopLeScan(bltScanCallback);
剩余7页未读,继续阅读
资源评论
weixin_38668243
- 粉丝: 5
- 资源: 956
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功