在本Arduino教程中,我们将学习如何配置和配对两个HC-05蓝牙模块作为主和从设备。你可以观看下面的视频或阅读下面的书面教程。
在我之前的两个教程中我们已经学到了如何将HC-05蓝牙模块连接到Arduino并在一个地方进行沟通Android智能手机和Arduino。在这些教程中,我们使用HC-05蓝牙模块具有其默认配置,作为从设备。
配置HC-05蓝牙模块- AT命令
对于本教程,我们需要配置两个模块。为此,我们需要在命令模式下切换到以下以及我们将如何做到这一点。首先,我们需要将蓝牙模块连接到Arduino,因为在上一个教程中解释的电路示意图。我们需要做的是将蓝牙模块的“en”引脚连接到5伏,并在Arduino板上切换TX和RX引脚。
所以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。
现在我们需要写下这个地址,因为我们在配置主设备时需要它。实际上,这就是我们在配置从设备时所需的只是获取其地址,尽管我们可以更改许多不同的参数,如它的名称,波特率,配对密码等,但我们不会为此示例执行此操作。
主配置
确定现在让我们继续前进并将另一个蓝牙模块作为主设备配置。首先,我们将检查波特率以确保它与从设备相同的38400。然后通过键入“AT +角色= 1”,我们将将蓝牙模块设置为主设备。在使用“AT + CMODE = 0”之后,我们将将连接模式设置为“固定地址”,并使用“AT + BIND =”命令我们将设置我们以前写下的从设备的地址。
请注意,在编写地址时,我们需要使用逗号而不是冒号。另请注意,如果我们在“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。
您可以从以下任何网站获取此Arduino教程所需的组件:
- HC-05蓝牙模块...............。亚马逊/伯格多德/阿里巴巴全球速卖通
- Arduino Board .................................亚马逊/伯格多德/阿里巴巴全球速卖通
- 伺服电机.................................. ......亚马逊/伯格多德/阿里巴巴全球速卖通
- 电位仪............... .. ......... ...... ......亚马逊/伯格多德/阿里巴巴全球速卖通
- 3x 220欧姆电阻器.....................亚马逊/伯格多德/阿里巴巴全球速卖通
- 面包板和跳线..........亚马逊/伯格多德/阿里巴巴全球速卖通
必威外围提钱披露:这些是联盟链接。作为亚马逊助理,我从合格购买中获得。
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'); } }
以上就是所有的内容,如果你有任何问题,请在下面的评论部分寻求帮助。
您好,我想知道您是否可以帮助我,我正在尝试做一些非常简单的HC-05,但它变得非常困难。我想通过Uno草图向HC-05发送AT指令。我有HC-05引脚#32 & #34连接到Uno,所以我可以通过Uno控制HC-05电源和状态。现在我使用Uno将HC-05的状态更改为AT命令模式,然后通过串行发送命令。打印到HC-05。但是,HC-05没有反应。我不确定是否没有回应,或如果我不能阅读回应。我通过将响应传递给串行监视器来读取响应(调试)。你能帮我看一下我的代码吗?谢谢。
抱歉,但不能说任何关于这,因为我没有尝试做这样的沟通,我没有这样的代码。很抱歉,当有人问我时,我不能看或做定制代码,因为它需要相当长的时间,有很多其他工作要做。
好的,任何信息如何在HC-05上设置睡眠模式,我认为有嗅探命令,但我没有找到任何文档。
谢谢
尝试从其数据表中找到信息。
嘿,我一直在想做同样的事情,但我仍然不能这样做。你有什么成功吗?
TNX DEJAN,伟大的教程!对我来说,它没有分压器和9600的波特拉特。
谢谢,很高兴听到这个!
无论你做什么,不要取出分压器。当我这样做时,它会抽烟。它可能工作了一秒钟,但最终它无法锻炼。
对,那是正确的。HC-05模块的RX引脚适用于3.3V,需要一个分压器。
你好,
这次写作的伟大工作!!极好的!
我想知道,如果主HC-05已经与其他HC-05配对,则可以将蓝牙电话连接到主机?
嗨,谢谢!
好吧,我没有试过,但我不认为它会工作,因为主人已经很忙了。
如果我用一个HC-05主控制器控制一个HC-6从控制器呢?
它应该以同样的方式工作。
你能告诉我这个项目的蓝牙范围吗?我的意思是我能在多远的地方用这个锅来控制伺服?
大约10米(30英尺)。
嗨,首先伟大的教程:)。我有一个问题。是否可以连接例如1个垫头和5个奴隶?如果是的话怎么做?我应该在+绑定中写几个地址吗?
嗨,谢谢。嗯,您无法同时将一个主机连接到五个奴隶。
你好
我刚刚开始搜索前一天使用蓝牙模块的方式。但是当我看着你的教程视频时,我几乎可以学到一下,我想知道,只是在几分钟内。
这是非常棒的,很容易学习教程老板。
我有一些疑问。
如果我将1 HC-05配置为主和其他HC-05作为9600波特率,我可以通过使用2个单独的MCU来使用两个单独的数字数据通信来使用简单的数字数据通信吗?
这些都将全双工模式全双工模式吗?意味着主机发送任何数据字符串到从属,所以可以从站发送任何数据回掌握?
谢谢提前帮助我
谢谢。是的,我认为他们可以做到这一点,从而可以将数据发送到主站。
谢谢先生
请指导如果我将1 HC05配置为主和其他从AT命令并设置9600 Buadrate,然后留下钥匙SW开放。然后连接到正常的MCU,如PIC或AVR或8951,这些都会互相通信吗?
如何控制两个伺服两个方向?
有两个HC-05&Arduino。
因为这只是一个伺服和一个方向。
我不知道如何控制两个伺服。
它困扰我> _ <
谢谢你的说明。完美地工作谢谢
很好,很高兴听到这个!
您好Dejan,卓越的教程,我用HC 05作为主机和从属作为HC 06,而没有电压分隔率为9600。现在我想用两个伺服和两个锅来做这件事。这是可能的?。你能帮我用代码吗?
当然这是可能的,你只需要编写代码。
HolaPodríasAyudarAwerlar EseCódigopara poder Controlar DoS O MAS Servos?Muchas gracias excelente教程!!!
嗨,我一直在绑定到奴隶到主站时出错7,找不到如何修复它。
你能帮助我吗?
很感谢;
如何连接sim800c到hc-05模块?
谢谢。对不起,但我没有SIM800C的任何经验。
谢谢!
我有一个问题。
当我使用两个HC05将数据从一个Arduino传递到另一个Arduino时,我得到了两秒钟的延迟。当我改变锅,两秒钟后(大约),伺服电机旋转。
我该如何减少这种延迟?
那很奇怪。您是否在谈论本教程中的相同示例代码,或者,如视频中所示,这应该正常工作。
好吧,我刚刚修改了接收者代码。我声明了“陈述”作为字符串,因为它是从Serial.read()的值,因此它将在字符串中。然后,我使用toint()函数将其转换为整数值。
谢天谢地,在大学里,我必须做一个微微网,这个榜样帮助我。
您好,我的名字是迈克,我是Arduino世界的新手。您的教程非常有用!但是我可以让我的HC 05和HC 05对(从快速闪烁到每秒左右闪烁),但我可以看到它们之间没有串行通信。我想知道你对像我这样的傻瓜写下教程是不是很麻烦,因为我不能因为我做错了!,即使是如何让他们说“嗨!”的东西。对彼此。感谢您与您的教程一起帮助像我这样的人,这很欣赏!
嗨,谢谢。我有一些其他基本教程,教学如何使用各种引脚,串行通信,电机等。开始,您可以通过这些其他教程,您应该能够学习得足够了。
嗨! !我是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.
嗨。事实上,你可以发送甚至“更长的”消息,但当接收时,你将不得不接受它的一个字节一次。例如,如果您发送“Test”,您将接收到,' T ', ' e ', ' s ', ' T ',因此您可以将这些值添加到单个字符串或其他东西中,并对它们做任何您想做的事情。
您还可以查看我的新教程HC-12无线模块,它通过串口以相同的方式发送和接收数据。在本教程中,我将解释上面的例子。
if(state =='1'){
digitalWrite (ledPin、高);/ /领导
国家= 0;
}
否则if(state =='0'){
DigitalWrite(LEDPIN,低);/ /领导
国家= 0;
“国家= 0”的目的是什么??
谢谢
好吧,每次迭代后它将将“状态”变量重置为0。否则如果它得到值1,它也将保持在下一次迭代,但我们希望是0。
你好!我试过了这一点,但它不起作用。在按下按钮时,arduinos的串行监视器仅在按钮时出现问号和符号。我怎样才能解决这个问题?谢谢!
嘿,试着在你的串行监视器上使用不同的波特率。
请帮忙。我正在建一个机器人,它不起作用。请告诉我如何使它工作。谢谢。
只是在开玩笑。一如既往的帮助很棒。我从你学到了更多的学院教科书。
呵呵那是一个很好的。谢谢!
嗨,我尝试了同样的例子,在接收器结束时,我收到了除了锅值之外的一些额外数据。什么可能是问题?能否请你帮忙?谢谢
嘿,检查两个模块和串行监视器的波特率是否相同,这可能是问题。
是的,我检查了很多次,但还是一样的。除了大麻的价值,还能得到一些额外的东西吗?
0253
048
050.
013
0254
050.
057.
010
049.
057.
010
050.
013
0254
050.
050.
我从串行监视器复制了这一点,将POT保持在最大位置,执行254的值是POT值,但我不理解其他值是什么。