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:connectedAccessorywithProtocolString:@"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混合机器人编程系列之7】通过蓝牙控制EV3相关推荐

  1. 【iOS与EV3混合机器人编程系列之三】编写EV3 Port Viewer 应用监测EV3端口数据

    在前两篇文章中,我们对iOS与EV3混合机器人编程做了一个基本的设想,并且介绍了要完成项目所需的软硬件准备和知识准备. 那么在今天这一篇文章中,我们将直接真正开始项目实践. ==第一个项目: EV3 ...

  2. 【iOS与EV3混合机器人编程系列之中的一个】iOS要干嘛?EV3能够更酷!

    乐高Mindstorm EV3智能机器人(下面简称EV3) 自从在2013年的CES(Consumer Electronics Show美国消费电子展)上展出之后, 就吸引了全球广大机器人爱好者的眼球 ...

  3. 【iOS与EV3混合机器人编程系列之五】iOS_WiFi_EV3_Library 剖析之连接EV3

    在上一篇文章中,我们讲解了如何用开源代码库CocoaAsyncSocket来实现iOS上的UDP和TCP数据通信.那么在本文中,我们将介绍在CocoaAsyncSocket的基础如何使用UDP和TCP ...

  4. 【iOS与EV3混合机器人编程系列之六】iOS_WiFi_EV3_Library 剖析之发送命令给EV3

    在上一篇文章中,我们已经知道了如何通过WiFi将iOS设备和EV3连接起来,那么下一步的工作就是从iOS设备中发送命令给EV3并接收EV3返回的数据.这也是本篇文章将告诉大家的. 首先要明确的一点是本 ...

  5. 【iOS与EV3混合机器人编程系列之二】工欲善其事,必先利其器(准备篇)

    在上一篇文章中,我们论述了iOS与EV3结合后机器人开发的无限可能, 那么,大家要不要一起来Hacking一把呢? 为了能够完整地完成我接下来我讲的项目,我们需要做以下准备: 1.一台Mac运行MAC ...

  6. 【iOS与EV3混合机器人编程一系列五个】iOS_WiFi_EV3_Library 解剖连接EV3

    在上一篇文章中.我们解说了怎样用开源码库CocoaAsyncSocket来实现iOS上的UDP和TCP数据通信.那么在本文中.我们将介绍在CocoaAsyncSocket的基础怎样使用UDP和TCP连 ...

  7. 大疆推教育机器人已到第二代!机器人编程玩具的前世今生是怎样的?

    热点追踪 / 深度探讨 / 实地探访 / 商务合作 大疆作为一个无人机品牌,可能已经无人不知,无人不晓了吧.但是,你知道大疆已经涉足教育机器人领域了吗? 继去年大疆推出首款教育机器人机甲大师S1后,今 ...

  8. wedo巡线机器人编程教程_这是一个机器人和编程的时代

    图中在草地上自在奔跑的机器人是波士顿动力公司(BostonDynamics) 开发的类人双足机器人Atlas,由麻省理工(MIT)电子工程与计算机科学系的教授马克·雷波特在1992年创立,一直致力于将 ...

  9. Javascript模块化编程系列二: 模块化的标准化(CommonJS AMD)

    前言 Javascript模块化编程系列一: 模块化的驱动 在前一篇介绍了为什么要进行Javascript模块化编程.至于如何实现模块化,不同的开发组织和个人具体的实现方式肯定是不一样.如何统一一个规 ...

最新文章

  1. MySQL登陆时加-U选项
  2. retinajs 使用方法
  3. Python 的装饰器执行顺序问题(二)
  4. 【渝粤题库】广东开放大学 社会学基础 形成性考核
  5. 二、kubernetes
  6. 【DFS + Backtracking】LeetCode 79. Word Search
  7. hdu 3879 Base Station
  8. 利用Axure制作动态表格(Axure学习日志1)
  9. 阿里P6+面试:介绍下观察者模式?
  10. 台式计算机键盘快捷键怎么设置,电脑快捷键设置修改 电脑键盘快捷键怎么更改...
  11. 代购类网站商品高清晰大图片(1000x1000)的采集解决方案 - hackercai - 博客园
  12. iis部署网站java_值得分享的IIS部署网站详细步骤
  13. Java解决一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
  14. 2019-05-22 Domain注入工具;旁注工具;ASP木马;
  15. TS 中的 keyof 和 typeof 操作符
  16. 中医药大学远程教育计算机,《中医药大学远程教育计算机作业 1-7》.doc
  17. 熤星传媒:抖音几万粉丝能入驻星图?
  18. 打开vivado的.xpr工程文件报错Cannot locate target loader
  19. Ceph分布式存储知识总结
  20. [再寄小读者之数学篇](2014-11-20 计算二重积分)

热门文章

  1. 2-单级交流放大电路【电子技术】
  2. 两数之和(JavaScript三种算法)
  3. JAVA图片处理大全
  4. 【转】史上最全!多图带你读懂各种常见卷积类型
  5. anaconda创建虚拟环境报错
  6. 凭借徽商精神,他创办的公司成为国家级电子商务示范企业
  7. [JS权威指南笔记] 第1章-第3章
  8. JSON 解析,一款高颜值的 JSON 数据解析查看工具
  9. exchange 2013 SSO
  10. DESeq2 install 如何安装R包 RcppArmadillo