Tag: Ble

Core蓝牙入门

核心蓝牙 核心蓝牙是Apple提供的iOS框架,允许使用低功耗蓝牙技术开发应用程序。 该框架抽象了Bluetooth LE内部工作的一些技术方面,使开发人员可以专注于其实际使用。 中央x外围设备 蓝牙LE标准中的通信由两个主要角色构成:中央和外围设备。 外围设备是提供信息的元素:在客户端-服务器方法中,将是谁拥有其他设备所需的信息。 中央利用外围设备提供的信息来运行其任务,如下所示: 为了使中央可以看到外围设备,它发送广告数据包,指示其存在并将传输数据。 该数据包的尺寸很小,仅包含基本信息,例如外围设备的名称和所传送数据的类型。 中心进行扫描,换句话说,它“侦听” BLE广告数据包,以决定是否应从特定设备读取数据。 设备可以具有各种不同的服务,而不仅限于发送一种类型的信息。 温控器可以发送其实际温度及其最近的每小时读数。 外围设备提供的每个服务可以具有许多信息类型,称为特征: 如前所述,由于性能原因,广告包故意很小,它们没有列出外围设备可用的所有功能和信息。 由中心来询问外围设备具有的服务和特性的列表。 这些特征可以分为3种类型:读取,写入或通知。 在此示例中,我们将使用可写特征将数据发送到外围设备,而不仅仅是从外围设备读取信息。 这将颠覆我们先前将外围设备视为服务器而将中央设备视为客户端的概念,但将向您展示事物的灵活性。 让我们在Pratice中看到它 首先,创建一个新的单视图项目: 给它一个名称和项目的包ID,在下一个屏幕上选择“在Mac上创建Git存储库”,到此为止。 使用以下属性创建一个名为Constants.swift的新swift文件: 您可以在终端上使用命令“ uuidgen”创建一个UUID。 Core Bluetooth将使用此标识符来快速有效地找到您的服务。 为了简单起见,我们将有两个视图控制器,一个用于发送数据(外围),另一个用于获取数据(中心)。 您可以通过更改Main.storyboard中的视图控制器基类来选择要在每个设备上运行的设备。 PeripheralViewController(接收器) 在项目中添加一个名为PeripheralViewController.swift的新视图控制器。 在UIKit语句下,将Core Bluetooth导入其中: 另外,创建一个名为peripheralManager的属性来保存CBPeripheralManager的实例,并在viewDidLoad下对其进行初始化。 核心蓝牙几乎可以使用了。 为了能够处理外围设备响应(并停止XCode的警告消息),请将其添加到PeripheralViewController.swift文件的末尾: 我们的代码仅应在用户打开蓝牙无线电时运行。 外围设备管理器代表有一种方法,该方法在每次蓝牙状态更改时运行。 将其添加到最近创建的扩展中: 现在,当状态更改为开机时,很好地打印一条消息并调用一个名为startAdvertising()的方法,如下所示: startAdvertising()最初调用createPeripheralService(),后者创建一个可写服务以用于接收消息,该消息将由另一台设备的中央设备写入。 外围设备管理器收到写调用时,将触发didReceiveWrite委托: CentralViewController(发送方) 在项目中添加一个名为CentralViewController.swift的新视图控制器。 在UIKit语句下,将Core Bluetooth导入其中: 另外,创建一个名为centralManager的属性来保存CBCentralManager的实例,并在viewDidLoad下对其进行初始化。 我们需要一个集合来保存对我们发现的外围设备的引用,因为如果Core Bluetooth没有强大的引用,它们会自动取消分配它们。 在外围示例之后,在CentralViewController.swift的末尾添加此扩展名: 这次,当蓝牙状态更改为打开时,中央管理器将开始使用与外围设备管理器中使用的SERVICE_UUID相同的外围设备进行扫描。 这样,中心将仅扫描具有该特定服务的设备,而不扫描附近所有可用的蓝牙设备,这将导致不必要的电池消耗。 当中心发现一个新的外围设备时,它将其添加到我们的createdPeripherals集合中并尝试连接到它: 之后,如果外围设备已连接,我们将尝试发现其服务,并出于与发现外围设备相同的原因指定SERVICE_UUID。 […]

可可豆BLE PITFALLS

缩写(按出现的顺序) BLE –蓝牙低 PCB —印刷电路板 API —应用程序编程接口 每个使用iOS BLE的开发人员都知道,并非所有功能都像文档中所描述的那样好。 今天,我想描述一些使用BLE时可能会棘手的要点。 我想为您(读者,我想是BLE开发人员)提供一些信息,以使您在Cocoa BLE世界中的旅程更轻松,更高效。 因此,您首先需要知道的是以下问题的答案:“究竟是哪里出了问题—在我这边还是在连接的设备上? 当我向设备发送命令时,会发生什么情况吗?” 要获得此问题的答案,我建议使用以下几种方法: 嗅探器工具 用于测试API的第三方应用程序 测井 设备的固件版本,无需加密或任何其他保护即可与之一起使用 因此,让我们讨论每个点的更多细节。 嗅探器工具 -此工具可让您在不使用CoreBluetooth框架的情况下与数据包相交并对其进行分析。 区分BLE通信的不同方面(请求,响应,未处理的错误,意外消息等)可能非常有帮助。要设置此工具,基本上,您需要做一些事情:特殊的Ppcband固件Mac。 我使用了Wireshark和Nordic Semiconductors测试板。 它们一起为嗅探活动提供了强大的工具集。 嗅探器工具可以在两种模式下使用-广告和连接。 有用的链接是: 有关嗅探工具及其工作方式的信息 嗅探器工具— nRF-Sniffer-UG Wireshark XQuartz(某些版本的Wireshark需要) 用于测试API的第三方应用程序 -测试设备最快的方法之一就是使用第三方解决方案。 使用此类产品,您可以轻松扫描,发现,发送/接收甚至模拟设备的某些功能。 很好的例子是 浅蓝 蓝壁虎 记录 -大多数BLE设备与另一端的智能手机通话。 因此,了解手机本身发生的情况至关重要。 检查电话中发生的事情最有用的技术之一就是使用操作系统自己的日志记录功能。 在iOS中,启用蓝牙日志记录需要在设备中安装特殊的配置文件。 您可以在https://developer.apple.com/bluetooth/(链接是外部的)上找到有关启用它的更多信息。 启用后,iTunes可以将日志同步到计算机,并且可以对其进行分析。 固件 -为了保护自己的产品,通常在应用程序和设备之间使用加密的通信协议。 这种方法为用户确保了更高的安全级别,但同时在开发方面要困难得多。 为了简化此过程,请在开发过程中始终使用未加密的固件版本,并仅出于生产目的提供更高级别的安全性。 当然,这会稍微影响固件开发时间,但这也减少了您方面使用此类固件开发出色应用程序所需的工作。 至此,我假设开发环境已经启动并正在运行,而您所要做的只是弄污双手并编写一些代码以使应用程序栩栩如生:)。 现在,要确保您的用户获得最佳的用户体验,您应该完全控制应用程序内的所有进程,并相应地控制其所有方面。 基本上,您应该考虑以下几点: 蓝牙设备可用性(状态观察) […]

iOS:简化心率监测器

构建BLE(蓝牙低能耗)设备配套应用程序可能会导致大量复制/粘贴代码。 我们决定提供开放源代码框架,以帮助其他人减少开发时间并避免在项目之间复制/粘贴代码段。 总览 在本教程中,您将使用蓝牙心率传感器构建心率监测应用程序。 我们使用Polar H10蓝牙心率传感器。 但是,只要符合蓝牙GATT服务规范(也可以提供定制服务和特性),其他任何BLE心率传感器都应该可以正常工作。 Gormsson框架 该框架是针对Harald“蓝牙” Gormsson命名的。 丹麦和挪威国王出生于910年,死于986年。 基础 如果您想以更底层的开发方式进行操作,建议阅读www.raywenderlich.com上Jawwad Ahmad的教程。 iOS的核心蓝牙教程:心率监视器 在本核心蓝牙教程中,您将学习如何从兼容设备中发现,连接和检索数据…… www.raywenderlich.com 他的教程将为您提供有关蓝牙特定术语的一些详细信息,例如:中心,外围设备,服务,特性和广告包。 您还将能够评估使用Gormsson框架以更少的代码行实现完全相同的应用程序的好处。 注意 iOS模拟器不支持蓝牙。 您需要在实际设备上构建并运行。 设置xCode项目 启动xCode并创建一个Single View App然后键入“ Next”按钮并将项目命名为“ HeartRateMonitor”。 椰子足 您可以使用Cocoapods或Carthage安装框架。 让我们为本教程选择Cocoapods。 如果您的计算机上尚未安装该软件,请打开您喜欢的Terminal应用程序并运行以下命令。 须藤宝石安装cocoapods 一旦安装了Cocoapods,请使用终端转到您的项目路径,然后键入以下pod命令来设置项目工作区。 cd HeartRateMonitor / 荚初始化 吊舱安装 如果一切正常,您应该在终端中看到以下内容。 分析依赖关系 下载依赖项 生成豆荚项目 整合客户项目 [!]从现在开始,请关闭任何当前的Xcode会话,并对该项目使用`HeartRateMonitor.xcworkspace`。 发送统计 吊舱安装完成! Podfile有0个依赖项,总共安装了0个pod。 关闭您的xCode项目,然后如上所述,在heartRateMonitor.xcworkspace中打开heartRateMonitor.xcworkspace 。 添加Gormsson框架 从Pods项目中打开Podfile ,然后添加Sejima框架依赖项。 豆荚“戈姆森” 返回终端并输入install命令,以确保将Gormsson框架添加到您的项目中。 […]