通过蓝牙经典版传输数据



本章将介绍如何使用 ESP32 通过蓝牙传输数据。Arduino 拥有一个专用于 ESP32 的 BluetoothSerial 库,它使通过蓝牙传输数据变得像传输数据到串口监视器一样简单。我们将了解如何围绕 ESP32 创建蓝牙字段,将我们的智能手机连接到该字段,并与 ESP32 通信。

代码演练

我们将使用本章中的示例代码。您可以在 File -> Examples -> BluetoothSerial -> SerialToSerialBT 中找到它。它也可以在 GitHub 上找到。

我们从包含 BluetoothSerial 库开始。

#include <BluetoothSerial.h>

如果您没有使用过 ESP32,那么接下来的几行代码有点无关紧要。它们检查蓝牙配置是否已启用,如果未启用则会发出警告。蓝牙配置在您的 ESP32 上默认启用,因此,如果您仅将 ESP32 与 Arduino IDE 配合使用,则可以将这些行注释掉。错误消息中提到的 make menuconfig 实际上是通过 ESP-IDF 访问的,而不是通过 Arduino IDE 访问的。所以,底线是,不要担心这些行。

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

接下来,我们定义 BluetoothSerial 对象。

BluetoothSerial SerialBT;

在 setup 中,我们将使用 **SerialBT.begin()** 函数开始围绕 ESP32 的蓝牙字段。此函数接受一个参数,即蓝牙设备的名称(在本例中为 ESP32)。这是您在手机上扫描蓝牙网络时将显示的名称。

void setup() {
   Serial.begin(115200);
   SerialBT.begin("ESP32test"); //Bluetooth device name
   Serial.println("The device started, now you can pair it with bluetooth!");
}

现在,循环在这里非常简单。如果您在 Serial 上有任何传入的文本(即您在串口监视器上输入的文本),请将其通过 SerialBT 发送。如果您从 SerialBT 收到任何文本,请通过 Serial 发送它,或者换句话说,在串口监视器上打印它。

void loop() {
   if (Serial.available()) {
      SerialBT.write(Serial.read());
   }
   if (SerialBT.available()) {
      Serial.write(SerialBT.read());
   }
   delay(20);
}

测试代码

要测试此代码,建议您在智能手机上下载一个串口蓝牙终端应用程序(以下所示或任何等效应用程序)。它将帮助您与 ESP32 配对,显示从 ESP32 收到的消息,并帮助您向 ESP32 发送消息。

Bluetooth Serial Terminal

要在 Android 设备上安装它,请点击 此处。iOS 的等效应用程序可以是 BluTerm

您可以在下面找到使用串口蓝牙终端应用程序执行的测试的屏幕截图。我已将 ESP32 的蓝牙名称更改为“ESP32test345”,因为我已经将我的手机与另一个蓝牙名称为“ESP32test”的 ESP32 配对。配对完成后,可以在串口蓝牙终端应用程序中添加该设备,然后您可以像在消息应用程序中与其他用户通信一样与您的设备通信。

Pairing and Communication

配对和通信

Arduino Serial Terminal

Arduino 串口终端的对应视图

恭喜。您已使用蓝牙与 ESP32 通信。继续探索 BluetoothSerial 库附带的其他示例。

注意 - 您可能会想要在 ESP32 上同时使用 WiFi 和蓝牙。不建议这样做。虽然 ESP32 具有用于 WiFi 和蓝牙的独立堆栈,但它们共享一个公共无线电天线。因此,当两个堆栈都试图访问天线时,模块的行为变得不可预测。建议一次只允许一个堆栈访问天线。

广告