Android与51822蓝牙模块通信流程的实现与分析

      最后更新:2022-06-13 09:42:00 手机定位技术交流文章

      背景

      前节介绍了蓝牙Android搜索BLE模块方法,搜索到蓝牙模块后,我们可以在蓝牙和手机之间交流数据,这意味着Android手机终端与BLE模块之间的数据传输实现,介绍了手机端口和蓝牙端口程序的编程和交互。从代码和现象入手,逐渐了解BLE的使用.

      BLE模块代码分析

      建立服务

      官方的北欧法典已经在这里修改。
      在此,我们将首先发布代码,确定代码将实现的功能,然后继续分析代码如何适应蓝牙协议。
      首先,从主要函数中,它包含大量的初始化代码、初始化协议堆栈和与注册表相关的内容,我们不需要太多的注意,如图所示,我们首先看看这个服务初始化函数。

      当我们需要添加一个功能到蓝牙模块时,我们需要在BLE模块中定义自己的服务并以某种方式初始化它。

      • 1

      其中之一,b_nus_init_t,是该服务提供的接口,它定义了该服务的基本功能要求,我们可以根据自己的要求实现不同的特定 nus_data_handler函数。

      • 1

      这里我们实现了自己的 nus_data_handler,从蓝牙接收的数据通过BLE直接传输到手机端部。

      • 1

      然后调用ble_nus_init函数登记我们的服务。

      • 1

      让我们看看ble_nus_t,存储我们服务中属性和方法的接口,这是服务的核心。

      • 1

      在 ble_nus_init 函数中,我们首先对这个结构的变量进行初始化.在初始化完成后,我们提供的协议堆栈函数sd_ble_uuid_vs_add可以用于注册服务。这里为服务指定Auid.

      现在我们有了服务,我们需要为服务添加功能,我们需要使用BLE来与手机通信,所以基本的功能是接收和发送数据。

      因此,服务的下一步是添加两个特性,分别是发送和接收。 我们需要为这两个特性指定相应的NUid。
      下面是初始化代码

      • 1

      这完成了蓝牙服务的初始化,我们现在可以开始广播。

      • 1

      因此, BLE模块端的基本功能已经建立.

      通信过程简述

      用直观的代码, 让我们看看芯片里面发生了什么.

      广播与连接

      当手机连接到BLE模块时,BLE模块会隔时发送广播数据包,每次发送数据包时,模块会等待连接信息,当手机接收数据包时,它会发送请求,请求更多的数据包,称为扫描响应。

      手机端在请求间隔时向BLE模块请求数据,在这个请求间隔时,BLE模块会像手机端一样发送数据包,这些数据包的大小为20字节,换句话说,在传输过程中,每个缓冲器的内容不应超过20字节。

      上述过程在Bluetooth的GAP中定义,这是通用访问规范。

      数据传输

      一旦手机连接到BLE模块,我们可以启动数据传输,这是在蓝牙GATT中定义的,称为一般属性配置文件。

      这里我们主要讨论了上述服务和特点。

      简言之,我们可以认为服务包含一系列特征,而特征是我们提供的数据,而我们发送的数据必须汇编成特征。

      在此之上,一个配置文件将包含一系列服务,每个特性将包含一些属性。 属性可以定义为属性或描述性,描述性是一个人读取的信息。

      这些GATT内容都有NUUID,所以当我们在Android设备上读取这些内容时,我们可以通过对这些NUUID进行层级分析来找到我们需要的东西。

      上面的代码是为我们定义一个服务,在这项服务中,我们还定义了两个特征,一种用来阅读收到的数据,一种用于发送接收的数据。当我们接收数据并启动回调功能时,处理我们收到的数据,数据由协议堆的下调 sd_ble_gatts_hvx 函数发送。

      当手机端发送数据时,它首先找到服务,然后通过UUID获取特征,将数据写入特征,使BLE模块能够接收数据。

      Android终端代码的设计与分析

      总体结构

      通过分析上述实现BLE模块的原理,我们可能能够理解Android端需要做的一些具体工作,主要如下。

      1.发送连接请求,连接BLE模块

      2.寻找相应的服务和特点

      基于UUID的特征书写

      在前面的节里,我们了解了Android和BLE搜索,现在我们开始设计后端功能。

      我们为BLE连接建立服务(注意,这是四个Android组件中的服务),该服务用于维护与BLE模块的连接及其数据传输以及一些有关的后端监控,同时在活动中创建一个需要BLE操作的广播接收器。该服务监测BLE状态的变化,并通过广播转达到我们的广播接收机,更改前端页面的状态。

      下面的图示了该程序的基本结构

      BLEActivityBLEActivityBLEService BLEService调用服务方法内部维护的BluetoothGatt对象与BLE模块进行交互广播,改变前端状态

      下面是一些常见的蓝牙类型

      BluetoothManager
      官网解释

      High level manager used to obtain an instance of an BluetoothAdapter and to conduct overall Bluetooth Management.

      Use getSystemService(java.lang.String) with BLUETOOTH_SERVICE to create an BluetoothManager, then call getAdapter() to obtain the BluetoothAdapter.

      Alternately, you can just call the static helper getDefaultAdapter().

      可能用于获取蓝牙适配器。 让我们看看下面的蓝牙适配器。

      BluetoothAdapter
      仔细看一下,这不是前面的一个主要角色吗?具体操作请参阅以下链接:
      http://blog.csdn.net/lidec/article/details/50631742

      我们可以通过以下方法获得蓝牙

      • 1

      BluetoothGatt
      从名字的角度来看,这个类包含Gat,这是我们前面提到的BLE数据传输的协议。
      下面是官网的介绍

      Public API for the Bluetooth GATT Profile.

      This class provides Bluetooth GATT functionality to enable communication with Bluetooth Smart or Smart Ready devices.

      To connect to a remote peripheral device, create a BluetoothGattCallback and call connectGatt(Context, boolean, BluetoothGattCallback) to get a instance of this class. GATT capable devices can be discovered using the Bluetooth device discovery or BLE scan process.

      我们与BLE达成协议,允许我们直接使用该类包装方法,正如GATT所定义的。

      • 1

      该方法用于连接蓝牙设备,通过Mac地址从BluetoothAdapter获取BluetoothGatt对象,我们为Android应用程序定义的服务的主要功能是维护这个对象,并使用它提供的方法与BLE模块通信。

      • 1

      上述方法提供了GATT议定书的基本操作方法,通过UUID获取BLE服务,从BLE服务中获取写字特性,然后调用setValue方法,将值写入,如果写入成功,所以我们的BLE模块现在接收数据。

      用书面方法, 我们如何读取数据?
      当我们得到BluetoothGatt时,我们将它传递给GatCallback对象,它在接收数据时触发了 CharacteristicChanged 的回调函数。

      • 1

      参数的特征是变化的特征,我们可以得到它的N.O.I.D.对比一下,如果此 UUID与我们定义的BLE模块中传输数据的 UUID匹配,则说明收到了数据,我们可以接受这个价值。示例代码如下:

      • 1

      其他功能也由此得益。

      这里是应用程序的源代码,其他与BLE相关的函数可以根据这个应用程序修改。
      http://download.csdn.net/detail/lidec/9434509

      总结

      本文汇编了51822BLE开发板与Android手机之间的通信方法,简要介绍了一些实用的蓝牙协议知识,并对蓝牙协议在开发板控制程序和应用程序中进行了分析。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/27234.html

          热门文章

          文章分类