草庐IT

HC-05蓝牙模块学习(两个蓝牙模块连接互发信息)

El-Psy-Congoo 2025-04-16 原文

目录

1、进入AT模式和连接前注意事项

2、实现两个蓝牙完美配对

3、HC-05_1初始化配置

4、HC-05_2初始化配置

5、HC-05_1与HC-05_2绑定

6、设置模块通信波特率&通信验证

1、进入AT模式和连接前注意事项

USB转TTL和蓝牙模块连接好后(VCC-VCC GND-GND RXD-TXD TXD-RXD ),插上电脑

进入AT模式的两种方法。

方法一:先按住按键不放,再给模块上电。此时LED 2S闪一次,进入AT模式。波特率固定为38400。

方法二:模块直接上电,此时LED灯快闪(1s两次)。再按下按键,模块也会进入AT指令,此时LED还是快闪。这个时候的波特率和自己设置的一样,默认为9600。1位停止位,无奇偶校验。

进入AT指令模式后

串口调试助手中一定要勾上发送新行,才会在发送字符后面添加\r\n 。不然每次就自己添加

1.测试通信是否有问题发送: AT返回:OK

2.设置波特率发送:AT+UART=115200,0,0 返回:OK

3. 查询波特率:发送:AT+UART?返回:+UART=115200,0,0

OK‘’

4.设置蓝牙的名称和密码发送:AT+NAME=xxx(默认 名称HC-05)

返回:OK

5. 设置密码发送:AT+PSWD=XXXXXX返回:OK

        AT+PSWD?查询密码

2、实现两个蓝牙完美配对

前提:

1、准备两个可以进行主从连接的HC-05模块。HC-05_1 HC-05_2 (为区分两个模块其下标分为          1,2)。

2、两个TTL转USB模块,并与两个蓝牙模块完成接线。

        VCC---VCC

        RX-----TX

        TX-----RX

        GND---GND

 3、两个不同的串口串口调试助手,分别用于HC-05_1和HC-05_2的初始化配置。

返回 OK,则成功配置

3、HC-05_1初始化配置

1、先按住按键不放,再给模块上电。此时LED 2S闪一次,进入AT模式,波特率固定为38400。(注意在串口调试助手上应设置波特率为38400发送AT指令才有效,返回ok表示可以正常使用)

AT

返回 OK,则成功配置

2、串口调试助手将蓝牙HC-05_1恢复默认设置:

AT+ORGL

返回 OK,则成功配置

3、配置蓝牙1的配对码,注意因为在步骤2中已经恢复默认设置,所以以下操作串口的波特率应调为9600(而且每次发送AT指令都要长按按钮来发送,否则会发送失败),或者重复步骤1,断电重新长按按钮上电,进入AT模式(此时发送AT指令则不需要再长按模块按钮),我此处是选择后者断电长按按钮重新进入AT模式:

AT+PSWD="0000"

返回 OK,则成功配置

4、串口调试助手,将蓝牙HC-05_1配置为主模式:

AT+ROLE=1

返回 OK,则成功配置

4、HC-05_2初始化配置

1、先按住按键不放,再给模块上电。进入AT模式,波特率固定为38400.

AT

返回 OK,则成功配置

2、串口调试助手将蓝牙HC-05_2恢复默认设置:

AT+ORGL

返回 OK,则成功配置

3、配置蓝牙2的配对码,注意因为在步骤2中已经恢复默认设置,所以以下操作串口的波特率应调为9600(而且每次发送AT指令都要长按按钮来发送,否则会发送失败),或者重复步骤1,断电重新长按按钮上电,进入AT模式(此时发送AT指令则不需要再长按模块按钮),我此处是选择后者断电长按按钮重新进入AT模式:

AT+PSWD="0000"

返回 OK,则成功配置

4、串口调试助手,将蓝牙HC-05_2配置为从模式:

AT+ROLE=0

返回 OK,则成功配置

5、查询蓝牙HC-05_2的地址:

AT+ADDR?

返回得到蓝牙HC-05_2的地址:98D3:21:F7BADA 此处得到的地址后面会用到。

5、HC-05_1与HC-05_2绑定

1、蓝牙HC-05_1绑定HC-05_2地址,【注意把地址的冒号换成逗号】

AT+BIND=98D3,21,F7BADA

返回 OK,则成功配置

2、确定绑定地址,在HC-05_1所在串口助手输入:

AT+BIND?

返回得到:

+BIND:98D3:21:F7BADA

OK

地址一致,确认绑定成功!!!

6、设置模块通信波特率&通信验证

1、设置HC-05_1与HC-05_2蓝牙串口波特率为115200:

AT+UART=115200,0,0

返回 OK,则成功配置

2、确认蓝牙1,2的串口波特率,输入:

AT+UART?

返回得到波特率;

1、验证通讯,蓝牙1向蓝牙2发送信息(HC-05_1 to HC-05_2)。【注意:由于先前波特率已经设置为115200,故两个串口调试器波特率都要重新改为:115200】

在蓝牙2所在串口会接收到1中传送得到的信息。

2、蓝牙2向蓝牙1(HC-05_2 to HC-05_1)发送信息。

3、验证成功,over... 

有关HC-05蓝牙模块学习(两个蓝牙模块连接互发信息)的更多相关文章

  1. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  2. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  3. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  4. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  5. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  6. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  7. ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类? - 2

    我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

  8. ruby - 获取模块中定义的所有常量的值 - 2

    我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c

  9. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

  10. ruby - 这两个 Ruby 类初始化定义有什么区别? - 2

    我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是

随机推荐