亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino和HC-05蓝牙模块完整教程

在本 Arduino 蓝牙教程中,我们将学习如何使用 HC-05 模块通过蓝牙通信控制 Arduino。您可以观看以下视频或阅读下面的书面教程了解更多详情。

概览

在本教程中,我做了两个示例,使用智能手机控制 Arduino 和使用笔记本电脑或 PC 控制 Arduino。为了不使本教程超载,在我的下一个教程中,我们将学习如何配置 HC-05 蓝牙模块并在两个单独的 Arduino 板作为主设备和从设备之间进行蓝牙通信。

在我们开始第一个示例之前,使用智能手机控制 Arduino,让我们仔细看看 HC-05 蓝牙模块。与只能设置为从机的 HC-06 模块相比,HC-05 也可以设置为主机,从而可以在两个单独的 Arduino 板之间进行通信。这个模块有几个不同的版本,但我推荐使用分线板上的那个,因为这样连接起来更容易。 HC-05模块是一个蓝牙SPP(Serial Port Protocol)模块,即通过Serial Communication与Arduino进行通信。

您可以从以下任何网站获取本 Arduino 教程所需的组件:

  • HC-05 蓝牙模块……………….
  • Arduino 开发板………………………………
  • 面包板和跳线…………

电路原理图


这是我们需要将模块连接到 Arduino 板的方法。

我拥有的特定模块可以从 3.6 到 6 伏供电,因为它位于包含稳压器的分线板上。但是,数据引脚的逻辑电压电平为 3.3V。因此,Arduino TX(Transmit Pin,5V输出)和蓝牙模块RX(Receive Pin,仅支持3.3V)之间的线需要通过分压器连接,以免烧毁模块。另一方面,蓝牙模块的TX pin和Arduino RX pin之间的线可以直接连接,因为蓝牙模块的3.3V信号足以被Arduino Board接受为高逻辑。

Arduino蓝牙通信示例源码

所以,现在我们准备好制作 Arduino 代码来实现 Arduino 板和智能手机之间的通信。我们将做一个简单的例子,只是打开和关闭一个 LED,但它足以理解通信。

#define ledPin 7
int state = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  Serial.begin(38400); // Default communication rate of the Bluetooth module
}

void loop() {
  if(Serial.available() > 0){ // Checks whether data is comming from the serial port
    state = Serial.read(); // Reads the data from the serial port
 }

 if (state == '0') {
  digitalWrite(ledPin, LOW); // Turn LED OFF
  Serial.println("LED: OFF"); // Send back, to the phone, the String "LED: ON"
  state = 0;
 }
 else if (state == '1') {
  digitalWrite(ledPin, HIGH);
  Serial.println("LED: ON");;
  state = 0;
 } 
}Code language: Arduino (arduino)

说明: 首先,我们需要定义 LED 将连接到的引脚和一个变量,我们将在其中存储来自智能手机的数据。在设置部分,我们需要将 LED 引脚定义为输出并立即将其设置为低电平。如前所述,我们将使用串行通信,因此我们需要以 38400 波特率开始串行通信,这是蓝牙模块的默认波特率。在带有 Serial.available() 函数的循环部分,我们将检查串行端口中是否有可用数据可供读取。这意味着当我们将数据发送到蓝牙模块时,该语句将是正确的,因此使用 Serial.read() 函数我们将读取该数据并将其放入“状态”变量中。因此,如果 Arduino 接收到字符“0”,它将关闭 LED,并使用 Serial.println() 函数通过串行端口将字符串“LED:OFF”发送回智能手机。此外,我们将“状态”变量重置为 0,这样上述两行将只执行一次。注意这里的“state”变量是整数,所以当我们收到来自智能手机的字符“0”时,整数“state”变量的实际值为48,对应字符“0”,根据ASCII table.. 这就是为什么在“if”语句中我们将“state”变量与字符“0”进行比较。另一方面,如果接收到的字符为“1”,则 LED 会亮起并返回字符串“LED:ON”。

现在代码已准备好上传,但为了做到这一点,我们需要拔下 TX 和 RX 线,因为上传时 Arduino 使用串行通信,因此引脚 RX(数字引脚 0)和 TX(数字引脚 1)很忙。如果我们使用 Arduino Board 的其他 TX 和 RX 引脚,我们可以避免这一步,但在这种情况下,我们将不得不使用 SoftwareSerial.h 库进行串行通信。

相关:如何配置和配对两个 HC-05 蓝牙模块作为主从模块 | AT指令

将智能手机连接到 HC-05 蓝牙模块和 Arduino

现在我们准备将智能手机连接到蓝牙模块和 Arduino。我们这里需要做的是激活蓝牙,智能手机就会找到HC-05蓝牙模块。

然后我们需要配对设备,HC-05模块的默认密码是1234。配对设备后,我们需要一个控制Arduino的应用程序。 Play 商店中有许多应用程序可以用于此目的,它们将与我们编写的 Arduino 代码一起使用。但是,我使用 MIT App Inventor 在线应用程序为本教程制作了自己的自定义应用程序。这是一个用于构建 Android 应用程序的出色且易于使用的应用程序,在我的下一个教程中,您可以找到详细的分步指南,如何为您的 Arduino 项目构建您自己的自定义 Android 应用程序。

你可以在这里下载我为这个例子制作的应用程序:

Arduino 蓝牙教程示例 Android 应用程序

1 个文件 1.38 MB 下载

使用连接按钮,我们将智能手机连接到蓝牙模块,按钮下方的状态文本将告诉我们是否已成功连接。使用“打开”和“关闭”按钮,我们可以打开和关闭 LED。按钮上方的文本是 Arduino 在按下特定按钮时发送回智能手机的文本。

通过蓝牙通信使用笔记本电脑或 PC 控制 Arduino

让我们看看如何使用笔记本电脑或 PC 通过蓝牙控制 Arduino。因此,首先我们需要将笔记本电脑与 HC-05 蓝牙模块配对,我们可以从笔记本电脑蓝牙设置中进行配对。笔记本电脑将发现 HC-05 模块并使用“1234”密码配对设备。

一旦我们在笔记本电脑设备管理器中配对设备,在端口(COM 和 LPT)下,将出现两个名为“蓝牙链路上的标准串行”的新实体。从这里我们可以看到设备将通过其进行通信的串行端口的 COM 端口号。

我们将继续使用与之前相同的示例,打开和关闭 LED 并将字符串发送回笔记本电脑,因此我们将使用与之前描述的相同的 Arduino 代码。

处理IDE源代码

现在使用 Processing IDE,我们将制作一个用于控制 Arduino 的程序。这是源代码。

import processing.serial.*;
Serial myPort;
String ledStatus="LED: OFF";

void setup(){
  size(450, 500);
  myPort = new Serial(this, "COM5", 38400); // Starts the serial communication
  myPort.bufferUntil('\n'); // Defines up to which character the data from the serial port will be read. The character '\n' or 'New Line'
}
void serialEvent (Serial myPort){ // Checks for available data in the Serial Port
  ledStatus = myPort.readStringUntil('\n'); //Reads the data sent from the Arduino (the String "LED: OFF/ON) and it puts into the "ledStatus" variable
}

void draw(){
  background(237, 240, 241);
  fill(20, 160, 133); // Green Color
  stroke(33);
  strokeWeight(1);
  rect(50, 100, 150, 50, 10);  // Turn ON Button
  rect(250, 100, 150, 50, 10); // Turn OFF Button
  fill(255);
  
  textSize(32);
  text("Turn ON",60, 135);
  text("Turn OFF", 255, 135);
  textSize(24);
  fill(33);
  text("Status:", 180, 200);
  textSize(30);
  textSize(16);
  text("Program made by Dejan Nedelkovski,\n     www.HowToMechatronics.com", 80, 320);

  text(ledStatus, 155, 240); // Prints the string comming from the Arduino
  
  // If the button "Turn ON" is pressed
  if(mousePressed && mouseX>50 && mouseX<200 && mouseY>100 && mouseY<150){
    myPort.write('1'); // Sends the character '1' and that will turn on the LED
    // Highlighs the buttons in red color when pressed
    stroke(255,0,0);
    strokeWeight(2);
    noFill();
    rect(50, 100, 150, 50, 10);
  }
  // If the button "Turn OFF" is pressed
  if(mousePressed && mouseX>250 && mouseX<400 && mouseY>100 && mouseY<150){
    myPort.write('0'); // Sends the character '0' and that will turn on the LED
    stroke(255,0,0);
    strokeWeight(2);
    noFill();
    rect(250, 100, 150, 50, 10);
  }
}Code language: Arduino (arduino)

说明: 我们需要包含串行库并创建一个串行对象以启用串行通信,并为 LED 状态定义一个字符串变量。在设置部分我们需要设置程序的窗口大小并启动​​串行通信。至于这里的 COM 端口号,我们需要尝试我们之前在设备管理器中注意到的两个 COM 端口号之一。下一行定义了串行端口的缓冲,在我们的例子中,直到有一个新行,实际上每次 Arduino 发送字符串“LED:OFF”或“LED ON”时都有一个新行,因为 println( ) 功能。接下来,使用 serialEvent() 函数我们检查串口中是否有可用数据可供读取。如果是这样,使用 readStringUntil() 函数,我们将从 Arduino 发送的串行端口读取该数据,在我们的例子中是字符串“LED:OFF”或“LED:ON”。

在不断重复的主 draw() 函数中,我们制作程序的所有图形和功能。所以首先我们需要设置背景颜色、填充颜色、笔触大小和颜色,然后使用 rect() 函数绘制两个按钮。使用 text() 函数,我们打印所有文本,包括来自 Arduino 的 ledStatus 字符串。现在剩下的就是让按钮发挥作用。因此,使用第一个“if”语句,我们限制了“打开”按钮的区域,因此当按下按钮时,字符“1”将通过串行端口发送到 Arduino,这将打开 LED。下一个 for 行用于在按下按钮时突出显示该按钮。 “关闭”按钮也是如此。

现在程序已经准备好了,所以当我们点击运行按钮时,程序会自动激活笔记本电脑和Arduino之间的蓝牙通信。 HC-05蓝牙模块每两秒开始闪烁一次,表示模块已连接,我们可以使用笔记本电脑控制LED。

这就是本教程的全部内容,但不要忘记查看我的下一个教程,我们将学习如何配置 HC-05 蓝牙模块并在两个单独的 Arduino 板之间进行蓝牙通信作为主设备和从设备。

另外,请随时在下面的评论部分提出任何问题,不要忘记查看我收集的 Arduino 项目。


制造工艺

  1. Arduino RFID 锁教程
  2. JX 波形发生器
  3. u-blox LEA-6H 02 GPS 模块,带有 Arduino 和 Python
  4. 基于 Arduino、Windows 和 Azure 的跌倒检测系统
  5. 使用 Arduino Uno 和蓝牙进行汽车控制
  6. Arduino 指纹传感器教程
  7. ArduRadio AlarmClock
  8. 带 Arduino 和蓝牙的智能咖啡机
  9. Raspberry Pi 和 Arduino 笔记本电脑
  10. rDUINOScope
  11. 带蓝牙的智能恒温器、通风和灯光控制
  12. 超声波传感器 HC-SR04 和 Arduino – 完整指南