Android-Ble蓝牙开发Demo示例–扫描,连接,发送和接收数据,分包解包(附源码)

Android-Ble蓝牙开发Demo示例–扫描,连接,发送和接收数据,分包解包(附源码),第1张

万物互联的物联网时代的已经来临,ble蓝牙开发在其中扮演着举重若轻的角色。最近刚好闲一点,抽时间梳理下这块的知识点。

涉及ble蓝牙通讯的客户端(开启、扫描、连接、发送和接收数据、分包解包)和服务端(初始化广播数据、开始广播、配置Services、Server回调 *** 作)整个环节以及一些常见的问题即踩过的一些坑。

比如
1、在Android不同版本或不同手机的适配问题,扫描不到蓝牙设备
2、如何避免ble蓝牙连接出现133错误?
3、单次写的数据大小有20字节限制,如何发送长数据

蓝牙有传统(经典)蓝牙和低功耗蓝牙BLE(Bluetooth Low Energy)之分,两者的开发的API不一样,本文主讲Ble蓝牙开发,传统蓝牙不展开,有需要的可以自行了解。

相对传统蓝牙,BLE低功耗蓝牙,主要特点是快速搜索,快速连接,超低功耗保持连接和数据传输。

客户端

服务端

Android43(API Level 18)开始引入BLE的核心功能并提供了相应的 API。应用程序通过这些 API 扫描蓝牙设备、查询 services、读写设备的 characteristics(属性特征)等 *** 作。

BLE蓝牙协议是GATT协议, BLE相关类不多, 全都位于androidbluetooth包和androidbluetoothle包的几个类:
androidbluetooth
BluetoothGattService 包含多个Characteristic(属性特征值), 含有唯一的UUID作为标识
BluetoothGattCharacteristic 包含单个值和多个Descriptor, 含有唯一的UUID作为标识
BluetoothGattDescriptor 对Characteristic进行描述, 含有唯一的UUID作为标识

BluetoothGatt 客户端相关
BluetoothGattCallback 客户端连接回调
BluetoothGattServer 服务端相关
BluetoothGattServerCallback 服务端连接回调

androidbluetoothle
AdvertiseCallback 服务端的广播回调
AdvertiseData 服务端的广播数据
AdvertiseSettings 服务端的广播设置
BluetoothLeAdvertiser 服务端的广播

BluetoothLeScanner 客户端扫描相关(Android50新增)
ScanCallback 客户端扫描回调
ScanFilter 客户端扫描过滤
ScanRecord 客户端扫描结果的广播数据
ScanResult 客户端扫描结果
ScanSettings 客户端扫描设置

BLE设备分为两种设备: 客户端(也叫主机/中心设备/Central), 服务端(也叫从机/外围设备/peripheral)
客户端的核心类是 BluetoothGatt
服务端的核心类是 BluetoothGattServer 和 BluetoothLeAdvertiser
BLE数据的核心类是 BluetoothGattCharacteristic 和 BluetoothGattDescriptor

下面详细讲解下客户端和服务端的开发步骤流程

安卓手机涉及蓝牙权限问题,蓝牙开发需要在AndroidManifestxml文件中添加权限声明:

在搜索设备之前需要询问打开手机蓝牙:

注意: BLE设备地址是动态变化(每隔一段时间都会变化),而经典蓝牙设备是出厂就固定不变了!

通过扫描BLE设备,根据设备名称区分出目标设备targetDevice,下一步实现与目标设备的连接,在连接设备之前要停止搜索蓝牙;停止搜索一般需要一定的时间来完成,最好调用停止搜索函数之后加以100ms的延时,保证系统能够完全停止搜索蓝牙设备。停止搜索之后启动连接过程;

BLE蓝牙的连接方法相对简单只需调用connectGatt方法;

参数说明

与设备建立连接之后与设备通信,整个通信过程都是在BluetoothGattCallback的异步回调函数中完成;

BluetoothGattCallback中主要回调函数如下:

上述几个回调函数是BLE开发中不可缺少的;

当调用targetdDeviceconnectGatt(context, false, gattCallback)后系统会主动发起与BLE蓝牙设备的连接,若成功连接到设备将回调onConnectionStateChange方法,其处理过程如下:

判断newState == BluetoothGattSTATE_CONNECTED表明此时已经成功连接到设备;

mBluetoothGattdiscoverServices();

扫描BLE设备服务是安卓系统中关于BLE蓝牙开发的重要一步,一般在设备连接成功后调用,扫描到设备服务后回调onServicesDiscovered()函数,函数原型如下:

BLE蓝牙开发主要有负责通信的BluetoothGattService完成的。当且称为通信服务。通信服务通过硬件工程师提供的UUID获取。获取方式如下:

具体 *** 作方式如下:

开启监听,即建立与设备的通信的首发数据通道,BLE开发中只有当客户端成功开启监听后才能与服务端收发数据。开启监听的方式如下:

BLE单次写的数据量大小是有限制的, 通常是20字节 ,可以尝试通过requestMTU增大,但不保证能成功。分包写是一种解决方案,需要定义分包协议,假设每个包大小20字节,分两种包,数据包和非数据包。对于数据包,头两个字节表示包的序号,剩下的都填充数据。对于非数据包,主要是发送一些控制信息。
监听成功后通过向 writeCharacteristic写入数据实现与服务端的通信。写入方式如下:

其中:value一般为Hex格式指令,其内容由设备通信的蓝牙通信协议规定;

若写入指令成功则回调BluetoothGattCallback中的onCharacteristicWrite()方法,说明将数据已经发送给下位机;

若发送的数据符合通信协议,则服务端会向客户端回复相应的数据。发送的数据通过回调onCharacteristicChanged()方法获取,其处理方式如下:

通过向服务端发送指令获取服务端的回复数据,即可完成与设备的通信过程;

当与设备完成通信之后之后一定要断开与设备的连接。调用以下方法断开与设备的连接:

源码上传在CSDN上了,有需要的可以借鉴。

=====> Android蓝牙Ble通讯Demo示例源码–扫描,连接,发送和接收数据,分包解包

BLE单次写的数据量大小是有限制的,通常是20字节,可以尝试通过requestMTU增大,但不保证能成功。分包写是一种解决方案,需要定义分包协议,假设每个包大小20字节,分两种包,数据包和非数据包。对于数据包,头两个字节表示包的序号,剩下的都填充数据。对于非数据包,主要是发送一些控制信息。
总体流程如下:
1、定义通讯协议,如下(这里只是个举例,可以根据项目需求扩展)

2、封装通用发送数据接口(拆包)
该接口根据会发送数据内容按最大字节数拆分(一般20字节)放入队列,拆分完后,依次从队列里取出发送

3、封装通用接收数据接口(组包)
该接口根据从接收的数据按协议里的定义解析数据长度判读是否完整包,不是的话把每条消息累加起来

4、解析完整的数据包,进行业务逻辑处理

5、协议还可以引入加密解密,需要注意的选算法参数的时候,加密后的长度最好跟原数据长度一致,这样不会影响拆包组包

一般都是Android版本适配以及不同ROM机型(小米/红米、华为/荣耀等)(EMUI、MIUI、ColorOS等)的权限问题

蓝牙开发中有很多问题,要静下心分析问题,肯定可以解决的,一起加油;

物联网开发应用最重要的是各种接口的兼容性。

首先物联网终端设备数量比手机大得多,而且本身没有显示界面,通常只是能够通过特定网络协议回传数据的传感器(直接连入互联网或者通过网关设备),也就是说在物联网大数据汇聚的前端,数据的汇入是自动化进行的,应用开发的重点是后端的汇聚层。

物联网应用后端汇聚层需要有一个智能化软件系统(通常运行于数据中心),来管理物联网设备(包括固件升级等)、网络、处理海量数据,并提供给用户。

在设备层、汇聚层之外,物联网应用还需要一个分析层,负责处理物联网设备产生的大数据。

最后,是最终用户层,负责将有用的数据分析结果以可视化的方式展示到用户的终端设备中,这个层面的开发,可以是移动web网站也可以是一个手机APP。

由于设备层和汇聚层第三方专业产品和服务的完善,实际上今天的物联网应用开发,主要指的是分析层和用户层这两个层面,换而言之,未来物联网开发生态主要建立在成熟的云计算物联网平台上。成熟的物联网平台通常都提供汇聚层需要的大数据存储、实时信息总线以及于前端应用通讯的API。

实际上今天已经有大量面向物联网应用开发的平台,例如Xively、Mnubo、BugLabs和ThingWorx等,这些平台通常能够兼容大量物联网产品厂商的设备。

工业物联网云平台推荐是一个基于云计算、大数据、人工智能等前沿技术的智能制造平台,它集数据采集、数据存储、数据处理、数据分析、决策支持等功能于一体,可以实现设备的远程监控、预测性维护、异常检测以及生产调度、设备管理等工业应用。

工业物联网云平台推荐的主要特点包括以下几个方面:

一、开放性

工业物联网云平台是一个开放的平台,它采用标准化的接口和协议,与各种硬件设备、传感器、机器人等工业设备实现无缝对接,与各种软件系统、应用服务实现互联互通。同时,平台还提供了丰富的API,方便开发者和企业自主开发和集成精细化的应用。

二、可扩展性

工业物联网云平台是一个高度可扩展的平台,它可以支撑海量设备数据的采集、存储、处理、分析和应用,能够灵活地满足用户的不同需求。此外,平台还提供了多样化的工具、算法和应用组件,方便用户根据实际情况进行定制化。

三、协作性

工业物联网云平台是一个强调协作的平台,它鼓励企业之间、企业和研究机构之间、企业和政府之间等多种形式的合作,共同推动工业物联网技术的创新和应用。平台还提供了多种合作机制和服务,包括共享设备、协同工作、技术支持、数据交换等,为用户提供全方位的支持。

四、安全性

工业物联网云平台推荐是一个高度安全的平台,它采用了多种安全技术和加密方案,保障用户数据的机密性、完整性和可用性。平台还提供了完善的权限管理和安全审计机制,有效防范各类网络攻击。

工业物联网云平台推荐,上海力控科技ThingNet物联网云平台是基于以往的物联网产品,以及目前市场上的各种云平台优点,精心打造的一款实现设备上云的多功能产品,该物联网云平台面向设备而使用,例如大型的空调机组、空压机、泵等等设备的上云,云平台提供从设备接入、运行监控、设备资产管理、工业数据预知分析等一站式SaaS服务,使用对象可以为设备厂家、设备运维厂家、以及相关设备管理型公司等。

微信小程序,可用于智能家居,物联网等项目。 实现了常用的网关设备管理,节点设备管理,区域管理,安防设置,情景管理,定时管理,用户管理,消管理,扫码绑定等功能。 丰富的设备种类界面和 *** 作,包含开关,插座,调光,窗帘,空调,地暖,电表等

软件架构说明

设备类型定义(16进制):


源码获取源码关注后私信回复“智能家居”


物联网相关术语:6LoWPAN、高级加密标准、应用程序编程接口、信标技术、大数据、低能耗蓝牙、云计算、Firmware-Over-The-Air、网关。

1、6LoWPAN

IPv6(当前的互联网协议)和低功耗无线个人区域网络的融合,允许功率受限的物联网设备直接访问TCP/IP互联网。这意味着即使最小最弱的物联网设备也可以连接。

2、高级加密标准

这是一个电子数据加密规范,自2001年以来一直是物联网设备传输层安全的标准。

3、应用程序编程接口

一种加速计算机与硬件/软件平台之间通信的方法。

4、信标技术

这允许小型网络发射器与使用低功耗蓝牙的系统进行交互。苹果的版本叫做iBeacon。

5、大数据

大量的信息,包括结构化的和非结构化的,从大量来源收集并以极快的速度传递。这些信息是原始数据,供分析人员为企业和其他组织设计更明智的战略。物联网是大数据的巨大来源。

6、低能耗蓝牙

一种无线的个人区域网络,其特点是低功耗和有限的数据传输范围。它也被称为蓝牙40。

7、云计算

通过网络连接并用于数据存储、处理和管理的远程服务器,而不是依赖于本地的内部物理服务器。

8、嵌入式软件

控制通常不被认为是计算机的硬件设备和系统的计算机软件,例如智能冰箱。

9、Firmware-Over-The-Air

该技术也被称为FOTA,允许移动设备上的软件和服务的远程无线安装、维修和升级。

10、网关

这是任何设备,收集信息从不同的网络点,并发送信息到另一个网络。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/dianzi/13233881.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-24
下一篇 2023-06-24

发表评论

登录后才能评论

评论列表(0条)

保存