如何配置和配对两个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引脚需要通过分压器连接到蓝牙模块的RX引脚,Arduino的TX引脚连接到蓝牙模块的TX引脚。现在,当按住“EN”pin上的小按钮时,我们需要为模块供电,这就是我们如何进入命令模式。如果蓝牙模块指示灯每2秒闪烁一次,则表示我们已成功进入AT命令模式。

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

在命令格式

所有命令都以“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()函数将读取数据并将数据存储到“state”变量中。因此,当按钮状态为高时,或者按钮被按下时,如果主设备接收到从设备发送的字符‘1’,则LED就会亮起。否则,如果字符是' 0 ',LED就会熄灭。

至于伺服电机控制,首先在主机上,我们读取电位器值并将其映射到伺服从0到255的合适范围内。该值被发送到使用它相应地旋转伺服电机的从设备。这就是我们所需要的只是榜样。

主码:

/ * *如何配置和配对两个HC-05蓝牙模块*由Dejan Nedelkovski,www.www.mfxpo.com * * ==主码== * / #debet188官方网站fine LEDPIN 9 int状态= 0;int potvalue = 0;void setup(){Pinmode(LEDPIN,输出);DigitalWrite(LEDPIN,低);Serial.Begin(38400);//蓝牙模块的默认通信率} void循环(){if(serial.available()> 0){//检查数据是否从串行端口状态= serial.read();//从串行端口读取数据} //控制LED IF(state =='1'){digitalwrite(LEDPIN,高);//在状态= 0上LED;}如果(state =='0'){digitalwrite(LEDPIN,LOW);//在状态= 0上LED; } // 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循环(){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发送AT指令。我有HC-05引脚#32 & #34连接到Uno,所以我可以通过Uno控制HC-05电源和状态。现在我使用Uno将HC-05的状态更改为AT命令模式,然后通过串行发送命令。打印到HC-05。但是,HC-05没有反应。我不确定是否没有回应,或如果我不能阅读回应。我通过将响应传递给串行监视器来读取响应(调试)。你能帮我看一下我的代码吗?谢谢。

    回复
    • Dejan Nedelkovski.

      抱歉,但不能说任何关于这,因为我没有尝试做这样的沟通,我没有这样的代码。很抱歉,当有人问我时,我不能看或做定制代码,因为它需要相当长的时间,有很多其他工作要做。

      回复
    • 豪尔斯卢卡斯

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

      回复
  2. 贾斯汀斯特拉弗

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

    回复
  3. 詹姆士

    你好,

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

    我想知道,如果主HC-05已经与其他HC-05配对,则可以将蓝牙电话连接到主机?

    回复
  4. John Tan Chin Yen

    如果我用一个HC-05主控制器控制一个HC-6从控制器呢?

    回复
  5. Tehzib Sadaf.

    你能告诉我这个项目的蓝牙范围吗?我的意思是我能在多远的地方用这个锅来控制伺服?

    回复
  6. 米甲

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

    回复
  7. 诺曼yousaf.

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

    回复
      • 诺曼yousaf.

        谢谢先生
        请指导如果我将1 HC05配置为主和其他从AT命令并设置9600 Buadrate,然后留下钥匙SW开放。然后连接到正常的MCU,如PIC或AVR或8951,这些都会互相通信吗?

  8. 威廉

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

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

    回复
  9. 卡洛斯

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

    回复
  10. Mathew Rawson.

    嗨,我一直在绑定到奴隶到主站时出错7,找不到如何修复它。

    回复
  11. 塞纳尔

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

    我该如何减少这种延迟?

    回复
      • 塞纳尔

        好吧,我刚刚修改了接收者代码。我声明了“陈述”作为字符串,因为它是从Serial.read()的值,因此它将在字符串中。然后,我使用toint()函数将其转换为整数值。

  12. luis.

    谢天谢地,在大学里,我必须做一个微微网,这个榜样帮助我。

    回复
  13. 迈克尔

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

    回复
    • Dejan Nedelkovski.

      嗨,谢谢。我有一些其他基本教程,教学如何使用各种引脚,串行通信,电机等。开始,您可以通过这些其他教程,您应该能够学习得足够了。

      回复
  14. Jan塞巴斯蒂安

    嗨! !我是jan,我在为我的arduino机器人设计一个基于arduino的蓝牙手柄。我计划连接它们,这样我就可以用我的手柄控制机器人。我已经制作了硬件,但在编写代码时有困难。我的手柄上有一个操纵杆和4个按钮。总的来说,我相信至少有169个条件。蓝牙能处理这些吗?或者它可以只处理从char ' 0 '到' 9 '的10个条件?例如,数字12会被作为字符1和字符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.

      嗨。事实上,你可以发送甚至“更长的”消息,但当接收时,你将不得不接受它的一个字节一次。例如,如果您发送“Test”,您将接收到,' T ', ' e ', ' s ', ' T ',因此您可以将这些值添加到单个字符串或其他东西中,并对它们做任何您想做的事情。
      您还可以查看我的新教程HC-12无线模块,它通过串口以相同的方式发送和接收数据。在本教程中,我将解释上面的例子。

      回复
  15. 航空公司

    if(state =='1'){
    digitalWrite (ledPin、高);/ /领导
    国家= 0;
    }
    否则if(state =='0'){
    DigitalWrite(LEDPIN,低);/ /领导
    国家= 0;

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

    谢谢

    回复
  16. 马太福音

    你好!我试过了这一点,但它不起作用。在按下按钮时,arduinos的串行监视器仅在按钮时出现问号和符号。我怎样才能解决这个问题?谢谢!

    回复
  17. 彼得

    请帮忙。我正在建一个机器人,它不起作用。请告诉我如何使它工作。谢谢。

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

    回复
  18. har

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

    回复
      • har

        是的,我检查了很多次,但还是一样的。除了大麻的价值,还能得到一些额外的东西吗?

      • har

        0253
        048
        050.
        013
        0254
        050.
        057.
        010
        049.
        057.
        010
        050.
        013
        0254
        050.
        050.
        我从串行监视器复制了这一点,将POT保持在最大位置,执行254的值是POT值,但我不理解其他值是什么。

发表评论

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

推荐

2019年最佳入门级示波器为初学者和爱好者

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

推荐

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

初学者的8个最佳Arduino Starter Kits

推荐

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

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