蓝牙设备是不可或缺的一部分,在这里我们将用HC05-ESP8266实现控制LED的闪烁
在本篇文章中,将HC-05蓝牙模块与流行的Wi-Fi模块ESP8266连接,并通过蓝牙发送命令无线控制LED。该LED可以由继电器和AC设备代替,以构建家庭自动化应用。
需要的组件
我们较为熟悉的ESP8266需要一个外置蓝牙模块,因为它没有像ESP32这样的内置蓝牙。 ESP32内置蓝牙低功耗(BLE)和经典蓝牙,故而选用hc-05蓝牙模块。
简单介绍一下hc-05
HC-05是一款蓝牙转串口转换器,可连接微控制器其他设备,允许他们无线通信。
HC-05蓝牙模块的特点:
(1) 采用CSR主流蓝牙芯片,蓝牙V2.0协议标准;
(2)输入电压:3.6V–6V,禁止超过7V
(3)波特率为1200,2400,4800,9600,19200,38400,57600,115200 用户可设置;
(4)带连接状态指示灯,LED快闪表示没有蓝牙连接;LED慢闪表示进入 AT命令模式;
(5)板载3.3V稳压芯片,输入电压直流3.6V-6V;未配对时,电流约 30mA(因LED灯闪烁,电流处于变化状态);配对成功后,电流大约10mA。
(6) 用于GPS导航系统,水电煤气抄表系统,工业现场采控系统;
(7)可以与蓝牙笔记本电脑、电脑加蓝牙适配器等设备进行无缝连接。
(8)HC-05 嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模 式:命令响应工作模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输;当模块处于命令响应工作模式时能执行下述所有 AT 命令。附上原理图:
● 灵敏度典型值80dBm。
● 默认波特率:9600bps,8个数据位,1个停止位,无奇偶校验。
● 自动配对密码:“1234”或“0000”默认密码。
● 它有6个引脚。
● Vcc和Gnd引脚用于为HC-05供电。
● Tx和Rx引脚用于与微控制器通信。
● Enable引脚用以激活HC-05模块。当它为低电平时,模块被禁用
● 如果未与任何其他蓝牙设备
使用串行蓝牙终端(Android App)
该程序容易运用,需要的操作为:
第一步:使用数据线将模块连接到电脑
第二步:打开手机蓝牙
第三步:搜索HC-05蓝牙设备,并进行连接(初始密码为0000或1234)
做到这一步我所遇到的问题:
编程NodeMCU ESP8266来连接蓝牙模块
要使用ArduinoIDE对NodeMCU ESP8266进行编程,只需使用Micro USB线从笔记本电脑插入,然后打开Arduino IDE。在本文中,将使用硬件串口和软件串口。硬件串口将用于向Arduino 串口监视器读取和写入数据,而软件串口将用于与HC-05通信。
其实不是很稳定,容易掉。
接下来代码分析:
首先,包括Software Serial库
#include
定义用于软件串口通信的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,以制作蓝牙家庭自动化项目,这也是之后继续学习的方向。
本文使用的完整代码如下所示:
#include
int D2,D3,D4;
SoftwareSerial btSerial(D2, D3);
int led = D4;
int ledState = LOW;
String ledB = "";
unsigned long previousMillis = 0;
const long interval = 500;
void setup() {
delay(1000);
Serial.begin(9600);
btSerial.begin(9600);
pinMode(D4, OUTPUT);
Serial.println("Started...");
}
void loop() {
if (btSerial.available() > 0) {
char data = btSerial.read();
switch (data)
{
case 'L':
ledB = "blink";
break;
case 'N':
ledB = "stop";
break;
default:
break;
}
}
unsigned long currentMillis = millis();
if (ledB == "blink") {
Serial.println("blinking started");
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite(led, ledState);
}
}
}
参考文章:https://www.yiboard.com/thread-1176-1-1.html