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等)的权限问题

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

假的,物联网的中间件是一种软件系统,而不是硬件设备。它是指处于物联网系统中,连接设备和应用程序之间的中间层,起着将信息转发、存储、处理和分析的重要作用。
物联网的中间件充当着物联网系统的枢纽,对于物联网数据采集、传输、存储、处理、分析等方面发挥着举足轻重的作用,能够使各设备感知和理解环境变化,进行决策和控制,并将数据流和控制信号从各个终端节点搜集,并通过互联网进行交互。
通常,物联网的中间件包括了诸如云计算、大数据分析、消息代理、协议转换、数据缓存、安全管理等多种功能,以便于实现设备、应用程序、网络和平台之间的互 *** 作性和信息交互,并为物联网系统提供支撑。
因此,物联网中间件并不是一种硬件设备,而是一种软件系统,扮演着连接其他物联网组件的重要角色。

本文主要对阿里云、腾讯云、百度云和华为云提供的相关物联网产品进行对比,用于分析各大云平台在物联网方面的布局和实现。

本文主要从各大云平台的官网相关资料进行对比,对比项也没有覆盖物联网的各个方面。
阿里云的物联网相关产品由于在实际项目中使用的比较多,所以比较了解,相对其他3个云平台,阿里云在物联网方面的布局走的比较早,无论是硬件开发、设备组网、边缘计算、设备接入及管理、数据流转、数据处理、数据存储、数据可视化等等方面,阿里云都有相关产品可以提供,而其他3个平台或多或少都有缺项。在阿里云、百度云、华为云上都能看到专门对物联网的布局,而在腾讯云上面则看不到。

物联网设备是非标准计算设备,可无线连接到网络并具有传输数据的能力。物联网涉及将互联网连接范围从台式机,笔记本电脑,智能手机和平板电脑之类的标准设备扩展到任何范围的传统“哑”或未启用互联网的物理设备和日常物品。这些设备嵌入了技术,可以通过Internet进行通信和交互。它们也可以被 远程监视和控制。

连接的设备是生态系统的一部分,在该生态系统中,每个设备都与环境中的其他相关设备通信以自动执行家庭和行业任务。他们可以将可用的传感器数据传达 给用户,企业和其他预期的各方。这些设备可以分为三大类:消费类,企业类和工业类。

消费者连接的设备包括智能电视,智能扬声器,玩具,可穿戴设备和智能电器。例如,在 智能家居中,设备旨在感应和响应人的存在。当一个人回到家中时,他们的汽车与车库连通以打开门。进入室内后,温度调节器已经被调整到其首选温度,并且照明设置为较低的强度和颜色,因为他们的智能手表数据表明这是一个充满压力的日子。其他智能家居设备包括根据天气预报调整洒水量的洒水装置和了解最经常清洁房屋区域的机器人真空吸尘器。

企业物联网设备是旨在供企业使用的边缘设备。有各种各样的企业物联网设备可用。这些设备的功能各不相同,但往往倾向于维护设施或提高运营效率。一些选项包括智能锁,智能恒温器,智能照明和智能安全性。这些技术的消费者版本也存在。

在企业中,智能设备可以帮助举行会议。位于会议室中的智能传感器可以帮助员工确定和安排会议可用的房间,确保可以使用合适的房间类型,大小和功能。当与会人员进入会议室时,温度将根据占用情况进行调整,随着屏幕上适当的PowerPoint加载,灯光将变暗,并且演讲者开始演示。

消费者,企业和工业物联网设备的示例包括装配在会议室和装配线机器上的智能电视和智能传感器。

工业物联网设备旨在用于工厂或其他工业环境。大多数工业物联网设备是用于监视装配线或其他制造过程的传感器。来自各种类型传感器的数据将传输到监视应用程序,以确保关键流程处于最佳运行状态。这些相同的传感器还可以通过预测何时需要更换零件来防止意外停机。

如果发生问题,系统可能能够将通知发送给服务技术人员,以告知他们出了什么问题以及解决问题所需的部件。这样可以避免技术人员到现场诊断问题,然后再去仓库获取解决问题所需的零件。

物联网设备如何工作?

物联网设备在功能方面有所不同,但是物联网设备在工作方式上有一些相似之处。首先,物联网设备是旨在以某种方式与现实世界进行交互的物理对象。该设备可能是装配线上的传感器或智能监控摄像头。无论哪种情况,设备都可以感知物理世界中正在发生的事情。

该设备本身包括集成的CPU,网络适配器和固件,通常在开放源代码平台上构建。在大多数情况下,物联网设备连接到动态主机配置协议服务器,并获取该设备可用于在网络上运行的IP地址。某些物联网设备可通过公共互联网直接访问,但大多数设计为仅在专用网络上运行。

尽管不是绝对要求,但许多物联网设备是通过软件应用程序配置和管理的。但是,某些设备具有集成的Web服务器,因此不需要外部应用程序。

物联网设备配置并开始运行后,其大部分流量就出站了。例如,安全摄像头可传输视频数据。同样,工业传感器流式传输传感器数据。但是,某些物联网设备(例如智能灯)确实接受输入。


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

原文地址: http://outofmemory.cn/dianzi/13274923.html

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

发表评论

登录后才能评论

评论列表(0条)

保存