IOS BLE 蓝牙实现方式
来源:互联网 发布:java中的wait 编辑:程序博客网 时间:2024/06/07 01:29
//// ViewController.m// BleTemperatureDemo//// Created by jacob on 16/3/9.// Copyright © 2016年 jacob. All rights reserved.//#import "ViewController.h"#import <CoreBluetooth/CoreBluetooth.h>//电池的service uuidstatic NSString *BATTERY_SERVICE = @"1xxx";//电池的特征值的UUIDstatic NSString *BATTERY_READ_CHAR = @"2Axx";//体温数据的service UUIDstatic NSString *HEALTH_SERVICE = @"1xxx";//体温特征值的UUIDstatic NSString *HEALTH_READ_CHAR = @"2xxx";@interface ViewController () <CBCentralManagerDelegate,CBPeripheralDelegate>@property (weak, nonatomic) IBOutlet UILabel *labelState;@property (weak, nonatomic) IBOutlet UILabel *labelTemperature;@property (weak, nonatomic) IBOutlet UILabel *labelBattery;@property(nonatomic,strong) CBCentralManager *bleManager;@property(nonatomic,strong) NSMutableArray *multArray;@property(nonatomic,strong) CBPeripheral *myPeripheral;- (IBAction)startScan:(UIButton *)sender;- (IBAction)stopScan:(UIButton *)sender;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; _bleManager = [[CBCentralManager alloc]initWithDelegate:self queue:nil];}- (void)centralManagerDidUpdateState:(CBCentralManager *)central{ NSLog(@"centralManagerDidUpdateState"); switch (central.state) { case CBCentralManagerStatePoweredOff: NSLog(@"蓝牙已关闭"); break; case CBCentralManagerStatePoweredOn: NSLog(@"蓝牙已打开"); break; case CBCentralManagerStateUnsupported: NSLog(@"不支持蓝牙"); break; default: break; }}-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI{ NSLog(@"peripheral--:%@",peripheral); if ([peripheral.name containsString:@"Thermometer"]) { self.labelState.text = @"已发现设备"; peripheral.delegate = self; NSLog(@"开始连接设备"); self.myPeripheral = peripheral; [self.bleManager connectPeripheral:self.myPeripheral options:nil]; }}/** *连接上设备的信息回调,连接上设备后,开始发现服务 */-(void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral{ NSLog(@"设备连接成功,准备扫描服务"); [peripheral discoverServices:nil]; self.labelState.text = @"设备连接成功";}-(void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error{ self.labelState.text = @"设备已经断开"; if (error) { NSLog(@"didDisconnectPeripheral with error : %@",error); return; }}/** 扫描外设服务的数据回调 */-(void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error{ if (error) { NSLog(@"didDiscoverServices with error : %@",error); return; } for (CBService *service in peripheral.services) { NSLog(@"service uuid: %@",service.UUID.UUIDString); if ([service.UUID.UUIDString isEqualToString:BATTERY_SERVICE]) { NSLog(@"已经发现电池对应的服务"); [peripheral discoverCharacteristics:nil forService:service]; } if ([service.UUID.UUIDString isEqualToString:HEALTH_SERVICE]) { NSLog(@"已经发现体温数据对应的服务"); [peripheral discoverCharacteristics:nil forService:service]; } }}-(void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{ NSLog(@"发现服务 %@, 特性数: %ld", service.UUID, [service.characteristics count]); if (error) { NSLog(@"didDiscoverCharacteristicsForService with error : %@",error); return; } //电池电量的数据直接读对应的特征值即可 if ([service.UUID.UUIDString isEqualToString:BATTERY_SERVICE]) { for (CBCharacteristic *character in service.characteristics) { if ([character.UUID.UUIDString isEqualToString:BATTERY_READ_CHAR]) { NSLog(@"已找到電池对应服务中的 特征值"); [peripheral readValueForCharacteristic:character]; } } } //体温数据需要通过notify的方式进行获取 if ([service.UUID.UUIDString isEqualToString:HEALTH_SERVICE]) { for (CBCharacteristic *character in service.characteristics) { if ([character.UUID.UUIDString isEqualToString:HEALTH_READ_CHAR]) { NSLog(@"已找到体温对应服务中的 特征值"); [peripheral setNotifyValue:YES forCharacteristic:character]; } } }}/** read 或者 notify的方式都会在这个函数中返回数据 */-(void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{ if (error) { NSLog(@"didUpdateValueForCharacteristic with error : %@",error); return; } NSData *data = characteristic.value; NSLog(@"收到数据啦 %@---%@", data,characteristic.UUID); //电量数据 if ([characteristic.UUID.UUIDString isEqualToString:BATTERY_READ_CHAR]) { int battery; [data getBytes: &battery length: sizeof(battery)]; self.labelBattery.text = [NSString stringWithFormat:@"%d",battery]; } //体温数据 if ([characteristic.UUID.UUIDString isEqualToString:HEALTH_READ_CHAR]) { Byte *testByte = (Byte *)[data bytes]; Byte orgin[4]; orgin[0] = testByte[1]; orgin[1] = testByte[2]; orgin[2] = testByte[3]; NSData *chidata=[NSData dataWithBytes:orgin length:4]; int code; [chidata getBytes:&code length:4]; //NSInteger temp = [self byteToInt:orgin]; self.labelTemperature.text = [NSString stringWithFormat:@"%.2f",(0.1+0.01*code)]; } }- (IBAction)startScan:(UIButton *)sender { [self.bleManager scanForPeripheralsWithServices:nil options:@{CBCentralManagerScanOptionAllowDuplicatesKey:@(YES)}]; NSLog(@"开始扫描"); }- (IBAction)stopScan:(UIButton *)sender { NSLog(@"停止扫描"); [self.bleManager stopScan ]; [self.bleManager cancelPeripheralConnection:self.myPeripheral]; self.labelBattery.text = @""; self.labelState.text = @""; self.labelTemperature.text = @"";}@end
0 0
- IOS BLE 蓝牙实现方式
- iOS蓝牙Ble开发
- iOS - 蓝牙 BLE
- ios开发蓝牙 BLE
- iOS蓝牙BLE开发
- 【Mac/iOS】iOS蓝牙BLE
- iOS蓝牙4.0(BLE)-开发
- iOS蓝牙4.0(BLE)-开发
- iOS:蓝牙BLE 4.0 开发
- [蓝牙]iOS学习之蓝牙4.0 BLE
- iOS蓝牙4.0 BLE的使用
- IOS学习之蓝牙4.0 BLE
- iOS开发之蓝牙4.0 BLE开发
- IOS学习之蓝牙4.0 BLE
- IOS 蓝牙4.0(BLE 协议) 初窥
- iOS-BLE蓝牙开发持续更新
- iOS蓝牙4.0(BLE)-后台接收数据
- IOS学习之蓝牙4.0 BLE通信
- [置顶]Shell碎碎念
- 8个方法让你成为更优秀的程序员
- 仿EventBus自己写的android事件传递者EventMailer
- MyBatis CRUD Demo
- appium获取activities和键盘隐藏方法
- IOS BLE 蓝牙实现方式
- UIDevicePlatform 设备
- 我们编程吧 之 C++学习手册v0.1
- CentOS6.5安装最新版 firefox
- JSON解析之Json-lib
- DLL文件生成 预编译代码
- Spring 中如何向 Bean 注入系统属性或环境变量
- Nginx在Window下的使用笔记
- Linux-非结构化数据同步-Linux下实现非结构化数据同步的介绍1