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

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

概述


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

HC 05蓝牙模块

在我们开始第一个例子,使用智能手机控制Arduino之前,让我们仔细看看HC-05蓝牙模块。与只能设置为Slave的HC-06模块相比,HC-05也可以设置为Master,可以实现两个独立的Arduino板之间的通信。这个模块有几个不同的版本,但我推荐一个出现在突破板上,因为这样它更容易连接。HC-05模块是一个蓝牙SPP (Serial Port Protocol)模块,通过串口通信与Arduino进行通信。

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

yaboAG娱乐城披露:这些是联盟链接。作为亚马逊助理,我从合格购买中获得。

电路原理图


下面是我们需要如何将模块连接到Arduino板。

Arduino和HC 05蓝牙模块电路示意图 -  Arduino蓝牙教程

我所拥有的特定模块可以从3.6到6伏,因为它带来了包含电压调节器的分子板。但是,数据引脚的逻辑电压电平为3.3V。因此,Arduino TX(具有5V输出的传输引脚)和蓝牙模块RX(仅支持3.3V的接收引脚)的线路需要通过分压器连接,以便不刻录模块。另一方面,蓝牙模块TX引脚和Arduino RX引脚之间的线路可以直接连接,因为来自蓝牙模块的3.3V信号足以被接受为Arduino板的高逻辑。

Arduino蓝牙通信示例源代码


因此,现在我们已准备好制作Arduino代码,以便在Arduino板和智能手机之间进行通信。我们将制作一个简单的例子,刚刚开启和关闭一个LED,但它将足以理解通信。

#define ledpin 7 int state = 0;void setup(){pinmode(LEDPIN,输出);DigitalWrite(LEDPIN,低);Serial.Begin(38400);//蓝牙模块的默认通信率} void循环(){if(serial.available()> 0){//检查数据是否从串行端口状态= serial.read();//从串行端口读取数据}如果(state =='0'){digitalwrite(LEDPIN,LED);//关闭LED elfial.println(“LED:OFF”);//发送回电话,字符串“LED:ON”状态= 0;}如果(state =='1'){digitalwrite(LEDPIN,高);serial.println(“LED:ON”);; state = 0; } }

描述:首先,我们需要定义LED将连接到的引脚和一个变量,我们将在其中存储来自智能手机的数据。在设置部分,我们需要将LED引脚定义为输出,并立即将其设置为低电平。如前所述,我们将使用串行通信,所以我们需要以38400波特率开始串行通信,这是蓝牙模块的默认波特率。在serial .available()函数的循环部分中,我们将检查串行端口中是否有可用的数据需要读取。这意味着当我们将数据发送到蓝牙模块时,该语句将为真,然后使用Serial.read()函数读取该数据并将其放入“state”变量中。因此,如果Arduino接收到字符' 0 ',它将关闭LED,并使用serial .println()函数,它将通过串口将字符串“LED: off”发送回智能手机。此外,我们将把“state”变量重置为0,以便上面的两行只执行一次。注意这里的“state”变量是整数,所以当我们收到来自智能手机的字符“0”时,整数“state”变量的实际值是48,对应于字符“0”,根据美国信息交换标准代码表格这就是为什么在" if "语句中我们将" state "变量与字符' 0 '进行比较的原因。另一方面,如果接收到的字符是' 1 ',LED会亮起来,字符串" LED: On "将被发送回来。

现在,代码已准备好上传,但是为了做到我们需要拔下TX和RX线路,因为在上传Arduino时使用串行通信,因此引脚Rx(数字引脚0)和TX(数字PIN1)正忙。如果我们使用Arduino Board的其他TX和RX引脚,我们可以避免此步骤,但在这种情况下,我们必须使用Softwareserial.h库进行串行通信。

有关的:两台HC-05蓝牙模块| AT命令如何配置并配对

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


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

智能手机蓝牙设置

然后我们需要配对设备,HC-05模块的默认密码为1234.在我们配对设备后,我们需要一个控制Arduino的应用程序。播放商店中有许多应用程序,用于此目的,它将与我们写的Arduino代码合作。但是,我用来为本教程制作了自己的自定义申请麻省理工学院应用程序发明家在线申请。这是一个很好且易于使用的Android应用程序以及在我的下一个教程中,您可以通过步骤指南找到详细步骤如何构建自己的定制Android应用程序为您的Arduino项目

Arduino和Android蓝牙应用

您可以在此下载我在此示例中为此的应用程序:

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

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


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

Arduino和HC-05蓝牙模块 - 笔记本电脑设置1

一旦我们将在Ports(Com&LPT)下会将设备配对,在端口(COM&LPT)下,两个新实体将出现名为“标准串行的蓝牙链接”。从这里我们可以看到设备将通信的串口的COM端口号。

Arduino和HC-05蓝牙模块 - 笔记本电脑设置2

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

处理IDE源代码


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

导入处理。*;串行MyPort;字符串LEDSTATUS =“LED:OFF”;void setup(){大小(450,500);MyPort = New Serial(这,“Com5”,38400);//启动串行通信myport.bufferuntil('\ n');//定义向上读取串口中数据的字符。字符'\ n'或'new line'} void serialevent(串行myport){//检查串行端口LEDSTATUS = MYPORT.READSTRingUNTIL('\ n')中的可用数据;//读取从Arduino发送的数据(字符串“LED:OFF / ON),它进入”LEDSTATUS“变量} void draw(){背景(237,240,241);填充(20,160,133); //绿色中风(33);行程重量(1);矩形(50,100,150,50,10); //打开按钮矩形(250,100,150,50,10); //转弯关闭按钮填充(255); TextSize(32);文本(“打开”,60,135);文本(“关闭”,255,135); TextSize(24);填充(33);文本(“状态:", 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); } }

描述:我们需要包含串行库并创建串行对象,以便启用串行通信,以及为LED状态定义字符串变量。在“设置”部分中,我们需要设置程序的窗口大小并启动​​串行通信。至于这里的COM端口号我们需要尝试我们之前在设备管理器中注意到的两个COM端口号之一。The next line defines the buffering of the serial port and in our case that’s until there is a new line and actually there is a new line each time the Arduino sends the String “LED: OFF” or “LED ON” because of the println() function. Next, using the serialEvent() function we check whether there is available data in the serial port to be read. If so, using the readStringUntil() function we will read that data from the serial port which has been sent from the Arduino and in our case that’s the String “LED: OFF” or “LED: ON”.

在不断重复的主绘制()函数中,我们制作程序的所有图形和功能。所以首先,我们需要设置背景颜色,填充颜色,笔划大小和颜色以及使用rect()函数我们绘制两个按钮。使用Text()函数我们打印所有文本,包括来自Arduino的LEDStatus字符串。现在留下了什么是使按钮功能突出。所以使用第一个“如果”声明我们限制了“打开”按钮的区域,所以当按下按钮时,字符'1'将在串行端口上发送到Arduino,这将打开LED。下一个线用于在按下时突出显示按钮。“关闭”按钮相同的过程。

Arduino和笔记本电脑蓝牙通信通过处理IDE

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

静态所有本教程,但别忘了检查我的下一个教程,我们将学习如何配置HC-05蓝牙模块,并在两个单独的Arduino板之间成为主设备和从设备之间的蓝牙通信。

另外,请在评论区提出任何问题,不要忘记查看我的Arduino项目集合足彩网女欧洲杯

38回应

  1. 布鲁斯马歇尔

    你好,
    请在配对两台HC-05蓝牙模块上向我发送给您的YouTube视频的链接吗?问候,布鲁斯马歇尔

    回复
  2. 苹果电脑

    你好,
    我正在尝试制作相同,但我收到这个错误“错误:'导入'不命名为类型导入处理。*”。

    我如何解决它???

    thanx。

    回复
  3. Rishi.

    我编写了一个HC-SR04来检测它前面发生的任何运动。我也跟随你的教程,制作了一个应用程序来控制Arduino使用HC-05蓝牙模块。每次HC-SR04检测到运动时,我希望在手机上安装了该应用程序的人的手机上播放一种声音。我该怎么做呢?

    回复
  4. 达尔玛kc.

    做得好的教程 - 你能分享你所做的简单应用程序的Android代码吗?谢谢你 。

    回复
  5. Anggi

    Nidekovki先生,为什么我的蓝牙HC-05模块有2个LED在同一时间闪烁(红色和蓝色)?

    由于我给出“ON”逻辑LED未开启。

    回复
    • Anggi

      我可以要求您的电子邮件地址吗?我想发给你一张关于我的问题的照片/视频

      回复
    • 穆罕默德奥萨马

      从Arduino给HC-05蓝牙模块5V。如果你给小于5V,可能是,它不工作。

      回复
  6. 拉扎尔

    嗨,我有一个问题。我已经连接了BT模块并上传了代码,但是当我按下按钮时,没有任何反应。

    我有可能烧掉了BT模块吗?

    如果是,我该如何核实?

    回复
  7. Sanjeeban Maji

    你好,
    非常感谢你的这个教程,我尝试了这个,它是工作的。
    只有一个问题:当led是亮的,它显示led:关,反之亦然。你能帮我纠正一下吗?
    如果应用程序在蓝牙上自动切换,它也会有帮助!

    回复
  8. 的名字

    谢谢你的教程。我不得不将波特率设置为9600.似乎它是默认为9600 for hc05

    回复
  9. 艾德里安

    你好,能否提供一下应用程序的源代码?不仅仅是构建的apk,我需要扩展你的简单apk的功能,用于一个学校项目

    回复
  10. 杰夫

    我在Mega 2650上使用了PIN 13,9600用于波特率。同样使用应用程序,我必须从文本到红色和蓝色块上的TextColor,以便正确显示。
    非常酷的介绍无线arduino控制。

    回复
  11. 皮特

    嗨,非常好的介绍。我现在正在尝试重新创建它,但我注意到Arduino图中的2个电阻的标签似乎从图表中的电阻器上的频段逆转。我不是ee,但这件事吗?如果它确实很重要,哪个电阻会在哪里?我猜这并不重要(?),因为我是第一个注意到它的东西。
    当我正在寻找要使用的电阻时,我刚刚注意到这一点,并试图将颜色匹配图中的乐队中的颜色......恰好有一个电阻包,其中频段描述它。
    谢谢
    皮特

    回复
    • Dejan Nedelkovski.

      嘿,这是一个很棒的评论。虽然图中电阻器的值是正确的,但是颜色标示是错误的。因此,考虑将电阻器按所述值连接起来。Arduino引脚> 1K > 2K > GND。

      回复
  12. 装置Fotiou

    你好 !伟大的教程!但是,我想知道,我试着用我的学生制作一个应用程序,可以检测2个配对设备的蓝牙信号强度。你认为这是可能的吗?我们希望能够从一个设备检查我们是否接近另一个设备。(像游戏一样隐藏和寻求和寻求“冷”和“热”的东西)。
    谢谢你的教程。
    sotiris.

    回复
  13. 保罗卡罗尔

    只是为了让别人知道我偶然发现的问题:并非所有HC05模块都有38400的默认速度。雷默认为9600,所以arduino代码在我改变之前,arduino代码将无法为我工作。
    也注意到一些板上的Rx/Tx引脚0和1。都是Serial1,所以您需要适当地更改代码。

    回复
  14. 鲍里斯

    Paul Carrol, you save me . I use HC-06 and spent few hour before I find Paul reply about HC speed. Also HC-06 working only with speed 9600.

    德扬,伟大的教程。继续做好工作

    回复
  15. 乔治帕帕斯蒂利罗

    你好,

    这个项目是否与Arduino Uno合作?你为什么选择了兆?

    回复
  16. 路易斯·里瓦斯

    你好Dejan,这个教程非常有用,非常感谢!我正在研究一个项目,其中,使用MIT应用程序发明家,您可以从智能手机提供一个数字,4个段显示显示该数字。我依靠这个教程和你躺着的另一个教程。

    我需要更多的应用程序发明者方面的帮助,我想呵呵。

    无论如何,再次感谢!

    回复
  17. ümit.

    在电路原理图中,您已经正确地写出了电阻器的值,但是它们的颜色是相反的。
    谢谢你提供的信息。

    回复
  18. Nagarajah Shankar

    你好德州,
    感谢您的伟大工作和教程。就像你的简单和细节教程很容易理解。我53岁仍然学习您的教程,以便以当地语言自由教学的孩子机器人。
    愿上帝保佑你。
    再次感谢。
    来自斯里兰卡的格栅

    回复

留下一个回复

您的电子邮件地址不会被公开。

受到推崇的

2019年初学者和爱好者的最佳进入级示波器

为初学者和爱好者最好的示波器

受到推崇的

2019年针对初学者的8个最佳Arduino入门工具包

初学者的8个最佳Arduino Starter Kits

受到推崇的

最佳3D打印机初学者和爱好者- 3D打印

初学者和爱好者的最佳3D打印机