问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ios设备app作为蓝牙外设端

发布网友 发布时间:2022-11-30 09:03

我来回答

1个回答

热心网友 时间:2023-11-25 04:00

苹果手机可以作为蓝牙外设端,被蓝牙*端来扫描连接交互数据,实现模拟蓝牙外设硬件。通过阅读CoreBluetooth库,可以找到一个CBPeripheralManager的类,该类主要的作用就是允许你来管理发布services,把这些services广告给其他的设备。如果想详细了解该类的属性和方法,建议去看看CoreBluetooth/CBPeripheralManager.h。
下面来模拟一个简单的蓝牙外设端。

上面中,serviceUUID为给外设配置的服务的UUID,可以有多个,characteristicUUID为给service添加的特征的UUID,也可以有多个,可自定义可读可写等等属性.characteristicValue为characteristic的值,localName和serviceUUIDs分别为键CBAdvertisementDataLocalNameKey和CBAdvertisementDataServiceUUIDsKey对应的value。由于作为外设端时发送广播包,广播包中提供包含着两个键值对,如果有另外的键值对想要发送,例如CBAdvertisementDataServiceDataKey,会出现错误。

首先要导入蓝牙库
#import <CoreBluetooth/CoreBluetooth.h>
遵守协议

创建peripheralManager对象

创建了peripheralManager对象后会自动调用回调方法didUpdateState
- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral {
if (peripheral.state != CBPeripheralManagerStatePowerOn) {
return;
}
}
给外设配置服务和特征
- (void)configServiceAndCharacteristicForPeripheral {
CBMutableCharacteristic *writeReadCharacteristic = [[CBMutableCharacteristic alloc] initWithType:characteristicUUID properties:CBCharacteristicPropertyWrite | CBCharacteristicPropertyRead value:nil permissions:CBAttributePermissionsReadEncryptionRequired | CBAttributePermissionsWriteEncryptionRequired];
CBMutableService *service = [[CBMutableService alloc] initWithType:serviceUUID primary:YES];
[service setCharacteristics:@[writeReadCharacteristic]];
[self.peripheralManager addService:service];
}
调用上面的方法时,会监听didAddService:
- (void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)service error:(NSError *)error {
}
开始广播

调用上 面方法时,会监听DidStartAdvertising:
- (void)peripheralManagerDidStartAdvertising:(CBPeripheralManager *)peripheral error:(NSError *)error {
}
当*端连接上了此设备并订阅了特征时会回调 didSubscribeToCharacteristic:
- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didSubscribeToCharacteristic:(CBCharacteristic *)characteristic {
[self.peripheralManager updateValue:characteristicValue forCharacteristic:characteristic onSubscribedCentrals:nil];
}
当*端取消订阅时会调用didUnsubscribeFromCharacteristic:
- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didUnsubscribeFromCharacteristic:(CBCharacteristic *)characteristic {
}
当接收到*端读的请求时会调用didReceiveReadRequest:
- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request {
if (request.characteristic.properties & CBCharacteristicPropertyRead) {
NSData *data = request.characteristic.value;
[request setValue:data];
[self.peripheralManager respondToRequest:request withResult:CBATTErrorSuccess];
} else {
[self.peripheralManager respondToRequest:request withResult:CBATTErrorReadNotPermitted];
}
}
当接收到*端写的请求时会调用didReceiveWriteRequest:
- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray<CBATTRequest *> *)requests {
CBATTRequest *request = requests[0];
if (request.characteristic.properties & CBCharacteristicPropertyWrite) {
CBMutableCharacteristic *c = (CBMutableCharacteristic *)request.characteristic;
c.value = request.value;
[self.peripheralManager respondToRequest:request withResult:CBATTErrorSuccess];
} else {
[self.peripheralManager respondToRequest:request withResult:CBATTErrorWriteNotPermitted];
}
}
手机app可以作为一个蓝牙外设端来模拟外设硬件,但广播包里的数据只能包含localName和serviceUUID,相对于外设硬件来说还是有一些不足之处。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
单机组装6000元预算,INTEL和AMD下不同的配置方案 手上有5000元,想DIY一台台式机,主要是玩大型单机游戏,像孤岛危机2。求... ...及各自优点缺点和如何修改。。 CPU 至强 E3 1230 v2主板 微星Z... 求配家用游戏电脑4000-6000 嘴巴上长水泡怎么办? 嘴巴旁边长了水泡怎么回事 他不回信息的句子 市面上有哪些浪漫又个性的牛仔单品值得入手? 2021年流行什么外套显瘦不挑身材 夏季有哪些百搭又显高级的单品值得选择? muv luv ate同人本 muv-luv ate 22集结尾RLF队长得到的超级机体是什么? muv luv alternative 怎么安装? 求少女时代 西卡拿着面包片变表情的gif 图(下图的gif 原图)ps 贴吧里看到的,复制下来就不动了 深圳市众鑫汇金融服务有限公司怎么样? 重庆市鑫汇金属回收有限责任公司怎么样? 平度鑫汇金矿资源现状 杭州东到兰州的高铁g1874的餐车有座位吗 怎么去,优筑科技住宅体验中心的地址,地图 从浙江到陕西做火车路线? 上汽集团 荣威350怎么样 凯旋thruxton rs是否保值 人类离月球旅行还有多远?收好这份旅行攻略,没准哪天就用上了 广西南宁到重庆大裂谷索桥自驾游攻略 我想问一下皖西大裂谷开放时间和景点交通攻略 湖州市哪里3小时出核酸报告 最新人教版小学数学一年级下册课堂同步试题及答案(全册) 加湿器一定要用纯净水么 股市庄家的操盘思路一般都是什么 庄家的思路 muv是什么意思啊 我的一个女同学在上q是发给我的 求救.. MUV–LUV里bate和高达那个体积大一些 包头到陶卜旗多少公里? 从呼市北二环国通到南陶不齐有多少公里? 原国军将领宋万洲其人其事 土默川剿匪 松下SR-DH152怎么样?松下SR-DH152好吗 松下SR-MS152在煮饭的时候,显示屏会有雾怎么办?今天拿到售后检测却不会,真衰,要买这款的人要注意了 松下SR-DH152电饭煲怎么样 糟粕的人生是什么意思 哪边的炒股顾问老师比较专业? 迎宾老拐头在冷藏可以放几天 北京产的老拐头酒是真的吗 非傲老拐头注册过商标吗?还有哪些分类可以注册? 迎宾一号火腿是老火腿吗 想问杭州话拐头拐脑什么意思 请问杭州话拐头拐脑什么意思 请问一下杭州话拐头拐脑什么意思 阿尔法罗密欧雷达模块位置 机动都市阿尔法仙女座改造科技怎么选择