当前所在位置:主页 > M曼生活 >BLE:连结物联网与智慧装置最重要的桥樑

BLE:连结物联网与智慧装置最重要的桥樑

BLE:连结物联网与智慧装置最重要的桥樑

于 2015 年 1 月 12 日由 Adrian Stevens 提交。

简介

蓝芽 LE通讯因具有低成本和低能耗等优势,被越来越多用于商用产品和娱乐领域的应用。 如果希望实现 Android 手机或平板电脑与 Intel® Edison 或 Intel® Galileo 专案之间的通信,蓝芽* LE无疑是最佳选择。

本文主要为您介绍如何使用免费的软体工具和低成本、即时可用的硬体编写程式码和连接硬体,以建立 Intel Edison 与配备蓝芽 4.0 的 Android 装置之间的 BLE 通讯。

什幺是 BLE?

蓝芽低能耗 ,蓝芽 LE,或 BLE是一种无线个人网域技术,由蓝芽 Special Interest Group 设计与市场推广。它主要针对健康医疗、健身、安全、自动化和家庭娱乐等领域的应用。

蓝芽 LE 最初由诺基亚于 2006 年推出,当时称为 Wibree。2010 年,通过蓝芽版本 4.0,蓝芽 LE 加入了蓝芽标準当中。

相比于标準蓝芽连接, BLE 可显着降低装置的能耗,同时提供常规蓝芽的大部分连线性以及约一半的连接範围。安装电池的装置如果使用蓝芽 LE,可在不充电或更换电池的情况下使用数年。比如,Estimote 所推出的 Beacon 装置宣称,其电池寿命可长达三年 。

硬体

儘管我们的专注点在于 Intel Edison,但本篇文章的大部分内容也适用于英特尔 Galileo。就 IoT 项目而言,我们使用的感应器和控制来自于 Seeed Studio 的 Grove 系统。具体来说,我们将使用:
• 带有 Arduino breakout 主机板的 Intel Galileo。
• Seeed Grove – Starter Kit Plus Intel® IoT Edition For Galileo GEN 2。
• Seeed Grove BLE。
• 执行 Android 4.3 或更新版本的 Androi 装置
• 以 PC 来执行 Windows* 7 或 8

关于硬体的几点说明如下:

  1. Grove Starter Kit 主要针对 Intel Galileo 而设计,但它同时也适用于 Edison。您还可以单独购买 Grove 元件,但工具套件更加经济实惠。
  2. 在开发过程中我使用的是 Lenovo Android 平板电脑,但其他执行 Android 4.3 并支援蓝芽 4.0 的 Android 装置也均可行。
  3. 我使用 Dell XPS12 为 Intel Edison 和 Android 项目编写程式码。採用 Mac 或 Linux 系统也可进行开发。
软体

我使用下列几款免费的软体工具。如欲查看本範例,您应根据需要下载并安装下列软体工具:

Arduino IDE for Intel® Edison

Android Studio

Android SDK

Windows、Mac 和 Linux 系统均可提供上述软体,不过我将特别介绍在 Windows 系统的安装。

更进一步了解相关硬体Intel® Edison

Intel® Edison 是低成本、通用型计算平台系列的首款硬体。经过专门设计,它有助于快速、轻鬆地建立 IoT 专案的原型,同时还可提供商业化的产品路径。

Intel®Edison 使用 22 奈米 Intel®SoC,包含执行速度高达 500MHz 的双核 Intel® Atom™ 处理器。 它支援 40 个 GPIO,并包含 1GB LPDDR3 RAM、4 GB EMMC 资料存储,以及双频 Wi-Fi*和蓝芽功能。

就内部系统而言,Edison 能执行完整的 Linux 内核系统。为了能发挥 Edison 的最佳性能,您可能希望编写硬体等级的 Linux 程式码。

但 Edison Linux 还以 Linux 程式的形式包含 Arduino 的应用。简单来说,这意味着您可以编写熟悉的 Arduino 草稿码,并在 Edison 主机板上执行这些的草稿码。 这就是我们下面将要进行的操作步骤。

学习关于 Intel Edison 相关资料,可参照以下网页:

http://www.intel.com/content/www/us/en/do-it-yourself/edison.html

Arduino Breakout 主机板

Intel Galileo 的 Arduino breakout 主机板主要有两种用途。 第一,它提供更大的原型构建平台,以容易存取 IO 针脚的相关资讯。第二,它提供可相容 Arduino 的硬体平台,这表示我们能够同时使用标準的 Arduino 遮罩器和 Intel Edison。图 1 为安装于 Arduino breakout 主机板的 Edison。

Grove Starter Kit Plus

该工具套件的全名为「Grove Starter Kit Plus -- Intel® IoT Edition for Intel® Galileo Gen 2 Developer Kit」,最初针对 Intel Galileo 第二代主机板而设计。幸运的是,它透过 Arduino breakout 主机板可完全相容 Intel Edison。

该工具套件主要在借由感应器、制动器和遮罩器来简化执行过程和原型的建立。它包含一个可相容 Arduino 的遮罩器以及四个标準化针脚连接器。这些连接器可供应给连接传输线的 IO 连接端,其中的传输线也可轻易连接套件内的感测器和控制器。这表示您可轻易建力专案,无需受到电线连接的阻碍,也无需担心极性接错的问题。

学习或购买有关于工具套件的相关讯息,可参照以下网页:

http://www.seeedstudio.com/depot/Grove-starter-kit-plus-Intel-IoT-Edition-for-Intel-Galileo-Gen-2-p-1978.html

Grove 工具套件的生产商 Seeed Studios 在网页线上提供许多有用资源。

我建议可从以下网页连结複製或下载关于 Sketchbook Starter repo:
http://Github.com/Seeed-Studio/Sketchbook_Starter_Kit_V2.0

并能将 Grove Wiki 页面设定为储存书籤:
http://www.seeedstudio.com/wiki/index.php?title=Main_Page#Grove

图二为 Grove Starter Kit Plus -- Intel® IoT Edition for Intel® Galileo Gen 2 Developer Kit

Grove BLE V1

我们将使用 Grove 蓝芽低能耗 v1 模组,该模组不包含在入门工具套件中,但可透过 Grove 遮罩器和连接器传输线相容角针。 它还是一种成本相对较低的 BLE 附件,在本文所提到的装置当中,它的成本最低。

Grove BLE v1 是依照准德州仪器的 工业标準 CC2540 来开发。许多其他设备均使用这种晶片。如果您有其他的 TI CC2540 BLE 模组,如 RedBear BLE Mini ,您可以轻易的修改示例的程式码。

学习关于 Grove BLE v1 可参照以下网页连结:
http://www.seeedstudio.com/wiki/index.php?title=Grove_BLE_v1&uselang=en

请注意, Intel® Edison 确实包含支援 Wi-Fi 和 蓝芽 4.0/BLE 的内建无线模组,但 Grove BLE 模组可大大简化软硬体的设置。使用 Grove BLE表示这些项目可轻轻易的与 Intel Edison 搭配。

侦错 Android 装置

已添加 BLE 支援至 Android 4.3。 您需要执行 4.3 或更新版本的装置来透过 BLE 进行通讯。

学习更多关于 Android BLE 参照以下网页连结:
https://developer.android.com/guide/topics/connectivity/bluetooth-le.html

如果之前没有 Android 开发经验,您需要在手机或平板电脑上启用开发人员选项,然后将其用于执行和侦错您的软体。开启应用程式设置,将视窗拉至底部,选择 “About device”,然后点击建立编号七次,即可将开发人员选项解锁。

现在,设置下方应显示 Developer Options,请务必确认为「USB debugging」。

学习更多关于 Android 开发人员选项参照以下网页连结:

安装软体并开始编写程式码Intel® Galileo 的 Arduino IDE

您需要下载符合 Arduino IDE 的版本,以将 Sketches 布署至 Intel Edison 或 Galileo。本文撰写之时的版本为 1.5.3,可参照以下网页连结:
https://software.intel.com/en-us/get-started-arduino-install

Intel® Edison 驱动程式

您还需要从上述连结下载和安装 Intel Edison 驱动程式。它位元于「Driver Software」下方页面的最后一个连结。本文撰写之时的版本为 1.0.0。

如需其他说明,下列连结提供了有用的入门指南:
https://oftware.intel.com/iot/getting-started

Android Studio

Android Studio 是一款 Android 开发的全新 Java IDE,基于 IntelliJ IDEA  。 儘管目前还只是测试版,但它性能稳定且功能完备。如果您习惯使用 Eclipse 或 IntellliJ IDEA 来做 Java Android 开发,那您应该可以轻易理解下列关于两者程式的用法。

Android Studio 可透过 Android SDK 来大幅简化安装流程。只需下载、解压缩档,然后在 bin 资料夹中执行 studio.exe 即可。

学习更多关于 Android Studio 可参照以下网页连结:
https://developer.android.com/sdk/installing/studio.html

Android SDK

您可能需要下载其他 SDK 软体套件。为此,请在 Android Studio 的工具列中点选「SDK Manager」。 关于 Android SDK 设定,我们在此不做介绍, 如需了解更多详情请参考以下列连接:
https://developer.android.com/sdk/installing/adding-packages.html

如果之前安装过 Android SDK,您可以设定 Android Studio,并将其安排在正确的路径,如图 4 所示。

在 Android Studio 中,点选 Configure -> Project Defaults -> Project Structure,并设置路径。

图 图四为在 Android* Studio 设定 SDK 路径

测试 Intel® Edison

在开始执行以下步骤之前,请确认您能够执行 Blink 範例当中的 sketch。它位于 examples -> 01.Basics -> Blink 档案夹中的 Arduino IDE 下载软体套件当中。

关于 Edison 入门指南可参照以下网页连结:
https://communities.intel.com/community/makers/edison/getting-started

Android Hello World

安装 Android Studio 后,请确认您能够建立新专案,并在 Android 装置当中执行该项目。

  1. 与您的 PC 连接 Android 装置。
  2. 开启 Android Studio。
  3. 选择 "New Project…"。
  4. 选择名称和位置,并点选 "Next" 3 次 。
  5. 点选 Finish,并等待项目完成建立。
  6. 将绿色 Play 图示移动到工具列中的
  7. 选择您的装置,并按下 "OK"

如果所有操作步骤都正确,您的 Android 萤幕上会显示 "Hello world!”

BLE 是如何运作?

BLE 根据需要提供的短资料,然后关闭连接线路。这是蓝芽 LE 实现低耗能的原因之一。 相比于常规蓝芽的传统配对方法,BLE 装置仅在需要收发资讯时进行连结。

BLE 的通信方式极其严密。 设备显示收发资料的服务,后者包含称之为特性的内容,以定义可共用的资料。如需获得更多相关资讯,其特性可包含描述符号来定义资料。例如,您可以拥有一项标记为 " 心跳速率监测" 的服务,该服务包含 " 心跳速率量测" 等特性。

大多数的蓝芽 LE API 都支援搜寻本地装置和发现有关这些装置的服务、特性与描述符。

BLE 关键术语与概念

下面简单介绍启动 BLE 项目之前应该了解的关键 BLE 术语与概念。

通用属性设定档

GATT 通用属性设定档是关于通过蓝芽低能耗连结收发少量资料称为" 属性" 的通用规範。 当前所有的 LE 应用通用属性设定档均以 GATT 为基础。蓝芽技术联盟 对 BLE 装置的通用属性设定档数量进行了预先定义。 这些通用属性设定档是关于描述装置使用方法的规範。

属性协议

属性协定指 GATT 的建构基础。 ATT 是专门针对 BLE 装置而设计的优化型协议。 ATT 能通信能尽可能发送少量字元组的资料。所有属性均带有通用唯一通用识别码 ,为标準的 128 位元串 ID,是以唯一的方式识别资讯。 ATT 传输的属性为被格式化的特性和服务

特性

特性包含一个单一的数值以及 0 或多个描述符来描述特性的数值。

描述符

描述符指定义了的属性,可描述特徵值。 它们可能是人类可读的描述,可注明单位或测量,或定义可接受的数值範围。

服务

服务主要表示特性的集合。下列连结提供了现有 GATT 的设定档列表:
https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx

将数据从 Android 传送至 Intel® Edison首要条件

本文的内容将假设您有一个 Intel Edison 与 Android 开发而设置和配置的开发系统。请确认您已完成下列步骤,并检示先前内容。

Android 当中的 BLE

您可以到以下网页连结,从 GitHub 下载完整的项目:
https://github.com/adrianstevens/Edison_to_Android_BLE/tree/master/Android/BLEConnect

但我建议您建立自己的专案,并参考上述连结逐行写入程式码。

建立新的项目

开启 Android Studio,并建立一个空白新的 Android 应用程式,并将其命名为 BLEConnect 。请务必将最低 SDK 设置为 API 18。否则,您将无法使用 BLE API。

图 / 图六为建立一个新的 Android 应用程式

接下来开启 AndroidManifest.xml,并在 标籤上方添加下列内容,以添加所需的许可权:

设置 UI

为了让事情简化,我们只使用原始设定版面,但我们需要为 TextView 设置一个 ID 。 开启 layout -> activity_main.xml,选择 TextView,并将 ID 设置为 mainText,以便我们在程式码当中引用该 ID。

图七为设定 TextView 的 ID

MainActivity

就该专案而言,程式码的其余部分将进入 MainActivity。如果您逐行新增程式码,那幺请注意,Android Studio 将自动检测您所没输入到的资料,并提醒您完成新增。
範例代码的功能如下:

  1. 检查 BLE 支援 Android 的装置。
  2. 搜索附近的 BLE 的装置。
  3. 识别和连结 Grove BLE 模组。
  4. 为已知通讯服务搜索可用的服务。
  5. 寻找通讯服务的传输特性。
  6. 透过将数值写入特性来发送讯息。

我在此不一一介绍每行程式码,只介绍一些核心概念

类别等级变数与静态参数值

我们在连结 BLE 模组、搜索服务和发送消息的过程中保存了一些数值。我们还将为 Grove BLE v1新增部分已知的静态参数值。如果您使用其他的模组,可能需要进行调整。具体而言,我建议定义收发讯息特性,例如:
CHARACTERISTIC_TX = "0000ffe1-0000-1000-8000-00805f9b34fb"
CHARACTERISTIC_RX = "0000ffe1-0000-1000-8000-00805f9b34fb"

状态辅助方法

为了简化过程,我们在之前标记的 TextView 上显示我们的进度。程式码包含一种简单的辅助方法,名为 statusUpdate,帮助我们将状态讯息写入萤幕和控制台。它还可返回至 UI 执行绪,以便我们安全从任一执行绪调用该方法。

连结 BLE 装置

为引用 Bluetooth Manager,我们首先应查看装置是否提供 BLE,呼叫 getSystemService 以引用 Bluetooth Manager ,然后呼叫 getAdapter 的方法以引用 BluetoothAdapter 专案。或者,您还可以直接从 Bluetooth Manager 类别来使用静态説明方法 getDefaultAdapter。

搜寻附近的 BLE 装置

在搜寻装置时,我们使用计时器搜寻特定时间段。 我们可呼叫蓝芽管理专案中的 startLeScan,并传入至回呼专案,以了解是否搜索到装置。

API 持续扫描装置,因此,我们可能会在每台装置的 LeScanCallback 中接收到多个通知,所以在储存之前,我们应确认该装置入口的唯一特性。我们还要检查模组的装置名称,并保存引用。就本範例而言,我们实际上不需要将装置保存在列表中。
@Override
public void onLeScan
{…}

寻找通讯服务

大多数的 BLE 装置都会显示一个或多个服务以供通讯与互动。 Grove BLE 中的 TI CC2540 包含一个 ID 为 “0000ffe0-0000-1000-8000-00805f9b34fb” 的关键服务。接下来,我们将寻找并保存引用的服务。

首先,我们需要连结装置。为了了解连线时间或寻找到服务的时间,我们需要 BluetoothGattCallback 专案,并覆盖 onConnectionStateChanged 与 onServicesDiscovered。

请注意,使用 onConnectionStateChanged 方法时,如果获悉连接成功,我们可呼叫 mBluetoothGatt.discoverServices 搜寻服务。识别到所需的服务后,我们可以继续发送讯息。
@Override
public void onConnectionStateChange
{…}

@Override
public void onServicesDiscovered
{…}

许多其他方法可以被覆盖。请参阅其中的档案如以下连结所示:
https://developer.android.com/reference/android/bluetooth/BluetoothGattCallback.html

发送讯息

在範常式式码中提供了一种 sendMessage 方法。我们透过 UDID 识别到所需的特性后,呼叫该特性的 setValue。最后,我们呼叫 BluetoothGatt 当中的 writeCharacteristic,从而输入特性值,以发送相关资料。

有许多 setValue 多载,但实际上可用一种更简单的多载来发送字串,不过由于大多数 BLE 通讯以位元组的形式来发送指令,因此这种範例更加有用。

现在开始设定 Intel Edison。採用 Grove Breakout 与 BLE 模组来设定 Intel® Edison

首先开始组装基本相关硬体。若您还没準备好,那幺请将 Intel Edison 安装至 Arduino breakout 主机板。

接下来,将遮罩器底部的针脚对準 Arduino breakout 主机板来安装 Grove 遮罩器。然后将 Grove BLE v1 连接至 UART 序列埠端。

图 图八为 Grove 遮罩器与 BLE 模组连结的 Intel® Edison

我们的第一个 Sketch

我们现在要在 Android 装置和 Intel Edison 之间进行简单的序列通讯。但我们还希望看到收发的内容,因此我们使用 Arduino IDE 内建的 Serial Monitor。

我们可以透过以下连结找到完整的 sketch 版本:
https://github.com/adrianstevens/Edison_to_Android_BLE/tree/master/Sketches/SimpleSerial

开 启 vIntel Arduino IDEv,并建立新的 vsketch。 并将其保存并命名为 “SimpleSerial”。与其他 Arduino 相容主机板不同是 Intel Edison 提供两个序列埠。Edison 透过 Grove BLE 收发资料的同时,这有助于我们实现 PC 与 Edison 之间的通讯传输。透过连接 PC 的 microUSB 可存取 UART 序列埠。我们使用 Grove 遮罩器上的 UART 连接端来连接至 BLE 模组。

在 Intel Edison 上完成布署后,我们的 sketch 可自动执行。它会先执行 setup 函数,然后连续地呼叫 loop 函数。这有助于我们读取和响应序列埠连接在输入端的讯息。

序列埠连接的初始化

Grove BLE 的原始设定的通讯速度为 9600 波特,因此,我们从该原始设定值开始。我们需要设定两个序列埠埠,以使用该速度。还需向 Grove BLE 发送多个 AT 指令,以将其更新为最新状态。这些均可显示在 sketch 的 setup 函数中。

请注意,我们要首先设定 “Serial”,即为 microUSB 埠的 UART,然后是“Serial1”,即连接至 Grove BLE 的 UART。

迴圈

我们在该 sketch 的所有操作的目的为读取来自序列埠的资料,然后将该资料发送至另一埠。为此,我们将呼叫序列埠的 read 函数,为我们提供单一字元,然后在另一序列埠呼叫 print。

Edison 迴圈的执行速度非常快,因此我们通讯速度可轻易达到 9600 波特。

布署 Sketch

请点击 Arduino IDE 的确认键。传输完成后,sketch 开始执行迴圈,然后我们可连接 Android 的应用程式。现在请开启 Arduino IDE 的 Serial Monitor,然后可以开始收发资料了。

一旦 Sketch 在 Intel Edison 开始执行后,即可执行 Android BLEConnect 应用程式。您应该可以看到在 serial monitor 当中显示“Hello Grove BLE”的讯息。

如果无法执行,可能是 Android 应用程式的问题。检查状态显示,它会告知出问题的原因。

GitHub repo 当中有一个 sketch 可将讯息显示于 Grove LCD。请确认您的 Grove 遮罩器的电压设置为 5V,并将 LCD 显示器与 I2C 连接。

图 / 图九为在 Android*手机所执行的 BLEConnect

图 / 图十为 Adruino IDE Serial Monitor 接收 BLEConnect 的讯息

展望未来

建立相对较複杂的专案代表须将架构融入 Android 的程式码与 sketch。我建议将大部分 Android BLE 的程式码转入服务端,以从 UI 中提取,并简化多种活动和项目的使用。建立更进阶的 sketche 同时,您希望开始使用 Arduino Time Library,以便模您能模拟执行多个迴圈,并同时接收资料 。
我将有关範例添加至 GitHub 存储库当中 ,并在下一篇文章中讨论这些概念。

关于作者

Adrian Stevens 拥有超过 14 年的行动应用程式的开发经验,尤其擅长于 C# 和 C++ 跨平台的开发。 Adrian 专精于使用者介面架构、音讯/讯号处理、感应器和数学等相关领域。Adrian 长期任职于加拿大温哥华,他对技术研究抱有极大的热情,并极具创业精神。他同时还在 Meetup 上进行 C# 跨平台开发。

Adrian 从 2001 开始为 Palm Pilot 和 Pocket PC 等平台开发行动应用程式。后来成功创立了精品行动开发工作室。目前,Adrian 担任行动与跨平台应用程式的讲师,教授相关开发架构和开发策略。

索引

测试英特尔® Edison

关于作者

欢迎加入「Inside」Line 官方帐号,关注最新创业、科技、网路、工作讯息
BLE:连结物联网与智慧装置最重要的桥樑

相关推荐