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

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

概述


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

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


对于本教程,我们需要配置两个模块。为此,我们需要在命令模式下切换到以下以及我们将如何做到这一点。首先,我们需要将蓝牙模块连接到Arduino,因为在上一个教程中解释的电路示意图。我们需要做的是将蓝牙模块的“en”引脚连接到5伏,并在Arduino板上切换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”是一个测试命令,我们应该返回消息“确定”。如果我们在键入“AT + UART?”我们应该恢复按摩,显示默认波特率为38400.然后,如果我们在键入“AT +角色?”我们将收回按摩“+角色= 0”,这意味着蓝牙设备处于从属模式。如果我们在键入“+ addr?”我们将恢复蓝牙模块的地址,它应该看起来像这样:98d3:34:905d3f。

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

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

主配置


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

主配置HC-05蓝牙模块Arduino

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

Nevertheless, that’s all we need for a basic configuration of the Bluetooth modules to work as a master and slave devices and now if we reconnect them in normal, data mode, and re-power the modules, in a matter of seconds the master will connect to the slave. Both modules will start flashing every 2 seconds indicating a successful connection.

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


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

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

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

必威外围提钱披露:这些是附属链接。作为一名亚马逊助理,我从合格的购买中获得收入。

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.bet188官方网站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); }

从代码:

/ * *如何配置和配对两个HC-05蓝牙模块*由Dejan Nedelkovski,www.www.mfxpo.com * * ==从代码== * / #ibet188官方网站nclude  #define按钮8伺服myservo;int状态= 20;int buttonstate = 0;void setup(){pinmode(按钮,输入);myservo.attach(9);Serial.begin (38400);//蓝牙模块的默认通信速率}void loop() {if(serial .available() > 0){//检查数据是否来自串口状态= serial .read();//从串行端口读取数据} //控制伺服电机myservo.write(州);延迟(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不会反应或响应。我不确定是否没有响应,或者如果我无法阅读响应。通过将其传递给串行监视器,我正在阅读响应(调试)。你可以看看我的代码来帮助我做这项工作吗?谢谢。

    回复
    • Dejan Nedelkovski.

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

      回复
    • 豪尔斯卢卡斯

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

      回复
  2. 贾斯汀斯特拉弗

    TNX DEJAN,伟大的教程!对我来说,它没有分压器和9600的波特拉特。

    回复
  3. 詹姆士

    你好,

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

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

    回复
  4. Tehzib Sadaf

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

    回复
  5. 米..

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

    回复
  6. 诺曼yousaf.


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

    回复
      • 诺曼yousaf.

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

  7. 威廉

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

    我不知道如何控制两个伺服。
    它困扰我> _ <

    回复
  8. 卡洛斯

    您好Dejan,卓越的教程,我用HC 05作为主机和从属作为HC 06,而没有电压分隔率为9600。现在我想用两个伺服和两个锅来做这件事。这是可能的?。你能帮我用代码吗?

    回复
  9. Mathew Rawson.

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

    回复
  10. 塞纳尔

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

    我该如何减少这种延迟?

    回复
      • 塞纳尔

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

  11. luis.

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

    回复
  12. 迈克尔

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

    回复
    • Dejan 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.

    回复
    • Dejan 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. 航空公司

    if(state =='1'){
    DigitalWrite(LEDPIN,高);// 带领
    状态= 0;
    }
    否则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 Starter Kits

受到推崇的

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

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