BLE 和经典蓝牙Android编程说明
- 格式:pdf
- 大小:757.34 KB
- 文档页数:21
AndroidBLE开发——Android⼿机与BLE终端通信初识设备:MX5⼿机⼀台,农药残留检测仪⼀台(BLE终端设备)⽬的:实现⼿机控制仪器,如发送打印指令,仪器能进⾏打印操作等关于如何打开蓝⽛,配置相关权限,搜索BLE设备等步骤⽹上有很多资料,这⾥就不多做作解释了,本⽂主要讲通信⽅⾯的内容。
需要注意的是搜索BLE设备的结果是异步返回的,在BluetoothAdapter.LeScanCallback这个回调中返回,并且搜索过程是⼀个⾮常耗电的过程,所以我们应该做好相应处理,例如可以让它搜索10s就停⽌搜索等。
在我们理解Android设备与BLE终端设备通信过程之前,我们需要来先了解⼏个类:BluetoothGatt:BluetoothGatt 是我们⽤的最多,也是我们最重要的⼀个类,为了尽可能通俗的理解,这⾥我们可以把它看成Android ⼿机与BLE终端设备建⽴通信的⼀个管道,只有有了这个管道,我们才有了通信的前提。
BluetoothGattService:蓝⽛设备的服务,在这⾥我们把BluetoothGattService⽐喻成班级。
⽽Bluetoothdevice我们把它⽐喻成学校,⼀个学校⾥⾯可以有很多班级,也就是说我们每台BLE终端设备拥有多个服务,班级(各个服务)之间通过UUID(唯⼀标识符)区别。
BluetoothGattCharacteristic:蓝⽛设备所拥有的特征,它是⼿机与BLE终端设备交换数据的关键,我们做的所有事情,⽬的就是为了得到它。
在这⾥我们把它⽐喻成学⽣,⼀个班级⾥⾯有很多个学⽣,也就是说我们每个服务下拥有多个特征,学⽣(各个特征)之间通过UUID(唯⼀标识符)区别。
总结:当我们想要⽤⼿机与BLE设备进⾏通信时,实际上也就相当于我们要去找⼀个学⽣交流,⾸先我们需要搭建⼀个管道,也就是我们需要先获取得到⼀个BluetoothGatt,其次我们需要知道这个学⽣在哪⼀个班级,学号是什么,这也就是我们所说的serviceUUID,和charUUID。
W hatever is worth doing is worth doing well.Never put off the work till tomorrow what you can put off today.A ndroid开发之蓝牙(Bluetooth)操作(一)--扫描已经配对的蓝牙设备分类: android 2012-08-14 16:41 1224人阅读 评论(10) 收藏举报androidbuttonnull通讯apiimport一. 什么是蓝牙(Bluetooth)?1.1 BuleTooth是目前使用最广泛的无线通信协议1.2 主要针对短距离设备通讯(10m)1.3 常用于连接耳机,鼠标和移动通讯设备等.二. 与蓝牙相关的API2.1 BluetoothAdapter:代表了本地的蓝牙适配器2.2 BluetoothDevice代表了一个远程的Bluetooth设备三. 扫描已经配对的蓝牙设备(1)注:必须部署在真实手机上,模拟器无法实现首先需要在AndroidManifest.xml 声明蓝牙权限<user-permission android:name="android.permission.BLUETOOTH" />配对蓝牙需要手动操作:1. 打开设置--> 无线网络 --> 蓝牙 勾选开启2. 打开蓝牙设置 扫描周围已经开启的蓝牙设备(可以与自己的笔记本电脑进行配对),点击进行配对电脑上会弹出提示窗口: 添加设备显示计算与设备之间的配对码,要求确认是否配对手机上也会显示类似的提示.四. 扫描已经配对的蓝牙设备(2)4.1 获得BluetoothAdapter对象4.2 判断当前移动设备中是否拥有蓝牙4.3 判断当前移动设备中蓝牙是否已经打开4.4 得到所有已经配对的蓝牙设备对象实现代码如下:MainActivity:import java.util.Iterator;import java.util.Set;import android.app.Activity;import android.bluetooth.BluetoothAdapter;import android.bluetooth.BluetoothDevice;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {private Button button = null;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);button = (Button)findViewById(R.id.buttonId);button.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v) {//获得BluetoothAdapter对象,该API是android 2.0开始支持的BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();//adapter不等于null,说明本机有蓝牙设备if(adapter != null){System.out.println("本机有蓝牙设备!");//如果蓝牙设备未开启if(!adapter.isEnabled()){Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);//请求开启蓝牙设备startActivity(intent);}//获得已配对的远程蓝牙设备的集合Set<BluetoothDevice> devices = adapter.getBondedDevices();if(devices.size()>0){for(Iterator<BluetoothDevice> it = devices.iterator();it.hasNext();){BluetoothDevice device = (BluetoothDevice)it.next();//打印出远程蓝牙设备的物理地址System.out.println(device.getAddress());}}else{System.out.println("还没有已配对的远程蓝牙设备!");}}else{System.out.println("本机没有蓝牙设备!");}}});}}。
android平台蓝⽛编程Android平台⽀持蓝⽛⽹络协议栈,实现蓝⽛设备之间数据的⽆线传输。
本⽂档描述了怎样利⽤android平台提供的蓝⽛API去实现蓝⽛设备之间的通信,蓝⽛设备之间的通信主要包括了四个步骤:设置蓝⽛设备、寻找局域⽹内可能或者匹配的设备、连接设备和设备之间的数据传输。
以下是建⽴蓝⽛连接的所需要的⼀些基本类:类:代表了⼀个本地的蓝⽛适配器。
他是所有蓝⽛交互的的⼊⼝点。
利⽤它你可以发现其他蓝⽛设备,查询绑定了的设备,使⽤已知的MAC地址实例化⼀个蓝⽛设备和建⽴⼀个(作为服务器端)来监听来⾃其他设备的连接。
类:代表了⼀个远端的蓝⽛设备,使⽤它请求远端蓝⽛设备连接或者获取远端蓝⽛设备的名称、地址、种类和绑定状态。
(其信息是封装在bluetoothsocket中)。
Bluetoothsocket类:代表了⼀个蓝⽛套接字的接⼝(类似于tcp中的套接字),他是应⽤程序通过输⼊、输出流与其他蓝⽛设备通信的连接点。
Blueboothserversocket类:代表打开服务连接来监听可能到来的连接请求(属于server端),为了连接两个蓝⽛设备必须有⼀个设备作为服务器打开⼀个服务套接字。
当远端设备发起连接连接请求的时候,并且已经连接到了的时候,Blueboothserversocket类将会返回⼀个bluetoothsocket。
Bluetoothclass类:描述了⼀个蓝⽛设备的⼀般特点和能⼒。
他的只读属性集定义了设备的主、次设备类和⼀些相关服务。
然⽽,他并没有准确的描述所有该设备所⽀持的蓝⽛⽂件和服务,⽽是作为对设备种类来说的⼀个⼩⼩暗⽰。
下⾯说说具体的编程实现: 必须确定你的设备⽀持蓝⽛,并保证他可以⽤。
如果你的设备⽀持蓝⽛,将它使能。
当然,有两种⽅法,⼀种是在你的系统设置⾥开启蓝⽛,另外⼀中是在你的应⽤程序⾥启动蓝⽛功能,第⼀种⽅法就不讲了,具体讲⼀个第⼆种⽅法:⾸先通过调⽤静态⽅法获取蓝⽛适配器bluetoothadapter,以后你就可以使⽤该对象了。
Android 蓝⽛BLE开发完全指南⽬录介绍连接模式GATT协议使⽤过程扫描连接设备连接发现服务数据传输其他断开连接参考总结介绍1.BLE 是 Bluetooth Low Energy 的缩写,意思为低功耗蓝⽛。
由蓝⽛技术联盟(Bluetooth SIG)设计的⽆线通讯技术,主要⽤于医疗,健⾝,安全和家庭娱乐⾏业。
与传统蓝⽛相⽐,蓝⽛低功耗旨在⼤幅降低功耗和成本,同时也能够达到相同的通讯效果。
⽀持多个平台,包括 IOS,Android,Windows Phone 和 BlackBerry 以及 macOS,Linux,Windows 8 和 Windows 10 在内的移动操作系统本⾝⽀持蓝⽛低功耗。
蓝⽛ SIG 预测,到 2018 年,超过 90%的蓝⽛智能⼿机将⽀持蓝⽛低功耗。
在安卓平台,在 Android 4.3 (API level 18) 以后引进来的,通过这些 API 可以扫描蓝⽛设备、连接设备,查询 services、读写设备的characteristics(属性特征),然后通过属性进⾏数据传输。
特点:低功耗,使⽤ BLE 与周围设备进⾏通讯时,其峰值功耗为传统蓝⽛的⼀半传输距离提升到 100 ⽶低延时,最短可在3 ms内完成连接并开始进⾏数据传输缺点:传输数据量较⼩,最⼤ 512 个字节,超过 20 个字节需要分包处理应⽤领域:主要⽤于智能硬件,像健康护理、运动和健⾝、设备电源管理等连接模式对于BLE单设备来讲常见的蓝⽛模块的⼯作模有四种:主设备模式从设备模式⼴播模式Mesh组⽹模式主设备模式可以与⼀个从设备进⾏连接。
在此模式下可以对周围设备进⾏搜索并选择需要连接的从设备进⾏连接。
同时可以设置默认连接从设备的MAC地址,这样模块上电之后就可以查找此模块并进⾏连接。
从设备模式BLE⽀持从设备模式,在此模式下完全符合BLE4.1协议,⽤户可以根据协议⾃⼰开发APP。
此模式下包含⼀个串⼝收发的Service,⽤户可以通过UUID找到它,⾥⾯有两个通道,分别是读和写。
ble5.0编程实例-回复BLE 5.0编程实例:使用BLE 5.0技术实现智能家居控制系统在本篇文章中,我们将介绍如何使用BLE 5.0技术来构建一个智能家居控制系统。
我们将一步一步教你如何建立一个连接、发送和接收数据,并实现对家居设备的控制。
让我们开始吧!第一步:建立连接在BLE 5.0编程实例中,首先我们需要建立蓝牙连接。
在这个例子中,我们将以智能手机作为中央设备,家居设备作为外设,通过蓝牙连接进行通信。
1. 确保你的智能手机和家居设备都支持BLE 5.0技术。
2. 在你的智能手机上下载一个蓝牙调试工具,例如LightBlue或nRF Connect。
3. 在家居设备上实现GATT服务和特征,以便手机可以与设备进行通信。
确保为每个服务和特征设置正确的UUID。
4. 在智能手机应用程序中实现扫描和连接功能。
扫描之后,通过设备的UUID进行连接。
5. 一旦连接建立,你已经完成了第一步!你现在可以开始发送和接收数据。
第二步:发送和接收数据在建立连接之后,我们将向家居设备发送控制指令,并接收来自设备的数据。
本实例中,我们将模拟一个灯光控制系统。
1. 在家居设备中实现一个灯光服务。
这个服务应该包含两个特征:一个用于控制灯光状态(开或关),另一个用于调节亮度。
2. 在智能手机应用程序中实现控制页面,包括一个按钮用于开关灯光,以及一个滑块用于调节亮度。
3. 当用户在应用程序中进行操作时,我们将通过蓝牙连接向家居设备发送相应的数据。
我们可以使用GATT特征来发送指令并调整亮度值。
4. 家居设备接收到指令后,会相应地开关灯光或者调节亮度。
反过来,当设备的状态发生变化时,它可以通过蓝牙连接将更新的状态数据发送回智能手机。
第三步:实现家居设备控制逻辑在我们的智能家居控制系统中,家居设备是外设,它需要根据接收到的指令来控制灯光的开关和亮度调节。
在这一步中,我们将在家居设备上实现这个控制逻辑。
1. 在设备的主控芯片上实现蓝牙通信功能。
BL E-CC41-A蓝牙模块操作指南v1.0一.概述B LE-CC41-A 蓝牙模块是深圳市博陆科电子科技有限公司专为智能无线数据传输而打造,采用T I 公司C C 2541芯片,遵循4.0 L E 蓝牙规范。
本模块支持UART,SPI接口,并支持数据透传和直驱,具有成本低、体积小、功耗低、收发灵敏性高等优点,只需配备少许的外围元件就能实现其强大功能。
二.使用条件1、支持硬件蓝牙版本为 4.0 的设备。
例如:iPhone 4S及以上、 iPad 3及以上、iPod 5及以上、LG nexus 4、三星 note 3、三星 i9300等。
2、安卓手机需要系统升级至 4.3 以上才支持。
三.苹果设备详细操作(图片截图来自:iPhone 5) 3、需要安装 APP 才能够进行使用和测试。
① 在 AppStore下载 LightBlue 软件② 如果蓝牙关闭时,会提示打开蓝牙。
系统:i os 7.1.1 4、BLE-CC41-A 模块供电,串口 TX RX GND 与电脑 COM1 口连接(需转换)。
③ 下拉自动搜索,搜索到名称为“BOLUTEK”。
④ 点击“BOLUTEK”,进入下页面:⑤ 点击“0xFFE0”进入以下页面:⑥ 点击“0xFFE 1”进入以下页面:⑥ 点击“Start Notify ”。
然后用串口助手发送数据“1234567890”,手机端就会显示“1234567890”。
⑥ 点击“Write ”。
出现如下界面,填入数据ASSCII:“1234567890”,串口端出现数据:“1234567890”。
四.安卓(4.3以上)设备详细操作:(图片截图来自:LG nexus 4)① 安装Bluetooth Le Gatt 软件(部分手机不兼容)②打开软件“BluetoothLeGatt”,设备蓝牙关闭时会提示打开蓝牙。
③ 点击“SCAN”搜索到“BOLUTEK”: ④点击“BOLUTEK”进入以下页面:系统:i os 4.4.3⑤ 点击“0000ffe0-....”进入以下页面:⑥ 点击“0000ffe1-....”进入以下页面:⑦字符串位置填入:“1234567890”,点击“确定”,串口助手接收到:“1234567890” ,如下图:⑧串口助手填入:“1234567890”,点击“手动发送”, 安卓设备端收到:“1234567890” ,如下图:。
Bluetooth Low Energy——蓝牙低功耗Android4.3(API级别18)引入内置平台支持BLE的central角色,同时提供API和app应用程序用来发现设备,查询服务,和读/写characteristics。
与传统蓝牙(ClassicBluetooth)不同,蓝牙低功耗(BLE)的目的是提供更显著的低功耗。
这使得Android 应用程序可以和具有低功耗的要求BLE设备,如接近传感器,心脏速率监视器,健身设备等进行通信。
关键术语和概念下面是关键BLE术语和概念的总结:通用属性规范(GATT)—GATTprofile是一个通用规范用于在BLE链路发送和接收被称为―属性(attributes)‖的数据片。
目前所有的低功耗应用profile都是基于GATT。
蓝牙SIG定义了许多profile用于低功耗设备。
Profile(配置文件)是一个规范,规范了设备如何工作在一个特定的应用场景。
注意:一个设备可以实现多个profile。
例如,一个设备可以包含一个心脏监测仪和电池电平检测器。
属性协议(ATT )—GATT是建立在属性协议(ATT )的顶层,通常也被称为GATT/ ATT 。
ATT进行了优化用于在BLE设备上运行。
为此,它采用尽可能少的字节越好。
每个attribute 属性被UUID(通用唯一标识符)唯一标识,UUID是标准128-bit格式的ID用来唯一标识信息。
attributes 被ATT 格式化characteristics和services形式进行传送。
特征(Characteristics)—一个characteristics包含一个单独的value值和0 –n个用来描述characteristic 值(value)的descriptors。
一个characteristics可以被认为是一种类型的,类似于一个类。
描述符(descriptor)—descriptor是被定义的attributes,用来描述一个characteristic的值。
Android蓝⽛开发Android 蓝⽛开发我们在进⾏蓝⽛开发时⾸先要了解低功耗蓝⽛、经典蓝⽛、单模蓝⽛、双模蓝⽛之间的关系。
单模蓝⽛:⽀持低功耗蓝⽛双模蓝⽛:⽀持低功耗蓝⽛和经典蓝⽛经典蓝⽛:⽀持经典蓝⽛蓝⽛开发⼤致分为这⼏步前⾯需要定位权限和蓝⽛权限的⽀持发现设备:经典蓝⽛发现设备apiBluetoothAdapter.startDiscovery听说可以同时发现经典蓝⽛和低功耗蓝⽛(BLE)。
但我这没单模的蓝⽛,所以没办法测试。
因为startDiscovery返回的是⼀个是否开始扫描设备,我们要获取蓝⽛设备的信息需要注册⼀个 BroadcastReceiver 针对 ACTION_FOUND Intent 会携带额外的字段 EXTRA_DEVICE 和 EXTRA_CLASS。
这两者分别包含 BluetoothDevice 和 BluetoothClass。
var filter =IntentFilter(BluetoothDevice.ACTION_FOUND);registerReceiver(mReceiver,filter);val mReceiver = object :BroadcastReceiver(){override fun onReceive(context: Context?, intent: Intent?) {var action = intent?.actionif(BluetoothDevice.ACTION_FOUND == action){var device = intent?.getParcelableExtra<BluetoothDevice>(BluetoothDevice.EXTRA_DEVICE)}}}override fun onDestroy() {super.onDestroy()unregisterReceiver(mReceiver)}Ble发现设备apiBluetoothAdapter.getBluetoothLeScanner()BluetoothLeScanner.startScan(ScanCallback callback)//扫描会在屏幕关闭时停⽌以节省电量。