HC05-ESP8266实现控制LED的闪烁

蓝牙设备是不可或缺的一部分,在这里我们将用HC05-ESP8266实现控制LED的闪烁

在本篇文章中,将HC-05蓝牙模块与流行的Wi-Fi模块ESP8266连接,并通过蓝牙发送命令无线控制LED。该LED可以由继电器和AC设备代替,以构建家庭自动化应用。

需要的组件

  • ESP8266MOD
  • HC-05蓝牙模块
  • ArduinoIDE
  • Serial Bluetooth Terminal(Android应用程序:商城搜索SPP蓝牙串口):监控智能手机上的蓝牙数据。
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wstpw8t7-1622473837593)HC05-ESP8266实现控制LED的闪烁_第1张图片

我们较为熟悉的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 命令。附上原理图:

HC05-ESP8266实现控制LED的闪烁_第2张图片

● 灵敏度典型值80dBm。
● 默认波特率:9600bps,8个数据位,1个停止位,无奇偶校验。
● 自动配对密码:“1234”或“0000”默认密码。
● 它有6个引脚。
● Vcc和Gnd引脚用于为HC-05供电。
● Tx和Rx引脚用于与微控制器通信。
● Enable引脚用以激活HC-05模块。当它为低电平时,模块被禁用
● 如果未与任何其他蓝牙设备
使用串行蓝牙终端(Android App)

该程序容易运用,需要的操作为:
第一步:使用数据线将模块连接到电脑
第二步:打开手机蓝牙
第三步:搜索HC-05蓝牙设备,并进行连接(初始密码为0000或1234)

HC05-ESP8266实现控制LED的闪烁_第3张图片

HC05-ESP8266实现控制LED的闪烁_第4张图片

做到这一步我所遇到的问题:

  1. hc-05与8266连接的vcc和gnd接反,虽然没有烧掉,但是用arduio烧录代码的时候烧录不进去,导致四处找原因,浪费时间。
  2. 不清楚RXD和TXD可以用IO替代,导致写代码的不清楚该如何应用RXD和TXD。
  3. HC-05与Android手机连接只能在上电的几秒钟内才能连接成功,且断电后立马上电,原来的存储的电还剩一点,不会马上复位,导致我不断连接失败。而且连接成功后也不是很稳定,经常失去连接。

编程NodeMCU ESP8266来连接蓝牙模块

要使用ArduinoIDE对NodeMCU ESP8266进行编程,只需使用Micro USB线从笔记本电脑插入,然后打开Arduino IDE。在本文中,将使用硬件串口和软件串口。硬件串口将用于向Arduino 串口监视器读取和写入数据,而软件串口将用于与HC-05通信。HC05-ESP8266实现控制LED的闪烁_第5张图片

其实不是很稳定,容易掉。

接下来代码分析:

首先,包括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,以制作蓝牙家庭自动化项目,这也是之后继续学习的方向。HC05-ESP8266实现控制LED的闪烁_第6张图片

本文使用的完整代码如下所示:

#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

你可能感兴趣的:(笔记,物联网,单片机,arduino)