低功率蓝芽BLE带领物联网大爆发

位置:主页 > U生活墙 >低功率蓝芽BLE带领物联网大爆发 > 时间:2020-06-17 浏览:596次 点赞:128条
低功率蓝芽BLE带领物联网大爆发
SONY DSC
简介

低功率蓝芽通讯在商业产品与业余应用上的使用大量爆发,主要归功于它的低成本以及低功耗的要求。当您要从您的 Android 手机或平板与英特尔® Edison 或英特尔® Galileo 专案沟通时,这让它成为一个最佳的选择。

这份文件的目标是展示如何编写程式,以及使用免费软体、低成本、现成的硬体在英特尔 Edison 与配备蓝芽 4.0 的安卓装置之间建立蓝芽通讯。

什幺是蓝芽?

低功率蓝芽,蓝芽 LE ,或 BLE是由蓝芽技术联盟设计与销售的无线个人区域网路技术。它的主要目标是健康照顾、健身、安全、自动化和家庭娱乐工业上的应用。

低功率蓝芽原先是诺基亚在 2006 年以名为  的技术推出。它在 2010 年蓝芽 4.0 版本的时候被加入蓝芽的标準。

低功率蓝芽可以使用明显比标準蓝芽更少的功耗来做连结,可是仍然提供标準蓝芽的大部分的连接功能,而且可以达到近乎一半的连接距离 。配备电池的装置如果使用低功率蓝芽,可以在不用充电或更换电池的情况下运行数年。例如 Estimote 的 Beacon 装置已经宣称 3 年的电池寿命 。

硬体

我们将着重于英特尔 Edison,但是大部分的内容依旧适用于英特尔 Galileo 。就我们的物联网专案而言,硬体感测器和控制来自于 Seeed Studio 的 Grove 系统。尤其是我将使用:

关于硬体的几项说明:
  1. The Grove Starter Kit  标示为专为英特尔 Galileo 所设计,但它也适用于 Edison 。您也可以单独购买 Grove 组件,但套件将会更将划算。
  2. 在开发过程我使用 Lenovo 平板电脑,但是任何其它执行 Android 3 并支援蓝芽 4.0 的 Android 装置也都可行。
  3. 我使用我的 Dell XPS12 为英特尔 Edison 和 Android 专案编写程式。也可以使用 Mac* 或 Linux* 系统来进行开发。
软体

我使用下列几项免费的软体工具。如果要查看这个例子,您需要下载并安装下列各项:

上述所有软体在 Windows 、 Mac 和 Linux 皆有提供,但是我将特别着重于 Windows 上的安装。

硬体详细资讯英特尔 ® Edison

英特尔 ®Edison 是低成本、通用型的运算平台系列计画的第一个产品。它专为快速、轻巧的製造物联网专案的雏形所设计,同时可以提供準商业化产品的途径。

英特尔 ®Edison 使用 22 奈米英特尔 ® SoC ,它包含了双核,并可达到 500 MHz 的执行速度。它支援 40 个 GPIOs ,并包含了 1GB LPDDR3 RAM 、 4 GB EMMC 储存,以及双频 Wi-Fi* 和蓝芽于一身。

Edison 执行完整的 Linux 核心,并且为了发挥 Edison 的最佳效能,您可以编写硬体层的 Linux 程式。

但是 Edison Linux 还以 Linux 程式的形式包含了 Arduino 的实做。简而言之,这意谓着您可以编写您所熟悉的 Arduino sketches,并在 Edison 开发板上执行; 而这正是我们将做的。

更多英特尔 Edison 资讯: http://www.intel.com/content/www/us/en/do-it-yourself/edison.html

Arduino Breakout 板子

相容于英特尔 Galileo 的 Arduino breakout 板子有着两个用途。首先,它提供一个大的雏型平台可以轻鬆的存取 IO 脚位。第二,它提供兼容 Arduino 的硬体平台,这意谓着我们可以使用 Arduino shields 和英特尔 Edison 。图 1 展示 Edison 安装在 Arduino breakout 板子上。

低功率蓝芽BLE带领物联网大爆发
图 1 展示 Edison 安装在 Arduino breakout 板子上
Grove Starter Kit Plus

这个套件的全名是 “Grove Starter Kit Plus -- Intel® IoT Edition for Intel® Galileo Gen 2 Developer Kit”,它最初是专为英特尔 Galileo 第二代开发板所设计。幸运的是它可以透过 Arduino breakout 板子以完全兼容英特尔 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

并且收藏 Grove Wiki 页面为书籤 :

http://www.seeedstudio.com/wiki/index.php?title=Main_Page#Grove

低功率蓝芽BLE带领物联网大爆发
Grove BLE V1

我们将使用 Grove 低功率蓝芽 v1 模组,该模组并不包含在入门套件中,但与 Grove 屏蔽器和连接器的接脚相容。它也是成本相对低廉的 BLE 附件,这是我在撰写本文时所可找到最便宜的选择。

The Grove BLE v1 是基于工业标準 Texas Instruments CC2540。许多其他设备接使用这个晶片。如果您也有其它的 TI CC2540 BLE 模组,例如 RedBear BLE Mini,您应该可以轻鬆修改範例程式。

Grove BLE v1 详情:

http://www.seeedstudio.com/wiki/index.php?title=Grove_BLE_v1&uselang=en

请注意英特尔® Edison 包含一个板上的无线模组,它可以支援 Wi-Fi 和蓝芽 4.0/BLE;然而, Grove BLE 模组大大简化了硬体与软体的设定。使用 Grove BLE也意味着这些专案可以简单的适用于英特尔 Edison 。

低功率蓝芽BLE带领物联网大爆发
在 Android 装置上侦错

BLE 支援被增加到 Androis 4.3 版 。您需要执行 4.3 或更新的版本来透过 BLE 沟通。

更多有关 Android 蓝芽的资讯 :

https://developer.android.com/guide/topics/connectivity/bluetooth-le.html

如果您是 Android 开发的新手,则您需要在手机或平板电脑上启用开发人员选项,然后用它来执行与侦错您的软体。打该设置 app ,捲动到底部并选择 “About device”,然后点击创建编号七次,以解锁开发人员选项。

设置的下方显示开发人员选项;确认选取“USB debugging”。

更多有关 Android 开发者选项: http://developer.android.com/tools/device.html

安装软体并且準备开始编写程式!相容英特尔 ® Galileo 的 Arduino IDE

您需要专门给 Arduino IDE 的版本,以便将 Sketches 布署到英特尔 Edison 或 Galileo 。撰写本文之时版本为 1.5.3 并可从下列连结下载:

https://software.intel.com/en-us/get-started-arduino-install

英特尔® Edison 驱动程式

您也需要从上述连结下载并安装英特尔 Edison 驱动程式。它应该位于 “Driver Software”下方页面的最后一个连结。在撰写本文的时候它的版本为 1.0.0。

如果您需要更进一步的说明,以下是十分有用的入门指南:

software.intel.com/iot/getting-started

Android Studio

Android Studio 是一个基于 IntelliJ IDEA *〈https://www.jetbrains.com/idea/ 〉,针对 Android 开发功能全新的 Java*IDE 。虽然在此阶段还只是测试版,但它的性能稳定,功能健全。如果你习惯用针对 Android 开发的 Eclipse* 或是 IntelliJ IDEA ,用下列这两个程式对你来说应该都没有问题。

Android Studio 包含 Android SDK,所以能简化其安装过程。简化至只需下载、提取解压缩档案中的内容,并启动在 bin 资料夹中的 studio.exe 程式。

更多有关 Android Studio

Android SDK

点选在 Android Studio 工具栏的「SDK manager」,以下载你可能需要的附加 SDK 封包。配置 Android SDKs 等等介绍已超过我们这次的範围,你可以在下列网址得到额外的资讯:

https://developer.android.com/sdk/installing/adding-packages.html

若你在之前就已安装 Android SDKs ,你可以配置 Android Studio 指向正确的路径,如图 4 所示。

在 Android Studio 点选,并且设定路径。

低功率蓝芽BLE带领物联网大爆发
测试英特尔® Edison

在开始以下步骤之前,请先确认你可以启动 Blink 示範 sketch 。 Blink 示範 sketch 位于  folder 的 Arduino IDE 下载封包之中。

更多资讯于 Edison 入门手册:

https://communities.intel.com/community/makers/edison/getting-started

Android Hello World

安装 Android Studio 之后,请确认可以创造新专案,并且在你的 Android 装置上启动。

  1. 连接你的 Android 装置和个人电脑
  2. 开启 Android Studio
  3. 选择「New Project…」
  4. 选择一个名称和地点,点选「Next」3 次 〈API 15/Blank Activity)
  5. 点选「Finish」等待程式製作专案 〈大约花费 20 秒以上的时间〉
  6. 按下在工具栏中绿色的「Play」按钮
  7. 选择你的装置,并点选「OK」

如果按照步骤完成,你会看到「Hello world!」显示在你的 Android 装置萤幕上。〈图 5〉

低功率蓝芽BLE带领物联网大爆发
BLE 如何运作?

BLE 提供必要的短数据,并关闭电路。这也是 Bluetooth LE 如何达成低效能的目标。比较于常见的传统蓝芽配对,BLE 装置只在需要传送或是接收讯息时连结。

BLE 在通讯方面有强力的结构。装置提供传送和接收讯号的服务。这些服务拥有其独特的「特性」,这个「特性」决定分享的资讯。更详细来说,「特性」拥有描述词来定义数据。例如:一个命名为「心脏指数感测器」的服务包含着「心脏指数测量」特性。

大多数的蓝芽 LE APIs 支援搜寻当地装置,找到装置的服务、特性和描述词。

BLE 的关键和概念

以下是你在开始一个 BLE 专案前,必须要知道的 BLE 关键术语和概念的简述:

通用属性设定档

GATT 设定档是蓝芽低耗能的连接中,传送及接收属性数据的通用规格。所有近期的 LE 应用程式设定档都是基于 GATT 设定档所编写。蓝芽技术联盟 〈SIG〉 先前就已经先定义出 BLE 装置的设定档数量。 这些设定档是用于介绍装置的使用方法。

属性协定

属性协定 〈ATT〉 是 GATT 遵从的原理。属性协定 〈ATT〉 是一个特别设计给 BLE 装置的完美协定。属性协定 〈ATT〉 通讯会尽量发送最少量的位元数据。 每一个属性都拥有一个通用唯一识别码 〈UUID〉。唯一识别码 〈UUID〉 是一个用于唯一识别资讯的标準化 128 位元 ID 码。经由属性协定 〈ATT〉 传送的属性被格式化为特性和服务。〈定义如下〉

特性

特性包含了一个单值和 0,或是更多的描述词 〈如下所示〉 来描述特性的值。

描述词

描述词定义了描述特性值的属性。这些可能是人可辨识的描述词,指定单元、测量,或是定义一个可接受的值範围。

服务

服务是一系列的特性。你可以在 https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx 找到一整列现有的 GATT 为基础的设定档。

从 Android 传送资讯到英特尔® Edison前提的必要条件

文章接下来的部分是假定你有设置一个针对英特尔 Edison 跟安卓配置的开发程式。请确认你已经完成以上步骤,若有需要请複习文章之前的部分。

 Android 的 BLE

你可以在 GithHub 下载已完成的专案:

https://github.com/adrianstevens/Edison_to_Android_BLE/tree/master/Android/BLEConnect

但是我建议你製作自己的专案,并参考上面的连结逐行写入代码。

製作一个新专案

打开 Android Studio 〈或你自行选择的 IDE〉,创造一个新的空白安卓应用程式,并且将其命名为 BLEConnect。别忘记设定 Minimum SDK 到达至少 API 18,不然无法使用 BLE APIs。

低功率蓝芽BLE带领物联网大爆发

下一步,打开 AndroidManifest.xml 并填入下列内容至   标籤之中,以增加所需的权限。


设置 UI

为了让事情简单一点,我们只会利用预设值设定。但是必须针对 TextView 设定一个 ID。打开 layout -> activity_main.xml,选择 TextView 并设定 ID 为 mainText ,这样我们才可以在代码中引用 ID。

低功率蓝芽BLE带领物联网大爆发
MainActivity

在这个专案之中,剩余的代码都会进入 MainActivity 里面。如果你正在逐行编写代码,请注意 Android Studio 会自动的检测出你代码的缺失,并即时的要求你补充修改。

样本代码将会:

  1. 确认安卓装置中的 BLE 支援
  2. 搜寻周围的 BLE 装置
  3. 认证并连接至 Grove BLE 组件
  4. 搜寻已知传讯服务的可用服务
  5. 在传讯服务中找寻传送特性
  6. 利用编写特性值传送讯息

我不会在这份文章中解说每一个代码,但是我们会看到它们的核心概念。

Class 级变数和静态变量

我们会在连接至 BLE 组件、搜寻服务、传送讯息时保存一些数值。我们也会为 Grove BLE v1增加一些已知的静态变量。若你使用不同的组件,你有可能要改变它们。我特别推荐定义传送和接收的特性,如下:

CHARACTERISTIC_TX = "0000ffe1-0000-1000-8000-00805f9b34fb"
CHARACTERISTIC_RX = "0000ffe1-0000-1000-8000-00805f9b34fb"

状态帮手方法

为了容易了解,我们在先前标记的 TextView 上来展示我们的进展。代码包含了一个叫做 statusUpdate 的简易帮手方法。我们利用 statusUpdate 编写状态讯息至萤幕和控制台。他也可以引领回 UI 线上,所以我们可以从任何线程呼叫它。

连接至 BLE 装置

首先确认 BLE 是否在我们的装置中,呼叫 getSystemService  引用 Bluetooth Manager , 然后用  getAdapter 方法取得引用到 BluetoothAdapter 目标以引用 Bluetooth Manager 。或者,你可以直接从 Bluetooth Manager class 利用静态帮手方法 getDefaultAdapter 。

搜寻周围的 BLE 装置

我们利用计时器设定一段期间来搜寻装置。我们可以呼叫在 Bluetooth manager 目标上的 startLeScan ,并交付至回传目标以在找到装置时得到通知。

API 持续的扫描装置,所以我们会在 LeScanCallback  得到从不同装置回传的通知。我们在保存装置之前会确认装置入口的唯一性。我们也会确认我们的组件装置名称,并且保存引用。在以下例子之中,我们并不需要保存此装置。

@Override

public void onLeScan

{

}

找寻传讯服务

大多数的 BLE 装置提供一个或更多的通讯 / 互动服务。在我们 Grove BLE 中的 TI CC2540 晶片拥有一个重要服务,ID 为「0000ffe0-0000-1000-8000-00805f9b34fb」。下一步我们会找出并保存引用至那个服务。

首先,我们必须连结至装置。利用 BluetoothGattCallback 目标并推翻 onConnectionStateChanged and onServicesDiscovered,才能在连接到装置或是找到服务时得到通知。请特别注意在使用 onConnectionStateChanged 方法时,当我们得到已连接的通知,就可以呼叫 mBluetoothGatt.discoverServices 以搜寻服务。在我们找到所要的服务后,就可以继续程序并且传送讯息。

@Override

public void onConnectionStateChange

{

}

@Override

public void onServicesDiscovered

{

}

观看下列文件,其他还有许多方法可以被推翻

传送一个讯息

在範例代码中有一个 sendMessage 方法。我们利用其 UDID 认证特性,并呼叫该特性上的 setValue 。最后,我们呼叫在 BluetoothGatt 引用中的 writeCharacteristic,传送特性值,传送数据。

有许多的 setValue  过载,其实可以使用一个较轻易的过载传送符号串。但是大多数 BLE 沟通传送回报时是使用位元,所以这是一个相对来说比较实用的例子。

现在,是时候设定英特尔 Edison 了。

使用 Grove Breakout Board 和 BLE 组件设定英特尔® Edison

第一步始于组装基本硬体。如果你还没完成,请将英特尔 Edison 安装到 Arduin 的分线版。

第二步,在安装 Grove 扩充版时,将扩充版底部的针状物对準 Arduino 的分线版。再连接 Grove BLE v1 至 UART 串列埠。

低功率蓝芽BLE带领物联网大爆发
我们的第一个 Sketch

我们正在做 Android 装置和英特尔 Edison 之间的简单串行通信。但是我们也希望看见有那些东西正在被传输和接收,所以我们利用 Arduino IDE 内建的串行感测器来观察。

观看 Sketch 完整版本:

https://github.com/adrianstevens/Edison_to_Android_BLE/tree/master/Sketches/SimpleSerial

打开英特尔 Arduino IDE 并创造一个全新的 Sketch。储存它之后,将其命名为「SimpleSerial」。英特尔 Edison 拥有两个串列埠可以使用,和其他的 Arduino 相容面板不同。因为两个串列埠允许我们在 Edison 经由 Grove BLE 收发数据时,同时连接我们的个人电脑,所以非常的实用。你可以利用 microUSB 连结主 UART 串列埠至个人电脑。我们使用在 Grove 扩充版上已连结至 BLE 组件的 UART 串列埠连接器。若已经在英特尔 Edison 上配置完成,我们的 Sketch 就会自动启动。它将会先启动 setup 功能,然后继续的无限呼叫 loop 功能。这个功能可以让我们读取并命令从串行连结的输入。

初始化串行连结

Grove BLE 的初始连结速度是 9600 baud rate,所以我们就从这个开始。我们必须配置两个串列埠以利用此速度。我们也必须向 Grove BLE 传送数个 AT 命令,重新设定,使其在一个乾净的状态。你可以在 sketch 的 setup  功能之中看到这些动作。

请注意到我们第一个配置的「Serial」是 microUSB UART 串列埠。第二个「Serial 1」是 UART 串列埠和 Grove BLE 的连结。

迴圈

我们在这个 sketch 中所做的都是读取从别的串列埠来的数据,并将其传送至另一个串列埠。为了达成这个动作,必须呼叫在串列埠的 read 功能,此功能会给我们一个单一特性。接下来呼叫另一个串列埠的 print 功能。

Edison 迴圈够快,我们可以轻鬆达到 9600 baud rate。

配置 Sketch

现在,点选在 Arduino IDE  〈打勾处〉 的核对 〈verify〉 按钮,并修正所有的打字错误。在核对之后,请确认你的英特尔 Edison 已连结至你的个人电脑,并上传你的 sketch 〈点选右箭〉。上传完毕后, sketch 将会开始循环迴圈,就準备可以从安卓应用程式连结。现在开启在 Arduino IDE 的串行感测器 〈右上方放大镜〉,我们就可以收发数据。

在 sketch 开始在英特尔 Edison 上运行后,启动 Android BLEConnect 应用程式。你应该可以看见讯息:「Hello Grove BLE」出现在串行感测器上。

如果这个方法行不通,那问题应该出在 Android 应用程式上。确认显示的状态,它会告诉你问题在哪里。

在 GitHub repo 中有一个 sketch 也会在 Grove LCD 显示讯息。确认你的 Grove 扩充版已设定在 5V,并连接 LCD 显示器至任何一个 I2C 连结。

低功率蓝芽BLE带领物联网大爆发
低功率蓝芽BLE带领物联网大爆发
展望未来

製作一个更複杂的专案意指将建筑学放入 Android 代码和 Sketch 的编写之中。我建议将大部分的 Android BLE 代码移入服务之中,从 UI 抽象化代码,让其更容易在多样的活动和专案中操作。当你製作更高级的 sketch 时,你将会需要 Arduino Time Library ,让你可以一边接收档案,一边模拟更多不同的迴圈。我会持续的在 GitHub 存库中增加範例 ,我也会在之后的文章中讨论这些概念。

关于作者

Adrian Stevens 拥有 14 年以上的开发移动装置应用程式的资历;善于 C# 和 C++ 的跨平台开发。Adrian 的专业包含建构使用者介面、音频 / 信号程序、感测器和数理。 Adrian 长期任职于加拿大的温哥华,拥有对科技的热情和创业家的精神。他同时在 Meetup 上进行 C# 跨平台开发。

Adrian 为 Palm Pilot 、 Pocket PC 等等平台在 2001 年首次开发移动装置应用程式。他成功地创立并带领一个精品移动装置开发工作室。Adrian 最近任职移动装置和跨平台应用程式的指导员,指导建构和开发的策略。

欢迎加入「Inside」Line 官方帐号,关注最新创业、科技、网路、工作讯息
低功率蓝芽BLE带领物联网大爆发