如何在ESP32中使用BLE?ESP32 BLE(蓝牙低能)教程

在本教程中,我们将了解ESP32中的BLE功能。ESP32具有蓝牙低能或BLE功能以及经典蓝牙。ESP32 BLE针对不同BLE设备之间的电池操作,低功率无线通信。我们将学习所有必需品,以便在ESP32中使用BLE并将其配置为服务器和客户端。我们还将看到如何将智能手机与ESP32 BLE服务器连接。

ESP32-Ble-Image-1

关于BLE的简短说明(蓝牙低能)

蓝牙4.0规范的主要特征是蓝牙低能或简单地集成。BLE(以前以蓝牙SMART销售)是专门为低功率无线通信而设计的经典蓝牙的高度优化版本。

虽然经典的蓝牙(通常描述为指称其数据速度的技术文档中的基本速率和增强的DARA速率)却被设计为替代有线通信,并用短距离无线通信。它的设计考虑了数据速度,应用程序包括大型文件传输,无线音频等。

另一方面,BLE可用于低功耗,而不是更高的数据速率,并考虑到IoT和电池经营的应用程序。BLE的一些流行应用是智能手表,健身追踪器,健康监测设备,无线电信标等。

BLE应用

与始终连接的经典蓝牙不同,BLE通常处于待机(空闲)模式,并且仅在需要时就醒来。因此,超低功耗。

蓝牙低能也可以在相同的2.4 GHz ISM频带上工作。这意味着可以将单个天线用于Wi-Fi和两个版本的蓝牙。

BLE中的不同层

BLE设备由三层组成:

  • 控制器
  • 主持人
  • 应用

BLE层

控制器包含以下内容:

  • PHY - 物理层
  • LL - 链接层
  • HCI - 控制器侧主机控制器接口

主机包含以下内容:

  • HCI - 主机侧主机控制器接口
  • L2CAP - 逻辑链接控制和应用程序协议
  • SM - 安全经理
  • ATT - 属性协议
  • 差距 - 通用访问配置文件
  • GATT - 通用属性配置文件

应用层是包含用户界面,数据处理和逻辑方面的最高层。

BLE中的重要术语

让我们简要查看与BLE相关的一些重要术语。

  • GATT:这是通用属性配置文件的简短。它使用服务和特性定义了BLE设备之间数据传输的规格。
  • 特征:特征是一组称为属性的信息,属性是在设备之间传输的一组信息。特征通常包含以下属性:
  • 值:特征的数据值
  • 声明:特征的属性(位置,类型读,写,通知,指示等)
  • 描述:描述特征的ASCII字符串。
  • 服务:特征的集合称为服务。每个服务都有一个唯一的16位或128位ID,称为UUID。
  • UUID:普遍唯一的标识符是对每个服务和配置文件中的特征提供的128位ID。使用网站uuidgenerator生成唯一的ID。每个服务和特征都有一个唯一的16位或128位ID,称为UUID。uuid的样本看起来像这样:
    • 583F8B30-74B4-4757-8143-56048FD88B25

布莱国家

BLE设备可以具有5个可能的状态:

  • 支持
  • 广告
  • 扫描
  • 发起
  • 连接的

布莱设备状态

BLE网络拓扑

两个BLE设备之间的通信可以是广播类型或连接类型。在广播中,“广播公司” BLE设备将数据发送到任何“观察者” BLE设备。这是一个单向数据传输。

对于双向通信,您需要在BLE设备之间进行“连接”。中央(主)设备的中央设备反复扫描从发送数据包的外围(从属)设备的广告数据包。

在ESP32中BLE

我们知道ESP32的主要功能是Wi-Fi。但此外,ESP32 SOC还具有蓝牙支持。ESP32蓝牙是双模式系统。这意味着ESP32支持经典的蓝牙和蓝牙低能(BLE)。

具体而言,ESP32中的蓝牙系统符合蓝牙v4.2经典蓝牙(BR/EDR)和BLE规格。在上一个教程中,我们已经探索了如何使用ESP32经典蓝牙有几个例子。我们将在本教程中探索ESP32的BLE功能。

ESP32 BLE服务器客户端模型

任何BLE设备都可以配置为服务器或客户端。ESP32也不例外,即ESP32可以是服务器,它可以宣传其在场,以便客户可以阅读其数据或作为客户端,该服务器可以扫描服务器并建立连接以从服务器接收数据。

在此项目中,我们将使用两个ESP32板,一个将作为BLE服务器编程为BLE服务器。ESP32初学者的项目这是给予的

ESP32 BLE服务器

首先,我们将看到如何将ESP32设置为BLE服务器。拿一个ESP32板并将其连接到计算机。我们将该板称为“ ESP32-BLE_SERVER”。打开Arduino IDE,并确保选择适当的ESP32开发板和COM端口。

代码

这是“ ble_server”示例的一个稍微修改的代码。我评论了代码以解释所有必要的事情。

将此代码上传到服务器ESP32设备。

ESP32 BLE客户端

取另一个ESP32板(我们将称为ESP32-BLE_CLIENT),然后将其连接到计算机。在Arduino IDE中,选择该板的COM端口。

代码

有一个称为“ ble_client”的示例作为ESP32 BLE库的一部分。我在这里使用了相同的代码(修改小)。将此代码上传到客户端ESP32设备。

在职的

将代码上传到两个ESP32板后,您需要监视两个板的串行端口以查看通信。为此,我使用Arduino IDE的串行监视器打开ESP32 BLE客户设备的COM端口和另一个软件(例如Putty或Terminal)打开ESP32 BLE服务器设备的串行端口。

在为ESP32 BLE服务器和客户端打开相应的串行端口终端后,通过按相应的启用(EN)按钮来重置两个板。

ESP32-BLE-TUTEARION-工作

ESP32 BLE服务器设备将启动BLE服务器并开始广告其服务。如果您观察客户端ESP32的代码,我们使用了服务器ESP32的服务UUID和特征性UUID。这意味着客户端ESP32扫描BLE设备,如果找到了特定的UUID,则可以建立连接。

建立连接后,ESP32 BLE客户端首先从服务器读取特征值(我们将其设置为“ Hello,World!”中的服务器代码中的“ Hello,World!”),并将其打印在终端上。

之后,客户端试图每隔几秒钟设置具有新值的服务器的特征值。您可以在下面的图像中看到客户端的终端。

进入服务器,一旦启动BLE服务器,它就会每隔几秒钟读取自己的特征值。您可以看到以下图像,即服务器的特征值由客户端更新,并由服务器读取。

ESP32-BLE-SERVER末端

使用智能手机测试ESP32 BLE服务器

现在让我们看看如何将智能手机连接到ESP32 BLE服务器。将以下代码上传到ESP32板上,我们将其称为ESP32 BLE服务器,并在Arduino IDE中打开串行监视器。

在智能手机中,去玩商店并通过BluePixel Technologies安装“ BLE扫描仪”应用程序。安装后,打开应用程序(如果之前已经配对ESP32蓝牙,则不需要对)。在手机中启用蓝牙和位置(都需要扫描BLE设备)(应用程序将提示相同)。单击右上角的“扫描”图标。

该应用程序将开始扫描BLE设备并将其列出。您可以在列表中看到“ ESP32-Ble-Server”。

BLE-SCANNER-1

单击“连接”,智能手机开始使用ESP32 BLE服务器连接。连接后,它将显示服务列表及其特征。由于我们只使用一项服务初始化了ESP32,因此您可以在“自定义服务”部分下看到服务UUID以及特征性UUID。

BLE-SCANNER-2

要读取服务的初始特性值,请点击“自定义服务”部分中的“ R”图标。该应用程序从服务器读取值并将其显示在“值”选项中。

BLE-SCANNER-3

由于我们将特征的属性设置为读写和写作,因此我们可以通过敲击“ W”图标来设置特征的值。一个文本框弹出以编写值。输入值后,单击“确定”。该值是在服务器中设置的。

BLE-SCANNER-4

如果打开服务器的串行监视器,则可以看到服务器打印出新设置的值。我们实际上不是像上一个示例中那样连续监视“值”字段,而是实际上使用了BLE库的回调功能,当且仅当启动“写入”选项时,它才会被调用。

BLE-SCANNER-5

结论

ESP32中理解BLE的完整初学者指南。您可以学习一些蓝牙低能的基本功能,如何使用ESP32 BLE功能,如何将ESP32设置为BLE服务器和客户端,以及如何将智能手机连接到ESP32 BLE服务器。

这只是ESP32蓝牙低能的介绍性项目。将来,我们将利用ESP32中的BLE实施几种与物联网相关的应用程序。

3个回应

  1. 首先,恭喜这篇文章。
    我以前曾在Arduino Ide Scketches进行测试,但是您的文章使您更容易理解。

    写作的原因是因为我希望能够通过Alexa的BLE控制ESP32。
    我希望能够用ESP32控制大约5个LED,这了解命令打开LED,关闭LED,亮度为25%。
    我不想通过wifi进行控制

    先前,感谢您对如何以简单方式处理该项目的任何评论。

  2. 这个示例很棒。我有兴趣管理多个设备(服务器)的连接。我需要多个bleclientcallbacks()吗?如果不是,我如何区分OnDisconnect()和OnConnect()中的不同服务器?PCLIENT参数是指向客户端还是连接设备的指针?对在多连接环境中如何使用它们的任何解释都将不胜感激。

  3. 我正在制作一个Android应用程序,该应用程序将通过BLE连接ESP32的问题是,问题不是因为没有扫描而无法扫描,我无法阅读和写作?有什么帮助吗?

发表评论

您的电子邮件地址不会被公开。

电子豪华粉丝
<\/i>","library":""}}" data-widget_type="nav-menu.default">
Baidu
map