iOS连接外设的几种方式

news/2024/11/29 3:49:00/
 一般iOS开发者做APP开发大部分时候都是通过Http(s)请求跟后台服务器打交道,做一些信息展示和用户交互。很少涉及到去跟外部硬件设备连接的开发。随着近年来车联网和物联网的兴起,智能家居和智能硬件的逐步火热,越来越多的app被开发出来,用来跟硬件设备进行来连接,获取硬件相关信息展示或者发送指令控制硬件来提供服务。故本文就针对iOS的app如何跟外部设备进行连接通信这个问题跟大家交流一下。本文原创,欢迎转载,转载请注明出处,如有不正确的地方恳请各位看官指正。


      如上图所示,我把iOS App连接外设的常用方式总结了一下,可以分为三大类:
       第一类是通过网络端口,建立Socket使用TCP/IP协议族进行通信,天然支持多通道,想要几个通道就建几个socket就行了。它主要有三种方式,第一种方式是Wi-Fi连接,优点是:简单,不需要集成MFi芯片,只要对应的硬件有无线网卡,然后手机和硬件连接到同一个局域网中就可以使用socket通过网络协议通信了。缺点也很明显:(1)无线连接信号容易受到干扰,不太稳定,容易断开;(2)如果硬件使用的场合没有公共wifi,就需要手机自建热点共享,硬件进行热点接入,操作步骤较多,对用户来说学习使用成本较高,并且热点共享要求手机本身的数据移动网络是稳定的,在没有移动数据网络信号的地方,热点无法建立。
使用网络端口的第二种方式是USB热点共享,这个其实跟Wi-Fi中的热点共享非常类似,也不需要集成MFI芯片,区别就是USB线共享热点,走的是有线,不容易受到干扰,更稳定,而且iPhone可以边使用可以边充电;缺点也是操作步骤比较复杂,需要先打开个人热点共享;
使用网络端口的第三种方式是NCM,就是把USB端口虚拟成标准的网络端口,然后手机和外设就能通过有线网络直连了,可以理解成手机和外设通过一跟网线连起来了,然后就可以用socket通过TCP,UDP进行通信了。它的优点是:有线连接,非常稳定,带宽足够;也不依赖移动网络信号;但是它的缺点就是:需要集成MFI芯片并进行MFI认证,有一定门槛。更变态的是这么好的一种方式,目前苹果只提到可以在它自己的CarPlay使用,其他硬件并没有说禁止或者允许使用。如果硬件使用NCM跟iOS系统的App通信,可能通过MFI认证是有风险的。
关于如何使用Socket进行TCP、UDP连接,推荐github上的开源项目CocoaAsyncSocket(https://github.com/robbiehanson/CocoaAsyncSocket
iOS App连接外部硬件的第二大类是EAP,全拼是External Accessory Protocol ,外部设备协议。这个是苹果推荐使用的外设连接方式。需要外设集成MFI芯片进行MFI认证。手机端开发相对简单,只要集成 iOS系统提供的一个框架ExternalAccessory.framework,并且在info.plist中配置好协议字符串(Supported external accessory protocols),当iOS 设备通过USB线或者蓝牙连接到对应硬件时,iOS系统会把符合MFI认证要求的外设抽象成了一个流对象,App通过指定的协议字符串来创建一个EASession类的实例来访问到该流对象,就能通过NSInputStreamNSOutputStream跟硬件件进行通信了。它有两种模式,一种是叫EASession的模式,它带宽相对较低,但是允许同时通过多个协议字符串创建多个会话,也就是说直接支持多个通道;另外一种是Native Transport的模式,这种模式的优点是带宽足够大,理论值是100MB以上,但是不支持多通道,如果业务层需要支持多数据通道的话需要App自己进行通道的复用与拆分,并且Native Transport需要iPhone工作在USB host模式,硬件需要支持USB 模式切换。
       关于如何使用EAP跟外部设备进行通信,可以参考苹果官方的demo(https://developer.apple.com/library/ios/samplecode/EADemo/Introduction/Intro.html)进行入门和学习。


第三大类就是BLE,低功耗蓝牙,是iOS7.0以后才支持的连接方式。它的优点是不需要集成MFI芯片做认证,功耗低,手机端开发也相对简单,集成iOS系统提供的CoreBluetooth.framework就行。缺点是:带宽很低,一般适合于只需要传输少量数据的场景。比如前两年非常火爆的各种所谓智能硬件,像智能水杯,智能体重计,运动手环等,都是采用这种连接方式。

http://www.ppmy.cn/news/615729.html

相关文章

计算机各外设的作用,外设在计算机中的作用及传输方式.doc

1. 外设在计算机系统中的作用 在计算机系统中,外围设备的作用显然非常重要。一台普通的微机系统中,外围设备的价格已经远远超过主机的价格。外围设备的作用归纳起来有以下几方面。 ⑴ 提供人机对话 人操作计算机,必须要进行人机对话,程序需要输入计算机,程序运行中所需要的…

汇编——外设接口

I/O接口:(硬件) 将外设连接到总线上的一组逻辑电路的总称。以实现外设与主机之间的信息交换。 基本功能: 进行端口的地址译码 设备选择 向CPU提供I/O设备的状态信息和进行命令译码 进行定时和相应的时序控制 对传送的数据进…

CPU与外设交换数据的方式

目录 程序控制传递方式: 特点: 1:无条件传送方式(同步传送方式) 特点 方法: 优点: 缺点: 2:查询传送方式(异步传送方式) 适用场景&#x…

CPU对外设的编址linux对外设的访问CPU地址空间

下面所讨论的都是没有经过MMU的物理地址 1.物理实体:I/O端口(I/OPorts)(少数外设板卡含有IO Mem)物理内存条(即主存)———— 2.对外设的物理地址编址方式:I/O端口方式(独立编址)&I/O内存方式(统一编址)————I/O端口的本质一般是外设寄存器。从访问外设寄存…

STM32-GPIO外设详解

目录 一、GPIO简介 二、GPIO框图剖析 1、GPIO输出部分 1)保护二极管 2)P-MOS&N-MOS 3)复用功能输出 4)输出数据寄存器、位置设置/清除寄存器 2、GPIO输入部分 1)输入模式(模拟/浮空/上拉/下拉&am…

STM32外设GPIO的配置和应用

以下内容主要以F407xx系列为例。 01 PIN脚类型和结构 在讲GPIO之前,我们先看下STM32中的PIN脚类型: PIN脚类型 PIN类型描述备注SSupply pin电源引脚IInput only pin只能作输入I/OInput / output pin输入输出口 PIN类型 - S PIN名称描述备注VBAT为备…

中断-NVIC与EXTI外设详解(超全面)

✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!! 📃个人主页:rivencode的个人主页 🔥系列专栏:玩转STM32 💬推荐一…

外设、总线、接口概念辨析

命名: 外设,peripheral。 总线,bus。 接口,interface。 本文对这几个容易混淆的概念进行辨析,以便于更好地理解嵌入式系统。 外设在个人电脑等领域是指主机以外的一些设备,如显示器、键盘、鼠标、打印机…