Bluetooth LE(低功耗蓝牙) - 第一部分
前言
在写这篇文章的时候,谷歌刚刚发布了Android Wear ,摩托罗拉也发布了 Moto 360 智能手表。Android Wear的API还是相当基本的,是很好的文档材料,而且还会不断的更新,所以我不打算写一个关于他们的教程(至少现在还没有)。有趣的是 Moto 360 支持 Android 4.3及之后的版本。这明显是Bluetooth LE只有在Android 4.3及以后才被支持的原因,这也意味着 Moto 360 支持Bluetooth LE。Bluetooth LE 将不仅是可穿戴技术的核心技术,而且也是许多物联网设备的核心技术。在这个系列博客中我们将了解 Bluetooth LE 在 Android 上的使用。
Bluetooth 与 Bluetooth LE简介
蓝牙自20世纪90年中后期就已经出现,并已成为短距离设备的对等网络的标准。一个缺点是它需要消耗一点电量,这在移动设备上是一 个问题,而且在电池更小的可穿戴设备中需要消耗更多电。另一个缺点是两个蓝牙设备必须配对才可以相互通信。虽然配对过程只需要执行一次,但对用户来说这是一个痛苦的经历。
Bluetooth Low Energy(低功耗蓝牙),缩写为Bluetooth LE,或BLE,作为蓝牙4.0 (有时称为蓝牙智能)规范的一部分,并针对上述的这些具体问题而被引入。就提高电池寿命而言,许多制造商声称一些传感器能维持数月甚至数年的时间(我必须承认我有点怀疑制造商的估计一般是基于最好的情况下,而不涉及实际的使用情况)。正如前面已经提到的,谷歌在Android 4.3(API 18)中加入了对BLE的支持。
Bluetooth 与 Bluetooth LE 的区别
对于那些已经熟悉蓝牙开发的童鞋来说,BLE提供了一个诸如学习曲线的玩意,因为它是一个非常不同的野兽(译者注:这句不知道该怎么翻译啦,求各位帮忙看看, 原文是: BLE presents something of a learning curve because it is a rather different beast ),所以让我们大致地看下他们的主要区别。
第一个主要区别是在配对过程。传统的蓝牙开发,配对两个设配主要是用户的任务,但使用BLE,配对的任务更多的在于开发商。这是一件好事,因为从用户的角度来说整个配对过程变得更直接了当。
另一个主要的区别是通信本身。传统的蓝牙开发通信方式有许多选择,从根本上说都是基于和标准的Sockets非常相似的Sockets架构。本质上我们的数据通过Sockets传递,并且它是两个设备知道数据流格式的一种实例。BLE则采用不同的方法,它以属性为中心进行数据通信。在两个设备之间共享的属性本质上是一个原子数据(整数或字符串)。属性可用于表示数据或控制传感器的行为。例如,在一个心率监测仪中一个属性可能包含了当前的心率值(数据)以及另一个可能包含心率值更新频率的设置(行为)。
关于本系列文章
在进一步了解之前,我们有必要定义一些角色。通常我们将传感器(心率监视器,温度传感器,等)连接到一个主机(智能手机,平板电脑,等)。在我们的例子中,主机从一个属性中读数据的同时可以通过写入一个新值到另一个属性中以控制传感器的行为。其实控制传感器行为的情况会更多一点,因为主机也可以注册监听一个属性的改变,这个我们将在适当的时候再去讨论。
在本系列的文章中我将使用的设备是 Texas Instruments SensorTag 它是一个具有BLE功能的多传感器开发套件。价格很便宜,在£20(25美元)之内。同时还有环境温度,红外温度,相对湿度,气压计,磁力计,加速度计,陀螺仪和手动开关等设备–所有这些都可以通过BLE访问。在这个系列博客中我们将开发一个应用程序,显示从SensorTag中获得的环境温度和湿度值。
非常抱歉在这篇文章中没有代码,因为我觉得在深究BLE之前了解一点背景知识很重要。不过在下一篇文章肯定会给出一些代码 -- 我保证!
Bluetooth LE(低功耗蓝牙) - 第一部分的更多相关文章
- Bluetooth LE(低功耗蓝牙) - 第三部分
回顾 在本系列的前两篇文章中,我们已经了解了一些关于Bluetooth LE的背景并建立一个简单的Activity / Service框架. 在这篇文章中,我们将探讨Bluetooth LE的细节 ...
- Bluetooth LE(低功耗蓝牙) - 第二部分
回顾 在前面的文章中我们介绍了Bluetooth LE的背景也说明了我们在本系列文章中将要开发什么,但是还没有实际的代码.我们将在这篇文章中纠正这一点,我们将通过定义 Service/Activity ...
- Bluetooth LE(低功耗蓝牙) - 第四部分
回顾 在本系列前几篇文章中我们完成了BLE设备的发现 , 为我们的app通过BLE显示从TI SensorTag设备中获取到环境温度和湿度的工作打下了基础.在这篇文章中我们将着眼于连接到我们所发现的S ...
- Bluetooth LE(低功耗蓝牙) - 第五部分
回顾: 在本系列前面的文章中我们完成了发现BLE传感器并与之建立连接.现在只剩下从其中获取数据了,但是这并没有看起来那么简单.在这篇文章中我们将讨论GATT的特点以及如何促进主机与传感器之间的数据交换 ...
- Bluetooth LE(低功耗蓝牙) - 第六部分(完)
在本系列前面的文章中我们已经了解了,在我们从一个TI SensorTag中获取温度和湿度数据之前,我们需要经历的各种步骤.在本系列中的最后一篇文章,我们将完成注册并接收SensorTag的通知,并接收 ...
- Bluetooth Low Energy——蓝牙低功耗
Android4.3(API级别18)引入内置平台支持BLE的central角色,同时提供API和app应用程序用来发现设备,查询服务,和读/写characteristics.与传统蓝牙(Classi ...
- 【Android应用开发】Android 蓝牙低功耗 (BLE) ( 第一篇 . 概述 . 蓝牙低功耗文档 翻译)
转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/50515359 参考 : -- 官方文档 : https://develope ...
- Android使用BLE(低功耗蓝牙,Bluetooth Low Energy)
背景 在学习BLE的过程中,积累了一些心得的DEMO,放到Github,形成本文.感兴趣的同学可以下载到源代码. github: https://github.com/vir56k/bluetooth ...
- 低功耗之战!ANT VS Bluetooth LE
利用近距离无线通信技术将手机及可穿戴式传感器终端等与智能电话连接起来,实现新的功能.最近,以此为目标的行动正在展开.其中备受关注的近距离无线方式是“ANT”和“Bluetooth LE”.为了在各种便 ...
随机推荐
- RedHat7配置IdM server
IdM服务器是一个集成身份验证服务器. Figure 1.1. The IdM Server: Unifying Services Authentication: Kerberos KDC Kerbe ...
- Android studio错误及解决办法
错误: Cannot launch AVD in emulator. Output: emulator: ERROR: GPU emulation is disabled. Only screen s ...
- C#中方法的参数修饰符
做项目久了,有的时候真的需要静下心来认真的总结一下自己所用到的技术,而不是每天依葫芦画瓢,每天忙忙碌碌,到头来不知道自己忙了个啥,学了什么,自己到底掌握了多少知识.所以我想回顾一下C#的基础知识,把重 ...
- java中的递归方法
一.含义 递归算法是一种直接或间接地调用自身的算法.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 二.例子 99乘法表的例子 1:普通实现99乘法表太 ...
- html-----002
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- javascript 浏览器执行断点
在javascript代码里面有个语句可以让浏览器执行到这里的时候触发断点,这个命令就是 debugger 很好用
- Open judge 06月度开销
06:月度开销 总时间限制: 1000ms 内存限制: 65536kB 传送门 描述 农夫约翰是一个精明的会计师.他意识到自己可能没有足够的钱来维持农场的运转了.他计算出并记录下了接下来 N (1 ≤ ...
- Best Time to Buy and Sell Stock III 解题思路
题目要求: 最多交易两次,并且只能买卖完之后再买. 总思路: 在数组中找一个适当的点i,使得i左右两边profit之和最大. 思路: 1.从左往右扫描,left[i]记录包括i元素以内的左部的maxp ...
- 亲手用模块化方式写一个jquery QQ表情插件。
在回复或是评论的时候,很多时间都需要有回复表情的功能,然后而需要插入QQ表情可以是最常见的. 插件也写多很多个了,这次写插件就下了一个决定.就是使用模块化来开发. 最后在我的源代码中有这样子一段: v ...
- js 高级函数 之示例
js 高级函数作用域安全构造函数 function Person(name, age) { this.name = name; this.age = age; ...