|
现今,蓝牙已成为数字设备不可或缺的一部分,它内置于大多数设备中,如智能手机、笔记本电脑、PC、相机、手表、健身带等等。自从被发明以来,蓝牙一直是无线通信领域的主导协议。虽然蓝牙技术基本上是一种电缆替代系统,但它也可以桥接现有的数据网络,以及用各种配置实现多个设备的临时连接机制。
在本篇文章中,我们将HC-05蓝牙模块与流行的Wi-Fi模块ESP8266连接,并通过蓝牙发送命令无线控制LED。该LED可以由继电器和AC设备代替,以构建家庭自动化应用。
需要的组件 ● NodeMCU ESP8266 ● HC-05蓝牙模块 ● Arduino IDE ● Serial Bluetooth Terminal(Android应用程序):监控智能手机上的蓝牙数据。
ESP8266和HC-05蓝牙模块连接电路图 将蓝牙模块HC-05与NodeMCU ESP8266连接的电路图非常简单,如下所示:
ESP8266需要一个外置蓝牙模块,因为它没有像ESP32这样的内置蓝牙。 ESP32内置蓝牙低功耗(BLE)和经典蓝牙。
HC-05蓝牙模块
它可以使用AT命令配置。它可以在三种不同的配置中工作(主机、从机、环回)。在我们的项目中,将它用作从机。 HC-05模块的功能包括, ● 灵敏度典型值80dBm。 ● 默认波特率:9600bps,8个数据位,1个停止位,无奇偶校验。 ● 自动配对密码:“1234”或“0000”默认密码。 ● 它有6个引脚。 ● Vcc和Gnd引脚用于为HC-05供电。 ● Tx和Rx引脚用于与微控制器通信。 ● Enable引脚用以激活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线从笔记本电脑插入,然后打开Arduino IDE。在本文中,将使用硬件串口和软件串口。硬件串口将用于向Arduino 串口监视器读取和写入数据,而软件串口将用于与HC-05通信。
首先,包括Software Serial库, - #include <SoftwareSerial.h>
复制代码定义用于软件串口通信的RX和TX引脚,还定义连接到NodeMCU的LED引脚。我们使用的是NodeMCU的内部LED,它位于Pin D4。 - SoftwareSerial btSerial(D2, D3); // RX,
- int led = D4;
复制代码以9600波特率启动软件和硬件串口。将Led引脚设置为输出。打印一些欢迎和调试消息。 - Serial.begin(9600);
- btSerial.begin(9600);
- pinMode(D4, OUTPUT);
- Serial.println("Started...");
复制代码
首先,从蓝牙模块读取数据,并定义如果蓝牙模块从电话接收“B”,那么连接到NodeMCU的D4引脚的LED开始闪烁,否则如果它接收到“S”,则停止闪烁LED。我们这里没有使用delay()函数。 - if (btSerial.available() > 0) {
- char data = btSerial.read();
- switch (data)
- {
- case 'B':
- ledB = "blink";
- break;
- case 'S':
- ledB = "stop";
- break;
- default:
- break;
- }
- }
复制代码
定义毫秒数,并将延迟设置为500毫秒,即LED每隔500毫秒闪烁一次。您还可以通过更改“interval”的值来配置LED延迟。 - if (ledB == "blink") {
- Serial.println("blinking started");
- if (currentMillis - previousMillis >= interval) {
- previousMillis = currentMillis;
- if (ledState == LOW) {
- ledState = HIGH;
- } else {
- ledState = LOW;
- }
- digitalWrite(led, ledState);
- }
- }
复制代码
通过编程NodeMCU,我们可以使用蓝牙无线控制闪烁LED。您还可以更改程序以使用LED执行不同的任务,例如可以使用带有AC设备的继电器替换LED,以制作蓝牙家庭自动化项目。
代码 本文使用的完整代码如下所示: - /* HC-05 interfacing with NodeMCU ESP8266
- */
- #include <SoftwareSerial.h>
- SoftwareSerial btSerial(D2, D3); // Rx,Tx
- int led = D4; // led also the internal led of NodemCU
- int ledState = LOW; // led state to toggle
- String ledB = "";
- unsigned long previousMillis = 0; // millis instaed of delay
- const long interval = 500; // blink after ecery 500ms
- void setup() {
- delay(1000);
- Serial.begin(9600);
- btSerial.begin(9600); // bluetooth module baudrate
- pinMode(D4, OUTPUT);
- Serial.println("Started...");
- }
- void loop() {
- if (btSerial.available() > 0) { // check if bluetooth module sends some data to esp8266
- char data = btSerial.read(); // read the data from HC-05
- switch (data)
- {
- case 'B': // if receive data is 'B'
- ledB = "blink"; // write the string
- break;
- case 'S': // if receive data is 'S'
- ledB = "stop";
- break;
- default:
- break;
- }
- }
- unsigned long currentMillis = millis();
- if (ledB == "blink") { // if received data is 'B' the start blinking
- Serial.println("blinking started");
- if (currentMillis - previousMillis >= interval) {
- previousMillis = currentMillis;
- if (ledState == LOW) {
- ledState = HIGH;
- } else {
- ledState = LOW;
- }
- digitalWrite(led, ledState);
- }
- }
- }
复制代码
|