一起体验ESP32物联网人工智能小车的蓝牙通信功能

摘要:本文介绍如何使用ESP32的蓝牙实现和电脑或者手机的通信

在前面进行小车功能调试的时候,都是将一些提示信息通过串口输出到电脑上的串口监控窗口中,因此,要想时刻都能看到串口输出的数据,就得时时刻刻都用数据线与ESP32开发板保持连接。非常的不方便,那么能不能摆脱累赘的数据线,用无线的方式来获得程序中输出的各种调试信息呢?答案当然是可以的,今天来介绍一下如何使用蓝牙协议,将调试信息传送到电脑或者手机上。

在前边介绍ESP32芯片的时候已经介绍过了,ESP32芯片强大的射频功能是其相对于其他单片机的一个巨大的优势。所谓的射频功能是指通过电磁波进行的无线数据交换技术。其实在日常生活中已经很常见了,手机的3G、4G通信、Wi-Fi、蓝牙、门禁卡的RFID、NFC等等,都是属于射频功能的范畴。ESP32芯片内置了Wi-Fi和蓝牙两个被使用最广泛的射频技术,使其在物联网引用领域有了得天独厚的优势。很多其他单片机在需要使用无线通信技术时,都会借助低成本的ESP系列芯片来实现。

蓝牙(Bluetooth)技术是一种短距离无线电技术,主要用于简化电子设备之间的通信。它允许设备如智能手机、平板电脑、笔记本电脑、个人电脑以及其他移动通信终端之间,无需有线连接即可进行数据的快速传输和语音通话。蓝牙技术还支持设备与互联网之间的连接,从而实现了无线局域网的构建。

蓝牙从1999年发布1.0标准,到现在的5.X版,从开始的经典蓝牙,到现在的低功耗蓝牙,已经经过了二十几年的发展。形成了一个非常庞大的应用体系和非常丰富的应用场景。要是详细介绍起来,那需要相当长的篇幅才能讲个大概。在这里我们先接触一个蓝牙最基本的应用,就是串行通信,所要实现的功能就是把智能小车的调试信息,通过蓝牙发送到手机或者笔记本电脑上,在程序调试的时候摆脱数据线的束缚。

下面来了解一下蓝牙的分类。蓝牙可以简单的分为两大类,经典蓝牙和低功耗蓝牙。经典蓝牙我们一般说的是BT,低功耗蓝牙我们一般说成BLE。当设备支持蓝牙4.0时,还得进一步确认设备是支持BT单模、BLE单模还是BT和BLE都支持的双模。

低功耗蓝牙(BLE):支持蓝牙协议4.0或更高的模块。主打低功耗,多用于物联网类型。

经典蓝牙(BT):指支持蓝牙协议在4.0以下的模块。主打短距离数据高速传输,多用于蓝牙耳机等。

经典蓝牙可再细分为:传统蓝牙和高速蓝牙。

传统蓝牙:2004年推出,蓝牙2.0/2.1协议。

高速蓝牙:2009年推出,蓝牙3.0协议,速率提高到约24Mbps,是传统蓝牙模块的八倍。

双模蓝牙:即兼容BLE和BT,如手机,使用分时机制来达到同时与低功耗蓝牙和经典蓝牙设备通信。

在这里需要注意的一点是,单模的BT设备和单模的BLE设备是不能使用蓝牙协议进行通信的。也就是说,蓝牙协议不是完全的向下兼容。

ESP32芯片是支持双模蓝牙通信的,也就是BT和BLE都支持。那么,今天,我们要实现的调试数据发送功能,则是属于经典蓝牙BT的使用方法。乐鑫科技为开发者提供了BluetoothSerial类来完成经典蓝牙的数据传输。这个方法与前边介绍的异步串行通信类Serial很类似。下面就来看一个常见的经典蓝牙测试程序。

在这个程序中,就是实现了将串口收到的数据通过蓝牙转发出去,将蓝牙收到的数据,通过串口输出的功能。具体代码如下所示:

#include "BluetoothSerial.h"

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)

#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it

#endif

BluetoothSerial SerialBT;

void setup() {

  Serial.begin(115200);

  SerialBT.begin("ESP32");  //Bluetooth device name

  Serial.println("The device started, now you can pair it with bluetooth!");

}

void loop() {

  if (Serial.available()) {

    SerialBT.write(Serial.read());  //将串口收到的数据,再通过蓝牙串口转发出去

  }

  if (SerialBT.available()) {  //将蓝牙串口收到的数据,再通过串口把信息发回给电脑

    Serial.write(SerialBT.read());

  }

  delay(20);

}

在这个程序中,需要注意以下几点:

1. 需要引入头文件

#include "BluetoothSerial.h"

2. 需要自己创建类的实例

BluetoothSerial SerialBT;

3. 初始化方法的参数为蓝牙的名称

SerialBT.begin("ESP32");

那么收发数据的处理,与之前经常使用的Serial没有任何区别。

编译、上传程序之后,就可以测试一下这个程序了。第一次需要用电脑与ESP32的蓝牙配对连接。具体过程如下:

  1. 当Arduino IDE的串口监视器内会提示建立蓝牙链接,如下图所示:

2. 打开笔记本的蓝牙设备,然后单击“添加设备”,之后,找到名称为“ESP32”的设备,并建立连接,如下图所示:

3. 配对成功后,在蓝牙设备列表中,会显示“已配对”状态,如下图所示。

4. 然后打开电脑的“设备管理器”,看一下蓝牙设备生成的串口的是哪个。如下图所示:

5. 用串口调试工具打开蓝牙生成的串口。如下图所示:

之后,两个设备就可以互相发送信息了。为了接收的信息可以直观些,用串口调试工具发送数据的时候,不要选择“HEX发送”,而是直接发送字符串。这样在ESP32的串口监视器中才可以显示出来,否则可能接收的数据无法显示。

作者:一起玩儿科技

物联沃分享整理
物联沃-IOTWORD物联网 » 一起体验ESP32物联网人工智能小车的蓝牙通信功能

发表评论