首页

ESP32蓝牙初学者教程|学习ESP32经典蓝牙

在本教程中,我们将了解ESP32的蓝牙功能。ESP32同时支持经典版和经典版蓝牙v4.2以及蓝牙低能耗(BLE)标准.让我们在这个ESP32蓝牙教程中关注经典蓝牙。我们将学习一些关于ESP32中的蓝牙架构,如何配置、设置和启动蓝牙通信,以及几个简单的项目,涉及到通过蓝牙通信在ESP32和智能手机之间进行数据传输。[ESP32项目初学者

ESP32-Bluetooth-Pairing

ESP32蓝牙技术简介

蓝牙是一种很好的无线通信技术,已经流行了好几年了。蓝牙是一种短距离无线通信技术,工作在未经许可的2.4 GHz ISM(工业、科学和医疗)频段,最远可达100米。

ESP32 SoC将蓝牙链路控制器(或链路管理器)和基带集成到其硅片中。物理上,只有一个外部天线是需要适当的蓝牙通信。

由于Wi-Fi和蓝牙都在相同的2.4 GHz ISM频率下工作,所以Wi-Fi Radio和蓝牙Radio在ESP32中使用相同的天线。如果你看一下ESP32 SoC的引脚,只有一个引脚连接到天线(LNA_IN)。

ESP32既支持经典蓝牙(Classic BT),也支持低功耗蓝牙(BLE),可配置blueroid蓝牙栈。ESP32蓝牙支持三种类型的主机控制器接口(HCI):UART、SPI和VHCI(虚拟HCI)接口(一次只能使用一个,UART是默认的)。

开始使用ESP32经典蓝牙

经典蓝牙也被称为蓝牙基本速率/增强数据速率,是最初的点对点网络拓扑结构,设计用于主设备和从设备之间的一对一无线通信。尽管多个从设备可以连接到一个主设备,但只有一个从设备可以主动与主设备通信。我们的蓝牙键盘和鼠标使用经典蓝牙技术。另一个简单的例子是通过蓝牙在两个设备(如两个移动电话或笔记本电脑和一个移动电话)之间传输文件,它基于经典蓝牙功能。

另一方面,BLE或蓝牙低能耗,顾名思义,是为低功耗运行而设计的,以物联网应用为主要目标进行开发。蓝牙规范4.0增加了BLE功能,主要用于电池供电的设备,如手表、音频设备、健康追踪器、健身监视器和数据信标。

让我们再做一个关于ESP32 BLE的教程,现在重点关注ESP32经典蓝牙。

蓝牙栈通过VHCI(虚拟主机控制器接口)与蓝牙控制器通信,同时为用户应用程序提供接口。

蓝牙配置文件确定了从PHY到L2CAP的每一层蓝牙的功能,而蓝牙协议定义了消息格式和数据传输、链路控制等过程。

下面是ESP32的blueroid蓝牙栈支持的经典蓝牙配置文件和协议列表。

经典的蓝牙配置文件

  • 差距
  • A2DP (SNK)
  • AVRCP (CT)

经典的蓝牙协议

  • L2CAP
  • SDP
  • AVDTP
  • AVCTP

ESP32处理器与蓝牙控制器之间的通信是基于串行接口的。让我们通过使用经典蓝牙的' BluetoothSerial '库来探索更多关于ESP32蓝牙的知识。

ESP32经典蓝牙串行通信

如果您曾经使用过Arduino和任何蓝牙设备,如HC-05,那么您可能会记得Arduino UNO和HC-05通过串行通信进行通信。ESP32已经有了一个蓝牙控制器,它在主Xtensa处理器和蓝牙控制器之间也有类似的通信。

这意味着,在从蓝牙设备无线接收到数据后,ESP32中的蓝牙控制器通过串行通信将数据传输到ESP32的处理器。同样,为了通过蓝牙发送数据,ESP32处理器通过串行接口将数据传输到蓝牙控制器。

我们将使用这些信息与专用的“bluetthserial”库一起传输和接收数据。

BluetoothSerial库的工作原理类似于Serial库,但它只是在ESP32中。BluetoothSerial库提供的一些常用函数有:

  • 开始()
  • 可用()
  • write ()
  • read ()

让我们写一个简单的代码在ESP32和手机之间传输数据。要查看ESP32的接收数据,我们将打印串口上的数据。对于手机来说,为了通过蓝牙发送和接收数据,我们必须使用一个应用程序。

我尝试了许多Android的蓝牙串行应用程序,但最终选择了Kai Morich的“串行蓝牙终端”。你可以从这个链接(或从Play Store)下载它。

代码

首先,让我们看看代码,在这个过程中,我们可以理解工作原理。代码非常简单。创建一个类' BluetoothSerial '的对象,并使用' begin() '函数开始通信。

您可以将ESP32蓝牙设备的名称作为参数传递给' begin() '函数。如果您将其留空,则使用默认名称,即ESP32。同时初始化波特率为115200的正常串行通信。

然后,在循环函数中,从BluetoothSerial读取数据并打印到Serial Monitor上,从Serial Monitor读取数据并写入BluetoothSerial。

当我们向BluetoothSerial写入数据时,手机上的蓝牙终端应用程序接收数据并打印到应用程序上。当你在应用程序中输入数据并通过蓝牙发送数据时,BluetoothSerial将读取数据并打印到串行监视器上。

上传代码和测试

将代码上传到ESP32后,打开Arduino IDE的串行显示器,可以看到ESP32打印出一些关于蓝牙的信息。此外,它还显示“ready”消息。

ESP32-Bluetooth-Serial-Monitor-1

现在,在你的智能手机上打开蓝牙并扫描蓝牙设备。你会看到一个“配对设备”和“可用设备”的列表,从可用设备中选择“ESP32”。

Pairing-Bluetooth-ESP32-2

你的手机将询问你是否想与“ESP32”配对,你选择是(或ok)。没有密码。现在,打开手机上的“串行蓝牙终端”(Serial Bluetooth Terminal)应用程序,点击屏幕左上角的三个横条。

Serial-Bluetooth-Terminal-ESP32-1

选择“Devices”选项卡,从列表中选择ESP32。

Serial-Bluetooth-Terminal-ESP32-2

现在,点击顶部的“链接”图标连接到ESP32蓝牙设备。在进行连接时,应用程序将显示状态为“连接到ESP32…”,如果连接成功,它将显示“连接”。

Serial-Bluetooth-Terminal-ESP32-3

下面是输入数据通过蓝牙传输的空间。输入一些东西,然后点击发送按钮。发送的数据在应用程序上被回显。该数据通过蓝牙发送到ESP32,并由BluetoothSerial read()函数接收。

Serial-Bluetooth-Terminal-ESP32-4

由于我们将此信息传递到串行端口,您可以看到打印在串行显示器上的数据。

ESP32-Bluetooth-Serial-Monitor-2

同样,您可以将数据从ESP32发送到移动电话。只需在串行监视器中键入一些数据,然后单击发送。这些数据通过蓝牙通过BluetoothSerial write()函数发送到移动电话。

串行蓝牙终端应用程序将读取该数据并将其打印到应用程序上。

ESP32-Bluetooth-Serial-Monitor-3

蓝牙控制LED使用ESP32

使用上述应用程序,我们可以稍微修改代码,并使用ESP32实现一个蓝牙控制的LED。这个项目的目的是看看通过从蓝牙发送和解释数据来控制ESP32的GPIO引脚是多么容易。

为了简单起见,让我们使用宏键从手机应用程序传输' 1 '和' 0 '。我将M1赋值为“1”,M2赋值为“0”。您可以将接收到的数据与字符' 1 '和' 0 '或它们在ASCII中的十进制等价物(例如49和48)进行比较。

Serial-Bluetooth-Terminal-ESP32-5

当接收到' 1 '时,连接到GPIO 2的LED将打开,如果接收到' 0 ',LED将关闭。

显然,LED只是GPIO引脚处于ON和OFF状态的一个表示。您可以使用ESP32将此应用程序进一步改进为蓝牙控制中继。

代码

Bluetooth-Controlled-LED-ESP32

结论

关于ESP32蓝牙通信的一个完整的初学者指南。您学习了在ESP32 SoC中蓝牙通信的一些重要基础知识,如何在ESP32中设置经典蓝牙,使用蓝牙从智能手机传输数据到ESP32,以及一个名为使用ESP32的蓝牙控制LED的扩展项目(可以很容易地修改以控制继电器)。

2反应

  1. 我的开发板是ESP32-MINI-1-N4。虽然我下载了ESP库,但我在Arduino板上似乎没有看到它

留下一个回复

您的电邮地址将不会公布。

Electronicshub图标
Baidu
map