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获取蓝牙串口数据的主要内容,如果未能解决你的问题,请参考以下文章

iOS Core 蓝牙串口

delphi android蓝牙4.0开发

Android蓝牙串口通信模板

ardiuno怎么将蓝牙串口中调试的数据提取出来

Android studio蓝牙app的串口是啥

uniapp蓝牙连接+打印