Unity连接ble蓝牙脉搏心率设备
公司的一个项目的生理设备数据采集模块,用的是Bluetooth+LE+for+iOS+and+Android+v2.3这个插件开发。
- 1.蓝牙初始化
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public void InitBT() { BluetoothLEHardwareInterface.Initialize(true, false, () => { Show("蓝牙初始化成功");//初始化成功执行回调 Invoke("FindDevice", 0.5f); }, (error) => { Show("请打开蓝牙");//初始化失败的回调响应 }); }
这里两个回调分别初始化成功失败执行,目前我只发现手机蓝牙没开会导致初始化失败,初始化成功延迟执行搜索方法,这里如果不延迟执行的话搜索设备可能会出问题,延迟0.1 0.5即可。
- 2 .蓝牙搜索
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14public void FindDevice() { BluetoothLEHardwareInterface.ScanForPeripheralsWithServices(null, (address, name) => { //扫描处理,加入设备列表 AddPeripheral(name, address); }, (address, name, rssi, advertisingInfo) => { //txt.text = "advertisingInfo" +name ; //扫描处理,加入设备列表 AddPeripheral(name, address); }); }
搜索所有设备,将设备的名字与地址拿到
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public void AddPeripheral(string name, string address) { bleName = name.ToString(); bleAddress = address.ToString(); if (bleName == "BerryMed") { BluetoothLEHardwareInterface.StopScan(); ConnectBluetooth(); } }
将搜索到的设备信息与我们需要的设备比较,看是否是我们需要连接的设备,当然这里也可以将信息显示出来给用户选择连接。
- 3.连接设备
复制代码
1
2
3
4
5
6
7
8
9
10
11
12public void ConnectBluetooth() { Show("开始连接"); BluetoothLEHardwareInterface.ConnectToPeripheral(bleAddress, null, null, (address, serviceUUID, characteristicUUID) => { SubscribeCharacteristicWithDeviceAddress(); }); }
连接我们需要的设备,并通过设备的UUID和服务的UUID订阅蓝牙的服务,UUID如果设备方没有提供,可自行通过蓝牙调试助手获取。
- 4.接收数据
复制代码
1
2
3
4
5
6
7private void SubscribeCharacteristicWithDeviceAddress() { BluetoothLEHardwareInterface.SubscribeCharacteristicWithDeviceAddress(bleAddress, ServiceUUID, SubscribeCharacteristic, delegate { }, OnCharacteristicNotification); }
订阅蓝牙服务之后我们就可以进行我们需要的数据操作了,OnCharacteristicNotification会返回接收到的数据,其实具体的数据接发模式还有很多,这里看我的项目需求和设备类型是这样的,更多的可以去查蓝牙的模式。
- 5.数据解析
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41private void OnCharacteristicNotification(string arg1, string arg2, byte[] arg3) { //Show("接收到数据"); for (int i = 0; i < arg3.Length; i++) { buffer[index] = arg3[i]; index++; if (index==buffer.Length) { spo2 = buffer[4]; heat= buffer[3] | ((buffer[2] & 0x40) << 1); pi = buffer[0] & 0x0f; vec = buffer[1] / 2; t.text ="脉搏速率: "+heat.ToString()+"n"+"血氧浓度SPO2: "+spo2+"n"+"血流灌注指数PI: "+pi + "n" + "波形图值: " + vec; DrawLine(vec); index = 0; } } //StringBuilder hex = new StringBuilder(arg3.Length * 2); //foreach (byte b in arg3) //{ // hex.AppendFormat("{0:x2}", b); // //hex.AppendFormat(b.ToString()); // //hex.AppendFormat(b.ToString()+","); //} //Show(hex.ToString()); }
这里看具体的数据协议来写解析并输出就ok
- 遇到的坑,在android6.0以上版本运行时,要用到的蓝牙权限,除了在android的xml文件申请外,还需要一个定位权限,这个坑找了好久。然后在需要的时候调一下unity自带的定位的api去开启权限才可以正常使用蓝牙功能。
最后
以上就是喜悦咖啡最近收集整理的关于Unity连接ble蓝牙脉搏心率设备的全部内容,更多相关Unity连接ble蓝牙脉搏心率设备内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复