ios获取蓝牙串口数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios获取蓝牙串口数据相关的知识,希望对你有一定的参考价值。
参考技术A 最近在项目中连接蓝牙设备,发现读取到的数据是这种格式这些数据是空间位置坐标,也就是想x,y,z轴的数据,根据所给文档,A0 A0 0C是数据头,AE AE是数据尾,也就是中间的12个数字是想要的部分,我们可以在-(void) peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error这个方法中读取到数据,但是怎么才能分别得到x,y,z轴的数据呢?
1.首先是截取中间部分的字符串
//切割字符串
NSRange startRange = [hexValue rangeOfString:@"0C "];
NSRange endRange = [hexValue rangeOfString:@" AE"];
NSRange range = NSMakeRange(startRange.location + startRange.length, endRange.location - startRange.location - startRange.length);
NSString *result = [hexValue substringWithRange:range];
2.将16进制的字符串转化为NSNumber类型
NSMutableArray *coordinateArr = [NSMutableArray array];
NSArray *array = [result componentsSeparatedByString:@" "]; //从字符A中分隔成2个元素的数组
for (NSString *str in array)
NSString *newStr = [NSString stringWithFormat:@"0x%@",str];
unsigned long red = strtoul([newStr UTF8String],0,16);
NSNumber *number = [NSNumber numberWithLong:red];
[coordinateArr addObject:number];
3.判断自己这端是什么模式(分为大端模式和小端模式),这个是c的方法判断的
short int a = 0x1122;//十六进制,一个数值占4位
char b = *(char *)&a; //通过将short(2字节)强制类型转换成char单字节,b指向a的起始字节(低字节)
if( b == 0x11)//低字节存的是数据的高字节数据
NSLog(@"是大端模式");
else
NSLog(@"是小端模式");
4.再根据union联合体去获取到坐标轴数据:
union
float a;
char b[4];
packet;
float position[3];
for(int i = 0; i < 3; i++)//此段是小端模式,若为大端,则数组顺序恰好相反
packet.b[0]=arr[4*i ;
packet.b[1]=arr[4*i+1];
packet.b[2]=arr[4*i+2];
packet.b[3]=arr[4*i+3] ;
position[i]=packet.a;
则position[0]),position[1]),position[2])分别就是x,y,z的数据了
最后附上截图,希望能帮到小伙伴
iOS Core 蓝牙串口
【中文标题】iOS Core 蓝牙串口【英文标题】:iOS Core Bluetooth Serial Port 【发布时间】:2013-05-13 21:04:02 【问题描述】:鉴于我有一个返回一些串行数据的蓝牙设备 - 我如何使用 CoreBluetooth 读取它?
没有特征或服务。只是一些已知(实际上是 obd ii)格式的二进制数据。
【问题讨论】:
这很奇怪。低功耗蓝牙设备应具有服务和特性。你确定它使用的是低功耗蓝牙,还是只是“经典”蓝牙? 我也在尝试这样做。但是我的外围设备不是设备。这是一个在 Windows 7 上运行的 Windows 程序,它通过 BLE 通过 COM 端口模拟 OBD II 数据。但我的 iOS 应用没有检测到它。 【参考方案1】:我认为 iOS 会阻止通过蓝牙访问串行端口。
您可能需要购买额外的硬件、使用 WiFi 或越狱。
RS232 for iOS device
【讨论】:
【参考方案2】:如果您设法越狱您的 iPhone,请尝试使用 roqyOBD。我相信它创建了一个 TCP 服务器,您可以使用FuzzyLuke's OBD2Kit 并因此读取从 OBD-II 接口发送到 iPhone 的 PID。
告诉我进展如何!我自己正在用 iPhone 修补 OBD-II,并且和你一样学习。
【讨论】:
【参考方案3】:您可能有一个不兼容 BTLE 的蓝牙 2.0 或 3.0 设备。 CoreBluetooth 是 BTLE 的实现,因此您不能在(非越狱)iOS 上使用所述设备。现在有很多兼容 BTLE 的设备,所以如果您想与 iOS 交互,最好购买其中之一。
【讨论】:
以上是关于ios获取蓝牙串口数据的主要内容,如果未能解决你的问题,请参考以下文章