×

Arduino连接Android Studio应用程序源代码

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-06-21

分享资料个

低功耗蓝牙 (BLE) 是一种低功耗蓝牙通信形式。可穿戴设备,例如我在 Predictive Wear 帮助设计的智能服装,必须尽可能限制功耗以延长电池寿命,并经常使用 BLE。Bluetooth Special Interest Group (SIG)定义了设备与蓝牙设备交互时应实施的几种规范,他们将其称为“配置文件”。大多数应用配置文件利用通用属性配置文件 (GATT) 通过 BLE 链路发送数据。BLE 中包含三个基本概念:配置文件、服务和属性。

Bluetooth SIG 对许多通用配置文件、服务和属性进行了标准化。但是,在创建自定义硬件时,通常需要创建自定义服务和属性,而且可用的教程并不多。使事情变得更加困难的是,Adafruit 没有提供任何有关设计移动应用程序以与其 BLE 模块配对的指导,并且其应用程序的源代码很难进行逆向工程。所以,我会为你做的。

本教程旨在解释:

如何设计自定义 GATT 服务和特性

如何将 Adafruit Bluefruit LE SPI Friend 编程为这些自定义服务和特性的 GATT 服务器

如何编写 Android 设备作为 GATT 客户端从 GATT 服务器读取数据

本教程无意转化为生产就绪的应用程序——这只是对 BLE 的介绍。

背景阅读:

Adafruit Bluefruit LE SPI Friend 文档

如果您不熟悉 GATT 或 BLE

第 1 步:设计定制服务和特征

介绍

这篇文章很好地解释了如何设计自定义服务和特性。我强烈建议通读这篇文章。我在下面提供了一个非常简单的概述,忽略了有利于简单的微妙之处。

GATT 服务是特征的集合。

GATT 特征包含属性、值和零个或多个描述符。

属性:客户端(Android App)应如何处理数据,例如读取、写入、无响应写入、通知和指示。

值:特性的实际值,例如 1089

描述符:这是有关值的信息,例如单位、毫秒

设计

好的,现在你知道什么是服务和特性了,我们需要弄清楚如何设计一些服务和特性来获取我们的自定义数据并将其从我们的 GATT 服务器(Arduino)发送到客户端(Android App)。让我们考虑一个从加速度计-陀螺仪模块 (AGM) 收集数据的 Arduino 设备。我们想要从三个空间轴收集陀螺仪和加速度测量值以及进行这些测量的时间,并将这些数据传输到我们的移动应用程序。我们还想知道何时需要为设备充电,因此我们想读取电池电量并将其传输到我们的移动应用程序。

1. 我们可以使用任何标准服务和特性吗?

Bluetooth SIG 对许多通用服务和特性进行了标准化。首先,检查这些以查看您是否可以选择任何标准化服务和特性。标准服务和特性可以使用更小的数据包,因为通用唯一标识符 (UUID) 是 16 位,而自定义服务和特性必须使用 128 位作为它们的 UUID。稍后会详细介绍 UUID。通过我们的搜索,我们找到了一个标准化的“电池服务”,其中包含一个特征“电池电量”。

2. 将您要通过 BLE 发送的所有数据值分成特征和服务

我们可以将自定义数据点分解为一项自定义服务中的七个自定义特征。我们将此服务称为“AGM 服务”。它将包含 7 个特性:x 加速度、y 加速度、z 加速度、x 陀螺仪、y 陀螺仪、z 陀螺仪和时间参考。

3. 确定每个特征所需的属性

一个特征可能有几个属性。

读取:客户端(Android App)可以从 GATT 服务器(Arduino)读取一个值

写入:客户端可以更改来自 GATT 服务器的值

指示:如果 GATT 服务器的值发生变化,客户端将收到通知,并且客户端应向 GATT 服务器发送确认

通知:如果 GATT 服务器的值发生变化,客户端将收到通知,并且客户端不会向 GATT 服务器发送确认

对于本教程,我们将所有特性设置为读取,但电池电量除外,它同时具有通知和读取属性。

4. 为自定义服务和特性生成 UUID 并找到标准 UUID

正如我之前简要提到的,Bluetooth SIG 标准化服务和特性使用 16 位 UUID,而自定义服务和特性使用 128 位 UUID。例如,查看蓝牙 SIG 上的电池服务分配编号。分配的数字0x180F代表128位UUID "0000 180F-0000-1000-8000-00805F9B34FB”。粗体的四位数字(16 位)对于特定的标准化服务或特征是唯一的,而其他字符在所有标准化服务和特征之间是保守的。因为客户端和 GATT 服务器都知道标准化的服务和特性仅在粗体数字上有所不同,数据包的大小可以大大减少。但是,自定义服务和特性不能在相同的假设下运行。

相反,自定义服务和特性必须使用未缩写的 128 位 UUID。这是一个在线 UUID 生成器。自定义 UUID 可接受除标准化 UUID 之外的任何 UUID。但是,典型的命名约定是表示自定义服务 00000001-... 以及该自定义服务中的特征 00000002-...

是我们将与他们的 UUID 一起实施的服务和特征的摘要电子表格。

第 2 步:Arduino 代码

更新 BLUEFRUIT LE SPI 朋友

首先,按照他们在连接指南中指定的方式连接 Adafruit Bluefruit LE SPI Friend并启动 Arduino 设备。

poYBAGSAdRKAIglDAAtrMJf5keY846.jpg

确保在扫描蓝牙设备时可以在您的 Android 设备上找到 Adafruit Bluefruit LE SPI Friend。下载Bluefruit Connect应用程序,连接到 Adafruit Bluefruit LE SPI Friend 并允许它更新设备上的固件。这一步很重要。如果您不更新固件,您通过 Arduino 向设备发出的命令可能会失败,并且不会有明显的错误让您发现问题所在。

这是我这个项目的回购协议。您可以在此处查看完整的 Arduino 代码。

概述

需要注意的一些重要事项:

在 setup() 方法中,所有自定义 UUID 必须在每两个字符之间包含“-”。例如,“AT+GATTADDCHAR=UUID128=00-00-00-05-62-7E-47-E5-A3-FC-DD-AB-D9-7A-A9-66”将起作用。“AT+GATTADDCHAR=UUID128=00000005-627E-47E5-A3fCDDABD97AA966”将不起作用。

请注意,在 setup() 方法中,“battery.begin(true);” 调用“ble.reset();” 自动地。如果您不像我那样使用电池服务,则需要重置 ble 模块(使用“ble.reset();”),我有命令“battery.begin(true);”。

在 setup() 方法中,如果要调试,请将“if ( !ble.begin(false) )” 更改为“if ( !ble.begin(true) )”。

这段代码是不言自明的。我包括了每个自定义方法的描述。设置方法让 BLE 模块准备好充当 GATT 服务器。循环方法通过加速度计陀螺仪模块 (AGM) 的假扫描,并为这些值生成一个从 1 到 100 的随机数。电池耗尽 1% 以模拟电池使用情况。您可以轻松地将此代码替换为实际传感器值。此代码假定您将传输一组 AGM 数据,长度为 6 个测量值,而不是单个测量值,因为分析 AGM 数据窗口可能比单个数据点更有用。如果您更改数组大小,请注意 android studio 代码中需要进行更改。要捕获一组数据,您必须传递一个计数器以及您打算发送的数据。这个计数器允许您从 android studio 应用程序中找到您在窗口中的位置,这样您就可以等待收听窗口中丢失的数据点。如果没有计数器或使用不同大小的数组,android studio 项目要么会丢失数据点,要么会陷入循环等待它期望的剩余数据点。

第 3 步:Android Studio 代码

这是我这个项目的回购协议。您可以在此处查看完整的 Android Studio 代码。

概述

我将继续更新此内容,更全面地概述 arduino 和 android 代码的工作细节……该应用程序功能齐全,因此您可以随时自己查看代码。

第 4 步:最终申请

恭喜!您的应用程序已下载到您的手机,您的可穿戴设备已充电并正在传输数据。

启动应用程序

要开始使用,请单击应用程序的启动器图标。

pYYBAGSAdRaANSzQAAaIXik-9uU535.jpg

授予权限

您需要批准使用某些权限才能使应用程序正常运行。

poYBAGSAdRmATqdCAADwFdh_lDw596.jpg

扫描设备

接下来,单击应用程序左上角的“扫描”按钮。

pYYBAGSAdR2AIAH5AACg6BkUJcA505.jpg

选择您的可穿戴设备

接下来,从可用 BLE 设备列表中选择您的可穿戴设备。它的名字是“BLE Arduino 硬件”。

poYBAGSAdSCAK4t0AADLgtmrpVU433.jpg

获取数据等待应用程序获取 AGM 数据并确定用户静止或移动的位置。

pYYBAGSAdSOAfJa9AACcdPIUqhM950.jpg

查看您的结果在屏幕上查看结果!单击同步按钮可再次读取数据。

pYYBAGSAdSaADZmzAADGAC2wpnQ096.jpg

 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !