如何配置和配对两个HC-05蓝牙模块作为主设备和奴隶|在命令

在此Arduino教程中,我们将学习如何配置和配对两个HC-05蓝牙模块作为主设备和从设备。您可以观看以下视频或阅读下面的书面教程。

概述


在前面的两个教程中,我们已经学过了如何将HC-05蓝牙模块连接到Arduino并在一个Android智能手机和Arduino。在这些教程中,我们使用HC-05蓝牙模块及其默认配置作为从设备。

配置HC-05蓝牙模块 - AT命令


对于本教程,我们需要配置这两个模块。为了做到这一点,我们需要切换到AT命令模式,下面是我们将如何做到这一点。首先,我们需要将蓝牙模块连接到Arduino,如前面教程中解释的电路原理图。另外我们需要做的是将蓝牙模块的“EN”引脚连接到5伏,并在Arduino Board上切换TX和RX引脚。

如何在命令中配置和配对两个HC-05蓝牙模块作为主设备和从站

因此,Arduino的RX引脚需要通过分压器和Arduino的TX引脚连接到蓝牙模块的RX引脚,以及Arduino的TX引脚到蓝牙模块的TX引脚。现在在握住“en”引脚上的小按钮,我们需要为模块供电,这就是我们将如何输入命令模式。如果蓝牙模块LED每2秒闪烁,这意味着我们已在AT命令模式下成功输入。

在此之后,我们需要将空草图上传到Arduino,但不要忘记在上传时断开RX和TX线路。然后我们需要运行串行监视器,并选择“两个NL和CR”,以及“38400波特”速率,这是蓝牙模块的默认波特率。现在我们已准备好发送命令,它们的格式如下。

AT命令格式

所有命令都以“at”开头,然后是“+”符号,然后是<参数名称>,它们以“?”结尾签名当我们希望为该参数输入新值时,返回参数的当前值或“=”符号。

奴隶的配置


例如,如果我们只输入“AT”,这是一个测试命令,我们应该会得到消息“OK”。如果我们输入" AT+UART? "“我们应该会得到显示默认波特率为38400的消息。如果我们输入“AT+ROLE?”我们会得到一个消息“+ROLE=0”,这意味着蓝牙设备处于从属模式。如果我们输入“AT+ADDR?”“我们会得到蓝牙模块的地址,它应该看起来像这样:98d3:34:905d3f。

从属配置HC-05蓝牙模块Arduino

现在我们需要写下这个地址,因为我们在配置主设备时需要它。实际上,这就是我们在配置从设备时所需要的获取其地址的全部内容,尽管我们可以更改许多不同的参数,如名称、波特率、配对密码等,但我们不会在本例中这样做。

主配置


现在让我们继续,将另一个蓝牙模块配置为主设备。首先,我们将检查波特率,以确保它是相同的38400作为从属设备。然后输入“AT+ROLE=1”,我们将蓝牙模块设置为主设备。在此之后,我们将使用“AT+CMODE=0”将连接模式设置为“固定地址”,并使用“AT+BIND=”命令设置我们之前写下的从设备的地址。

主配置HC-05蓝牙模块Arduino

请注意,在写地址时,我们需要使用逗号,而不是冒号。还要注意,如果我们在“at +CMODE”命令中输入“1”而不是“0”,那么我们就可以跳过前面的步骤,这将使主服务器连接到其传输范围内的任何设备,但这是不安全的配置。在这里你可以找到一个完整的命令和参数列表:HC-05 AT命令列表

然而,这就是我们所需要的蓝牙模块作为主从设备的基本配置,现在如果我们以正常的数据模式重新连接它们,并重新给模块供电,在几秒钟内主从设备就会连接上。两个模块将每2秒闪一次,表示连接成功。

两个HC-05蓝牙模块之间的通信示例


好的,所以现在我们准备好了这个教程的实际榜样。这是电路原理图。我们将在主机上使用电位器,在奴隶上控制伺服电机。反之亦然,我们将在从机处使用按钮,在主设备上控制LED。

两个HC-05蓝牙模块电路原理图之间的通信

你可以从下面的任何一个网站获得这个Arduino教程所需的组件:

yaboAG娱乐城披露:这些是附属链接。作为一名亚马逊助理,我从合格的购买中获得收入。

Arduino源代码


描述:因此,首先我们需要定义程序所需的引脚和一些变量。在“设置”部分,在主设备上,我们将LED引脚设置为输出并立即将其设置为低,以及以38400波特率启动串行通信。类似,在从机处,我们将按钮引脚设置为输入,定义连接引脚的伺服,并以相同的波特率启动串行通信。

在循环部分中,在两个代码中,使用serial.available()函数,我们将检查是否有串行端口中有可用的数据才能读取和使用Serial.read()函数,我们将读取和存储数据“州”变量。因此,如果主机接收从从站发送的字符'1',当按钮状态为高电平时,或按下按钮,则LED将打开。否则如果字符为“0”,LED将关闭。

至于伺服电机的控制,首先在主控,我们读取电位器的值,并将其映射到一个适合的范围,为伺服从0到255。这个值被发送给从机,从机使用它来相应地旋转伺服电机。这就是我们需要的,下面是这个例子的演示。

主代码:

/* * How to configure and pair two HC-05 Bluetooth Modules * by Dejan Nedelkovski, www.亚搏手机版官方下载HowToMechatronics.com * * == MASTER CODE == */ #define ledPin 9 int state = 0;int potValue = 0;void setup() {pinMode(ledPin, OUTPUT);digitalWrite (ledPin、低);Serial.begin (38400);//蓝牙模块的默认通信速率}void loop() {if(serial .available() > 0){//检查数据是否来自串口状态= serial .read();//从串口读取数据}//控制LED如果(state == '1') {digitalWrite(ledPin, HIGH);// LED ON状态= 0;} else if (state == '0') {digitalWrite(ledPin, LOW);// LED ON状态= 0; } // Reading the potentiometer potValue = analogRead(A0); int potValueMapped = map(potValue, 0, 1023, 0, 255); Serial.write(potValueMapped); // Sends potValue to servo motor delay(10); }

从代码:

/* * How to configure and pair two HC-05 Bluetooth Modules * by Dejan Nedelkovski, www.亚搏手机版官方下载HowToMechatronics.com * * == SLAVE CODE == */ #include  #define button 8 Servo myServo;Int state = 20;int buttonState = 0;void setup() {pinMode(button, INPUT);myServo.attach (9);Serial.begin (38400);//蓝牙模块的默认通信速率}void loop() {if(serial .available() > 0){//检查数据是否来自串口状态= serial .read();//从串口读取数据}//控制伺服电机myServo.write(state);延迟(10);//读取按钮buttonState = digitalRead(按钮); if (buttonState == HIGH) { Serial.write('1'); // Sends '1' to the master to turn on LED } else { Serial.write('0'); } }

就是这样,如果您有任何问题,请随时在下面的评论部分提出帮助。

48回应

  1. 斯蒂芬

    嗨,我想知道你是否可以帮助我,我试图用HC-05做一些真正简单的事情,但它变得非常困难。我想从运行的Uno草图发送到HC-05的命令。我有HC-05引脚#32&#34连接到UNO,所以我可以通过UNO控制HC-05电源和状态。现在我使用uno将HC-05的状态更改为AT命令模式,然后通过Serial.print向HC-05发送命令。但是,HC-05不会反应或响应。我不确定是否没有响应,或者如果我无法阅读响应。通过将其传递给串行监视器,我正在阅读响应(调试)。你可以看看我的代码来帮助我做这项工作吗?谢谢。

    回复
    • 德扬Nedelkovski

      抱歉,但不能说这一点,因为我没有尝试制作这样的沟通,我没有这样的代码。抱歉,但是当有人向我询问时,我无法查看或做自定义代码,因为需要很长一次,并且有很多其他工作要做。

      回复
      • 斯蒂芬

        好的,关于如何在hc-05上设置睡眠模式的信息呢?我想应该有嗅嗅命令,但我没有找到任何文档。

        谢谢

    • 乔治·卢卡斯

      嘿,我一直在想做同样的事情,但我仍然不能这样做。你有什么成功吗?

      回复
  2. 贾斯汀斯特拉弗

    Tnx Dejan,很棒的教程!对我来说,它没有分压器,波特率为9600。

    回复
  3. 詹姆斯

    你好,

    这次写作的伟大工作!!极好的!

    我想知道,如果master HC-05已经和另一个HC-05配对了,一个蓝牙手机可以和master连接吗?

    回复
  4. Tehzib Sadaf

    你能告诉我这个项目的蓝牙范围吗?我的意思是,我能够用锅命令伺服的距离?

    回复
  5. 米..

    嗨,首先伟大的教程:)。我有一个问题。是否可以连接例如1个垫头和5个奴隶?如果是的话怎么做?我应该在+绑定中写几个地址吗?

    回复
  6. 诺曼yousaf.

    你好
    我2天前才开始搜索使用蓝牙模块的方法。但是当我看了你的教程视频,我几乎学到了所有我想知道的东西,仅仅在几分钟内。
    这是一个非常棒且非常容易学习的教程boss。
    我有一些问题。
    如果我配置1个HC-05作为master,其他的HC-05作为slave,波特率为9600,我可以使用两个单独的mcu进行简单的数字数据通信吗?
    这两个工作模式都是全双工模式吗?意味着如果主人发送任何数据字符串到奴隶,那么奴隶也可以发送任何数据回主人?
    提前谢谢你的帮助

    回复
      • 诺曼yousaf.

        谢谢先生
        请指导如果我配置1个HC05作为master和其他作为slave通过AT命令,并设置9600 buadrate,然后离开钥匙sw开路。然后两者都连接到普通的mcu如pic或avr或8951,这些会互相通信吗?

  7. 威廉

    如何控制两个伺服两个方向?
    两个HC-05和arduino。
    因为这只是一个伺服和一个方向。

    我不知道怎么控制两个Servo。
    它困扰我> _ <

    回复
  8. 卡洛斯

    你好,Dejan,优秀的教程,我使用hc 05作为主和从hc 06,没有分压器在波特率9600。现在我要用两个伺服器和两个锅。这是可能的吗?。你能帮我弄一下密码吗?

    回复
  9. 马修罗森

    嗨,我一直得到一个错误7当绑定到从到主,无法找到如何修复它。

    回复
  10. 塞纳尔

    谢谢!
    但我有一个问题。
    当我将数据从一个Arduino传递给另一个HC05,我得到了两秒的延迟。当我改变锅时,两秒钟(约)后,伺服电机旋转。

    我该如何减少这种延迟?

    回复
      • 塞纳尔

        我只是修改了一下接收码。我将' state '声明为String,因为它从Serial.read()中获取值,因此它将在String中。然后使用toInt()函数将其转换为整数值。

  11. luis.

    谢谢帮助我很多,在大学里我要做一个PICONET和这个例子帮助我。

    回复
  12. 迈克尔

    您好,我的名字是迈克,我是Arduino世界的新手。您的教程非常有用!但是我可以让我的HC 05和HC 05对(从快速闪烁到每秒左右闪烁),但我可以看到它们之间没有串行通信。我想知道你对像我这样的傻瓜写下教程是不是很麻烦,因为我不能因为我做错了!,即使是如何让他们说“嗨!”的东西。对彼此。感谢您与您的教程一起帮助像我这样的人,这很欣赏!

    回复
    • 德扬Nedelkovski

      大家好,谢谢。我确实有一些其他的基本教程,教如何使用各种引脚,串行通信,电机等。首先,您可以浏览这些其他教程,您应该能够学习足够多的内容。

      回复
  13. Jan Sebastian.

    你好!!我是1月。我正在研究基于Arduino的蓝牙游戏手柄,用于我的Arduino的机器人。我打算连接它们,以便我可以使用我的游戏手柄控制机器人。我已经制作了硬件,但在编写代码时遇到麻烦。我的游戏手柄上有一个操纵杆和4个按钮。总而言之,我认为有至少169条条件。蓝牙是否能够处理这些?或者它可以从Char'0'到'9'处理10条条件?例如,第12号将被发送到机器人作为char'1'和char'2'?先感谢您。 I am a big fan of yours. I have been watching your videos for quite a while now. I have started arduino just several months back, i consider myself a newbie. Your videos really help.

    回复
    • 德扬Nedelkovski

      你好呀。实际上你可以发送即使是“更长”的消息,但是当您收到时必须一次接受一个字节。For example, if you send “Test”, you will receive, ‘T’, ‘e’, ‘s’, ‘t’, so you can add these values into a single String or something, and do what ever you want with them.
      您还可以通过串行端口查看HC-12无线模块的新教程,该技术与串行端口一起使用相同的方式发送和接收数据。在本教程中,我给出了上面的示例的说明。

      回复
  14. airra

    if(state =='1'){
    DigitalWrite(LEDPIN,高);// 带领
    状态= 0;
    }
    Else if (state == ' 0 ') {
    digitalWrite (ledPin、低);// 带领
    状态= 0;

    “国家= 0”的目的是什么??

    谢谢

    回复
  15. 马修

    你好!我试过了,但没有成功。在串行监视器上arduinos只有问号和符号出现时,按下按钮。我该如何解决这个问题?谢谢你!

    回复
  16. 彼得

    请帮助。我在造一个机器人,但它不能工作。请告诉我如何让它工作。谢谢。

    只是在开玩笑。一如既往的帮助很棒。我从你学到了更多的学院教科书。

    回复
  17. har

    嗨,我尝试了同样的例子,在接收器结束时,我收到了除了锅值之外的一些额外数据。什么可能是问题?能否请你帮忙?谢谢

    回复
      • har

        是的,我检查了很多次,但仍然是它的同样的事情。获得除锅值以外的一些额外位吗?

      • har

        0253
        048
        050.
        013
        0254.
        050.
        057.
        010
        049.
        057.
        010
        050.
        013
        0254.
        050.
        050.
        我从串行监视器上复制了这个,罐子保持在最大位置,254是罐子的值,但我不知道其他值是什么。

发表评论

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

受到推崇的

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

最适合初学者和爱好者的示波器

受到推崇的

2019年初学者的8个最佳Arduino Starter Kits

8个最好的arduino初学者工具包

受到推崇的

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

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