诸如HC-05和HC-06之类的蓝牙模块易于设置并可以与Arduino IDE一起快速使用,但是它们具有自身的局限性,如高功耗,并且可以在旧版的蓝牙V2.0上运行。另外,最近我给自己买了一个新的ESP32 DEV工具包,这些模块具有很多功能,例如内置Wi-Fi和蓝牙,充足的ADC和DAC引脚,音频支持,SD卡支持,深度睡眠模式等。建立物联网项目的一切。
就像任何业余爱好者都喜欢它一样,ESP32现在由Arduino IDE正式支持。之前我们必须对Neil Kolbans Library进行大量的变通,但是现在由于这个人的辛勤工作,使用Arduino IDE对ESP32进行编程已成为小菜一碟。因此,我启动了Arduino IDE,并浏览了一些示例BLE程序,通过这些程序,我什么都不懂。经过长时间的冲浪和探索,我意识到如果您必须使用ESP32使用低功耗蓝牙(BLE),还有很多事情要理解。我决定在单独的文章中介绍BLE,因此在这里我们将使用ESP32的经典串行蓝牙通过智能手机切换LED。如果您有兴趣了解如何使用BLE功能,请查看ESP32 BLE Server和ESP32 BLE Client上的本文
ESP32蓝牙入门
我想尝试的第一个程序是一个简单的程序,通过它可以打开或关闭手机蓝牙终端应用程序中的LED,就像过去的HC-05时代一样。但事实证明,蓝牙低功耗(BLE)并非为此而缩进。我还发现ESP32模块中有两种类型的蓝牙,一种是经典蓝牙,另一种是BLE低功耗蓝牙。好的,但是为什么?….为什么我们有两种类型的蓝牙,我应该在我的项目中使用什么?
了解低功耗蓝牙(BLE)和ESP32经典蓝牙
顾名思义,“蓝牙低功耗”比传统蓝牙消耗更少的功率。它是通过按需发送数据并进行预定义的定期更新来实现的。但是与经典的蓝牙不同,它不用于传输文件或音乐。您是否曾经想过您的手机如何自动识别出您刚刚配对的蓝牙设备是音频设备,笔记本电脑或电话,还可能已经看到无线音频播放器或健身带中的电池电量自动显示在状态栏上?您的手机;BLE设备的特性使所有这些成为可能。甲BLE设备的工作原理与蓝牙V4.0和作为服务器或作为客户端,这使得能够以低功率操作BLE是信标,智能手表,健身带等的理想选择。
另一方面,经典蓝牙只是我们用于传输文件和其他数据的简单普通的旧蓝牙。几乎所有BLE设备都具有与之关联的经典蓝牙功能。诸如HC-05之类的模块中使用的蓝牙是经典蓝牙的一个版本,称为蓝牙SSP(串行端口协议),这意味着蓝牙遵循标准的串行协议,这使得发送和接收数据更加容易,而没有太多开销。在本教程的最后,我们将学习如何在ESP32中使用串行蓝牙功能。
在本文中,我们将使用ESP32上的串行蓝牙功能将其与智能手机配对,并使用Play商店中的任何现有蓝牙终端应用程序将命令发送到ESP32并相应地切换板载LED。
在以后的文章中,我们将介绍ESP32 BLE以及服务器和客户端。BLE服务器通常用于将BLE数据发送到其他蓝牙设备,而BLE客户端用于扫描其他BLE设备,因此充当信标。
为ESP32准备Arduino IDE
请注意,默认情况下,Arduino IDE不支持ESP32板;您必须使用板管理器下载并安装它们。如果这是您使用ESP32的第一个程序,请按照此入门教程将ESP32板添加到Arduino并上传测试草图。
此外,您可以使用ESP32进行更多项目,而无需使用任何微控制器。
ESP32的串行蓝牙程序
本页末尾提供了使用ESP32蓝牙切换LED的完整程序。在此标题下,让我们将代码分成小片段并尝试理解它们。如果您已经使用过其他蓝牙模块(例如HC-05),那么您会发现此ESP32蓝牙经典示例程序非常相似。
该程序的想法是使用ESP32初始化串行蓝牙连接,并侦听来自配对设备的数据。如果输入数据为“ 1”,则打开LED;如果为“ 0”,则应关闭LED。我们通过添加头文件 BluetoothSerial 来开始我们的程序,该文件使ESP32 Bluetooth可以用作Bluetooth SSP。
#include“ BluetoothSerial.h” //用于串行蓝牙的头文件,默认情况下会添加到Arduino中
这个库背后有很多事情要做,但是我们选择不深入研究它以保持简单。接下来我们需要的是与蓝牙相关的操作的对象。在这里,我将我的命名为 ESP_BT ,但是您可以选择任何名称。
蓝牙串行ESP_BT; //蓝牙对象
接下来,在 void setup() 函数内部。我们以9600的波特率开始串行通信,并使用名称初始化Bluetooth信号。在这里,我将其命名为 “ ESP32_LED_Control ”,这是我们的手机在尝试配对时会找到的名称。最后,我将内置的LED引脚声明为输出引脚,因为我们将根据蓝牙信号对其进行切换。
void setup(){ Serial.begin(9600); //在9600 ESP_BT.begin(“ ESP32_LED_Control”)中 启动串行监视器。//蓝牙信号的名称Serial.println(“蓝牙设备已准备好配对”); pinMode(LED_BUILTIN,输出); //指定输出LED引脚 }
在无限 无效循环 函数内部,我们检查是否有来自蓝牙模块的任何数据,如果是,则读取数据并将其存储在变量 invoke中 。我们还将在串行监视器上打印此值,以交叉检查Arduino收到了什么。
if(ESP_BT.available())//检查是否从蓝牙接收到任何信息 { 入站= ESP_BT.read(); //阅读我们接收到的内容 Serial.print(“ Received:”); Serial.println(传入);
现在,无论接收到什么数据,都将存储在变量 inent中 ,因此我们可以直接将此变量与期望值进行比较并执行所需的操作。但是从蓝牙发送的值将采用 char 形式,而Arduino将读取从手机发送的char的Decimal值。在本例中,对于char'0',十进制值为48,对于char'1',十进制值为49。您可以参考ASCII图表来了解每个字符的十进制值。
在这里,我们将传入变量与48和49进行了比较,分别检查了0和1。如果它是1,则我们关闭LED并打印确认消息给蓝牙,表明LED已关闭,反之亦然,为0。
if(incoming == 49) { digitalWrite(LED_BUILTIN,HIGH); ESP_BT.println(“ LED点亮”); } if(incoming == 48){ digitalWrite(LED_BUILTIN,LOW); ESP_BT.println(“ LED熄灭”); }
使用ESP32测试串行蓝牙
将ESP连接到Arduino IDE,然后按照入门教程中所述选择正确的板卡和端口。既然是3次方板管理员可能需要更长的时间的人,让编译的代码和上传。上传后,启动串行监视器(仅用于调试),然后在手机上打开蓝牙设置。您应该找到一个 与之 配对的名为 ESP32_LED_Control 的蓝牙设备。
现在,您可以在智能手机上打开任何蓝牙终端应用程序,我正在使用从Google App商店下载的名为“蓝牙终端”的应用程序。将蓝牙应用程序连接到我们刚刚配对的设备,然后键入1并按发送。
ESP32模块应按照我们的程序接收它并打开LED指示灯,并且还会向您发送一条确认消息,说明LED指示灯已打开,如上图所示。您还可以检查串行监视器,该监视器将以十进制格式显示ESP32蓝牙接收的数据,这是您的Arduino如前所述将0读取为48,将1读取为49。我的终端窗口的快照如下所示。
同样,您还应该能够通过从移动应用程序发送0来关闭LED。完整的工作在下面的视频中显示。希望您理解本教程并学到了一些有用的东西。如果您有任何疑问,请随时将其留在下面的评论部分,或使用我们的论坛寻求其他技术帮助。