【iOS与EV3混合机器人编程系列之7】通过蓝牙控制EV3
2014-11-30 13:44
405 查看
1 前言
在这个系列之前的博客中,我研究觉得在iOS未越狱的情况下,无法使用蓝牙来控制EV3,编写类似Commander的程序。但,最近和网友的研究发现,通过External Accessory 来实现蓝牙的传输比想象的简单。MFI协议的问题比想象的容易很多,关键在于我们可以获取EV3的MFI协议字符串。接下来让我们看看是怎么实现的。2 具体代码实现
首先Apple官方有个关于External Accessory的demo 叫EAdemo,大家可以下下来,然后在plist文件中改一下协议字符串,如下:然后运行一下,我们就可以直接连上EV3了。
有了这个基础,我们研究一下实现原理。
Step 1:添加ExternalAccessory.Framework 这一步显而易见。
Step 2:连接到EV3
- (void)connectEV3 { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(accessoryDidConnect:) name:EAAccessoryDidConnectNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(accessoryDidDisconnect:) name:EAAccessoryDidDisconnectNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sessionDataReceived:) name:EADSessionDataReceivedNotification object:nil]; [[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications]; self.sessionController = [EADSessionController sharedController]; accessoryList = [[NSMutableArray alloc] initWithArray:[[EAAccessoryManager sharedAccessoryManager] connectedAccessories]]; NSLog(@"accessory list:%@",accessoryList); if(accessoryList != nil){ [self.sessionController setupControllerForAccessory:[accessoryList firstObject] withProtocolString:@"COM.LEGO.MINDSTORMS.EV3"]; isConnected = [self.sessionController openSession]; } }
- (void)accessoryDidConnect:(NSNotification *)notification { NSLog(@"EV3 did connect!"); EAAccessory *connectedAccessory = [[notification userInfo] objectForKey:EAAccessoryKey]; [self.sessionController setupControllerForAccessory:connectedAccessory withProtocolString:@"COM.LEGO.MINDSTORMS.EV3"]; isConnected = [self.sessionController openSession]; }
在这里我也直接使用了EADemo上的代码来分析。由于官方例子的EADSessionController把数据传输这部分内容做得很好,我们直接拿来用就好了。基本过程就是创建实例,建立controller,然后openSession。
Step 3:控制EV3直接使用之前已经编写好的EV3DirectCommander来实现简单的例子如下:
- (IBAction)go:(id)sender { if (isConnected) { NSData *data = [EV3DirectCommander turnMotorAtPort:EV3OutputPortB power:50]; [[EADSessionController sharedController] writeData:data]; isGo = YES; } }
3 为什么用蓝牙?
显然之前用Wifi得买额外设备,还得连wifi太麻烦,直接用蓝牙省事很多,可以做得更好的效果!嘿嘿,大家可以自己搞个Commander了!更强大的Commander!相关文章推荐
- 【iOS与EV3混合机器人编程系列之二】工欲善其事,必先利其器(准备篇)
- 【iOS与EV3混合机器人编程系列之中的一个】iOS要干嘛?EV3能够更酷!
- 【iOS与EV3混合机器人编程系列之六】iOS_WiFi_EV3_Library 剖析之发送命令给EV3
- 【iOS与EV3混合机器人编程系列之四】iOS_WiFi_EV3_Library 剖析之一:WiFi UDP和TCP
- 【iOS与EV3混合机器人编程系列之五】iOS_WiFi_EV3_Library 剖析之连接EV3
- 【iOS与EV3混合机器人编程系列之四】iOS_WiFi_EV3_Library 剖析之中的一个:WiFi UDP和TCP
- 【iOS与EV3混合机器人编程系列之四】iOS_WiFi_EV3_Library 剖析之一:WiFi UDP和TCP
- 【iOS与EV3混合机器人编程系列之三】编写EV3 Port Viewer 应用监测EV3端口数据
- 【iOS与EV3混合机器人编程系列之一】iOS要干嘛?EV3可以更酷!
- Hacking EV3系列之六:iOS使用Direct Command 控制EV3
- Hacking EV3系列之一:自编iOS app控制EV3之资料收集与分析
- Hacking EV3系列之五:iOS通过BTstack发送message给EV3
- 自制智能插线板,内嵌BLE低功耗蓝牙,通过手机进行控制(二)
- 【Bing Map学习系列】(3)——如何通过Bing Maps Silverlight Control控制地图
- Hacking EV3系列之七:iPhone 手势无线控制LEGO EV3 Gyro Boy 机器人
- 数据系列:通过Windows Azure SQL数据库防火墙规则控制数据库访问
- 基于Proteus+8051汇编应用实例系列之二--通过按钮来控制LED流水灯移动
- ios开发答疑录系列---(六)NSString和NSData通过Base64编码的相互转换
- 数据系列:通过Windows Azure SQL数据库防火墙规则控制数据库访问
- ios开发答疑录系列---(四)OS开发中混合使用ARC和非ARC项目