如今,蓝牙已成为数字设备不可或缺的一部分,并且已内置在大多数设备中,例如智能手机,笔记本电脑,PC,相机,手表,健身手环等。自从发现蓝牙以来,蓝牙一直是无线通信中的主要协议。尽管蓝牙技术从根本上说是电缆替换系统,但它还利用了到现有数据网络的通用桥接器以及用于各种配置的许多设备的临时连接机制。我们已经将蓝牙模块HC05和HC06与许多其他微控制器一起使用,以使它们进行无线通信:
- 将蓝牙HC-05与STM32F103C8蓝色药丸连接:控制LED
- HC-05蓝牙模块与AVR微控制器的接口
- 使用8051单片机的Android受控机器人
- 在蓝牙上使用Android App控制Raspberry Pi GPIO
- 使用Arduino的蓝牙控制玩具车
今天,我们将HC-05蓝牙模块与流行的Wi-Fi模块ESP8266连接,并通过蓝牙发送命令来无线控制LED。该LED可以用继电器和AC设备代替,以构建家庭自动化应用程序。
所需组件
硬件:
- NodeMCU ESP8266
- HC-05蓝牙模块
软件:
- Arduino IDE
- 串行蓝牙终端(Android应用程序):监视智能手机上的蓝牙数据。
ESP8266 HC-05蓝牙模块电路图
将蓝牙模块HC-05与NodeMCU ESP8266连接的电路图非常简单,如下所示:
ESP8266需要一个外部蓝牙模块,因为它没有像ESP32这样的内置蓝牙。ESP32内置了 低功耗蓝牙(BLE)和经典蓝牙功能,之前我们已经介绍了一些教程:
- ESP32 BLE服务器-GATT服务用于电池电量指示
- ESP32 BLE客户端–连接健身带以触发灯泡
- 如何在ESP32中使用串行蓝牙
HC-05蓝牙模块
HC-05是串行蓝牙模块。可以使用AT命令进行配置。它可以在三种不同的配置(主控,从属,回送)中工作。在我们的项目中,我们将其用作奴隶。HC-05模块的功能包括:
- 典型的-80dBm灵敏度。
- 默认波特率:9600bps,8个数据位,1个停止位,无奇偶校验。
- 自动配对密码:默认密码为“ 1234”或“ 0000”。
- 它具有6个引脚。
- Vcc和Gnd引脚用于为HC-05供电。
- Tx和Rx引脚用于与微控制器通信。
- 使能引脚用于激活HC-05模块。低电平时,模块被禁用
- 状态引脚动作状态指示器。未与其他任何蓝牙设备配对/连接时,LED持续闪烁。当它与任何其他蓝牙设备连接/配对时,LED会以2秒的恒定延迟闪烁。
要了解有关蓝牙模块的更多信息,请通过我们的其他蓝牙相关项目进行。
使用串行蓝牙终端(Android App)
使用此应用程序非常简单,只需几个步骤。屏幕截图如下。只需将HC-05与智能手机配对即可。默认代码为“ 0000”或“ 1234”,但大多数情况下为“ 1234”。
- 首先下载并安装该应用程序,然后前往设备以查找HC-05模块。选择在应用程序中搜索的HC-05模块。如果找不到,则检查HC-05是否正确供电。
- 单击HC-05后,它将连接。现在,在消息框中键入任何消息并发送。它将被打印在Arduino串行监视器上。
编程NodeMCU ESP8266以连接蓝牙
要使用ArduinoIDE编程NodeMCU ESP8266,只需使用Micro USB电缆将其从笔记本电脑或PC上插入,然后打开Arduino IDE。对于本教程,将使用硬件序列和软件序列。硬件串行将用于读写数据到Arduino串行监视器,而Sofware串行将用于与HC-05通信。与往常一样,完整的代码和演示视频在本教程的结尾给出。
最初,包括软件序列库,因为它将在本教程中使用。
#包括
定义用于软件串行通信的RX和TX引脚,还定义连接到NodeMCU的LED引脚。我们正在使用NodeMCU的内部LED,该LED在D4针上。
SoftwareSerial btSerial(D2,D3); // RX, int led = D4;
以9600波特率启动软件和硬件串行。将LED引脚设置为输出。打印一些欢迎和调试消息。
Serial.begin(9600); btSerial.begin(9600); pinMode(D4,输出); Serial.println(“ Started…”);
首先,从蓝牙模块读取并定义一个情况,如果蓝牙模块从电话接收到“ B”,然后启动连接到NodeMCU的D4的LED指示灯,否则接收到“ S”,然后停止闪烁LED。我们不在这里使用 delay() 。但是Arduino'millis'不会被用来妨碍Arduino的性能。
如果(btSerial.available()> 0){ char data = btSerial.read(); 开关(数据) { 情况'B': ledB =“闪烁”; 打破; 情况'S': ledB =“停止”; 打破; 默认值: break; } }
定义了毫秒,并将延迟设置为500ms,即led每隔500ms就会闪烁一次。您也可以通过更改“间隔”的值来配置led延迟。led状态将被切换。
unsigned long currentMillis = millis();
如果(ledB ==“ blink”){ Serial.println(“闪烁开始”); if(currentMillis-previousMillis> = interval){ previousMillis = currentMillis; 如果(ledState == LOW){ ledState = HIGH; }其他{ ledState = LOW; } digitalWrite(led,ledState); } }
这将完成对NodeMCU的编程,以使用蓝牙无线闪烁LED。您还可以更改程序以使用LED执行不同的任务,例如可以将LED替换为带有AC设备的继电器以进行蓝牙家庭自动化项目。如有任何疑问或建议,请访问下面的论坛或发表评论。