【转】BCSphere入门教程01:Immediate Alert--不错
原文网址:http://www.ituring.com.cn/article/117570
写在前面
智能硬件开发的起点是智能硬件,在本教程中的每一章节,首先会列出您的蓝牙智能硬件所需要支持的Service,请您确保硬件可以正常的读写特征值,并确认硬件功能正常。可以使用bcsphere-core-dev或者LightBlue对您的硬件进行功能的测试。
硬件最小支持
Service: Immediate Alert
UUID: 00001802-0000-1000-8000-00805f9b34fb
Characteristic: Immediate Alert
UUID: 00002a26-0000-1000-8000-00805f9b34fb
Property: Write || WriteWithoutResponse
Function: 写入Hex值0,设备停止发出声音;写入Hex值1,设备发出声音;
通过本章的学习,您可以:
- 学习到如何使用bc.js连接一个设备
- 学习到如何使用bc.js的接口来操作GATT进行数据的写入
- 通过一个使用HTML展现的Button来对特征值进行操作
Immediate Alert 是Bluetooth4.0定义的最简单的一个智能硬件Service,它只使用到了一个Characteristic。硬件如果支持此Service,那么向其中包含的Characteristic写入一个值,那么设备应当可以发出对应的响声。
Device对象
Device对象是一切GATT操作的基础对象,使用它可以进行连接、查找Service等操作。Device对象中包括很多属性,比如设备广播包、设备生产厂商信息等等,具体可以参考这里。
创建一个Device对象可以用如下的语句:
var device = new BC.Device({deviceAddress:"20:CD:39:AD:65:20",type:"BLE"});
新建一个Device的时候,其deviceAddress和type是必须传入的,在BCSphere中,选中某个设备进入您的webapp的时候,会带入两个‘环境变量’分别是DEVICEADDRESS和DEVICETYPE,分别代表选中的设备地址和对应的设备类型,也可以这样新建在BCSphere的扫描页面选中的设备:
var device = new BC.Device({deviceAddress:DEVICEADDRESS,type:DEVICETYPE});
教程中例子的调试环境是Android,因此可以获得设备的MAC地址。IOS会给每个设备指定一个UUID,不同的IOS设备上对同一个智能设备赋予的UUID是不一样的,因此对于IOS设备,其Device对象应当由bc.js的扫描接口生成,但为了保持教程的清晰性,此章不涉及扫描接口的介绍。
注:当然这并不是说在操作Device的时候必须知道其具体的蓝牙地址和设备类型,通过bc.js提供的扫描接口也可以自动的生成设备对象数组,扫描接口的使用将在第三章进行介绍。
新建出一个device对象后,我们就可以使用它进行对设备的连接了,任何对设备的操作必须在连接设备之后才可以进行:
device.connect(function(){
alert("device is already connected well!");
},function(){
alert("connect error!");
});
连接过后传入了两个函数作为参数,是分别处理设备连接成功和出错的回调函数。 Device对象还拥有两个事件,分别是连接建立和连接断开的事件,可以在device对象建立后使用如下代码监听这 两个事件,当所连接的设备连接状态发生变化的时候(比如设备距离太远而断开),会调用注册在对应事件上的回调函数来进行处理。
device.addEventListener("deviceconnected",function(device){
alert("device:" + s.deviceAddress + "is connected successfully!");
});
device.addEventListener("devicedisconnected",function(device){
alert("device:" + device.deviceAddress + "is connected successfully!")
});
Service对象:
与设备建立连接之后,就可以通过Device的discoverServices接口查找设备中所包含的服务了,具体Service对象中的结构参看此处:
device.connect(function(){
device.discoverServices(function(){
var service = device.getServiceByUUID("1802")[0];
alert("The Service UUID is" + service.uuid);
},function(){
alert("discoverServices error!");
});
},function(){
alert("connect error!");
});
值得注意的是,如果一个service是标准的service,其UUID可以简写为32位的UUID。由于在设备中可能出现同一个UUID的Service,因此getServiceByUUID("1802")接口返回的是一个UUID为00001802-0000-1000-8000-00805f9b34fbService的对象数组,因为这一章中的硬件只有一个UUID为1802的Service,因此我们取其中第一个Service进行操作getServiceByUUID("1802")[0]。
在调用discoverServices接口成功过后,Device对象中将填充一个字段,你可以通过迭代device.services这个数组来获取该设备中所有的service。(同理service中有characteristic的数组,characteristic中有descriptor的数组,后面不再赘述)。
Characteristic对象
特征值对象是操作的重点对象,Service包括一个discoverCharacteristics的接口,获取到对应的Characteristic对象后,可以调用其方法对Characteristic进行‘write/read/subscribe’的操作,具体接口可以参看这里。
var device = new BC.Device({deviceAddress:"20:CD:39:AD:65:20",type:"BLE"});
device.connect(function(){
device.discoverServices(function(){
var service = device.getServiceByUUID("1802")[0];
service.discoverCharacteristics(function(){
var character = service.getCharacteristicByUUID("2a26")[0];
character.write("Hex","01",function(data){
alert(JSON.stringify(data));
},function(){
alert("write error!");
});
},function(){
alert("discoverCharacteristics error!");
});
},function(){
alert("discoverServices error!");
});
},function(){
alert("connnect error!");
});
当然如果希望更快一点获取到characteristic对象并进行操作,可以使用bc.js中Device类提供的prepare接口,调用此接口成功后,硬件设备中的所有服务结构都会被填充到device对象中,但对于服务较多的硬件来说,调用prepare接口可能会造成操作的延迟,在开发的过程中可以酌情选择:
var device = new BC.Device({deviceAddress:"20:CD:39:AD:65:20",type:"BLE"});
device.connect(function(){
device.prepare(function(){
var service = device.getServiceByUUID("1802")[0];
var character = service.getCharacteristicByUUID("2a26")[0];
character.write("Hex","01",function(data){
alert(JSON.stringify(data));
},function(){
alert("write error!");
});
},function(){
alert("device prepare error!");
});
},function(){
alert("connnect error!");
});
总结
至此,您已经可以使用BCSphere对一个您想要操作的设备进行特征值的写入了。关于结合web页面的具体例子,请参看本章提供的源代码。下一章将着重介绍对Characteristic的操作。
【转】BCSphere入门教程01:Immediate Alert--不错的更多相关文章
- 【Zigbee技术入门教程-01】Zigbee无线组网技术入门的学习路线
[Zigbee技术入门教程-01]Zigbee无线组网技术入门的学习路线 广东职业技术学院 欧浩源 一.引言 在物联网技术应用的知识体系中,Zigbee无线组网技术是非常重要的一环,也是大家感 ...
- ExtJS入门教程01,Window如此简单,你怎能不会?
这是一系列ExtJS教程,今天的是第一篇,主要介绍ExtJS中Window的基本用法.希望大家能够支持! 来吧,创建一个漂亮的弹出窗 var win = Ext.create("Ext.Wi ...
- 【CC2530入门教程-01】IAR集成开发环境的建立与项目开发流程
[引言] 本系列教程就有关CC2530单片机应用入门基础的实训案例进行分析,主要包括以下6部分的内容:1.CC2530单片机开发入门.2.通用I/O端口的输入和输出.3.外部中断初步应用.4.定时/计 ...
- 【CC2530入门教程-01】CC2530微控制器开发入门基础
[引言] 本系列教程就有关CC2530单片机应用入门基础的实训案例进行分析,主要包括以下6部分的内容:[1]CC2530微控制器开发入门基础.[2]通用I/O端口的输入和输出.[3]外部中断初步应用. ...
- 大爽Python入门教程 0-1 安装python
大爽Python入门公开课教案 点击查看教程总目录 一 如何找到下载地址并下载 下面展示找到下载地址的方法步骤 嫌步骤太慢可直接跳到第4步, 查看详细下载地址 使用搜索引擎搜索python 打开搜索结 ...
- Angular系列----AngularJS入门教程01:AngularJS模板 (转载)
是时候给这些网页来点动态特性了——用AngularJS!我们这里为后面要加入的控制器添加了一个测试. 一个应用的代码架构有很多种.对于AngularJS应用,我们鼓励使用模型-视图-控制器(MVC)模 ...
- 一步步Cobol 400 上手自学入门教程01 - 基础概念
先学习基础概念 1.COBOL字符:包含: User-defined words 用户定义字符 System-names Reserved words 关键字 2.用户定义字符User-defin ...
- javascript入门教程01
1.javascript中变量的声明和赋值的三种方式 (1)先声明后赋值 var width; width=5; (2)同时声明和赋值变量 var width=5; var x,y,z=10; (3) ...
- MFC入门教程01 Windows编程基础
随机推荐
- ASP.NET页面生命周期总结(2)
HttpAplicationFactory获取一个HttpApplication对象: 内部:1.如果是第一次请求过来,那么就把global文件编译成一个类型.(后续请求来的,就可以直接获取这个类型) ...
- 关于AVAudioPlayer
IOS中有三种播放音频的方式:AVAudioPlayer.音频服务.音频队列. 此文主要讲AVAudioPlayer,其他两个请见相关文章. AVAudioPlayer在AVFoundation框架下 ...
- [002] The Perks of Being a Wallflower - 读后记
The Perks of Being a Wallflower 今天(2015年10月30日 18:26:17)读完"The Perks of Being a Wallflower" ...
- 数学符号π (Pi)、Σ(Capital Sigma)、μ (Mu) 、σ(sigma)、∏(capital pi), ∫(Integral Symbol)的来历
1.π (Pi; periphery/周长) March 14 marks Pi Day, the holiday commemorating the mathematical constant π ...
- GitHub Windows客户端部署
下载网址:https://windows.github.com 点击下载按钮即可下载一个小程序,这个小程序会去服务器端下载完整的Windows版客户端,然后自动安装. 如果安装出错的话,那就打开IE浏 ...
- nagios 完全配置手册
Linux下Nagios的安装与配置 一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机 ...
- 网站开发常用jQuery插件总结(14)图片修剪插件Jcrop
一.插件功能 用于对图片进行修剪.但是在使用Jcrop时,还需要配合服务器端开发语言(如asp.net,php等)使用. 二.官方地址 http://deepliquid.com/content/Jc ...
- JDK重要包和Java学习方法论
以下内容摘自:万能的林萧说:一篇文章教会你,如何做到简历中要求的“要有扎实的Java基础” 第一级别:精读源码 该级别包含的包如下: java.io java.lang java.util 第二 ...
- Spring-Boot-XML-Restful-Service
http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-write-an-xml-rest-service ...
- PHP小记录
正的framework(大量使用) thinkphp(部分使用) cakephpyii(极少使用) [一]函数 1:函数的声明:每个函数的第一行都是函数开头,有声明函数的关键 ...