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

本文详细介绍了如何将两个HC-05蓝牙模块进行初始化配置,包括进入AT模式、设置波特率、命名与密码、主从模式切换以及两者之间的绑定。通过串口调试助手进行通信测试,确保模块间能成功建立连接并进行数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

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=Master

(默认 名称HC-05)

返回:OK

5. 设置密码发送:

AT+PSWD="0000"

返回: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... 

步骤: 1. 两个蓝牙模块必须一个作为主机,另一个作为从机才能建立连接(上电后,从机一直处于接受状态,等待被连接。而主机则主动发出信号,寻找目标从机,前提是该目标从机的mac地址事先被写入到主机的flash芯片中储存) 2. 蓝牙模块上电前一直按住key按键不放,上电后松开,此时LED灯处于慢闪状态(每秒闪1次),提示已经进入AT指令响应状态,可以进行接收AT指令控制 3. PC端打开安可信串口助手(带AT指令),打开相应的串口,发送AT+ROLE?\n查询该模块的主从角色,如果为0,则为从机,如果为1则为主机。本例中,此模块(图中左边的HC-05模块)设为主机,则发送AT+ROLE=1\n,设为主机,成功返回OK 4. 发送AT+ADDR?\n查询此模块的mac地址,本例中为98d3:33:80ebdf,记下来稍后为从机的地址绑定用。同样的方法将另一个模块(图中右边的HC-05模块)设置为从机(AT+ROLE=0\n),并且查询到mac地址为98d3:36:aac2 5. 向主机串口中发送AT+BIND=98d3,36,aac2\n绑定从机的mac地址,成功则返回OK。发送AT+CMODE=0\n将主机设为指定蓝牙地址连接模式(即只允许主机向绑定好mac地址的蓝牙从机设备发起连接) 6. 同样地,向从机串口发送AT+BIND=983d,33,80ebdf\n绑定主机的mac地址,成功则返回OK。发送AT+CMODE=0\n将从机也设为指定蓝牙地址连接模式(即只允许从机接受绑定好mac地址的蓝牙主机设备发起的连接) 7. 至此,主从机均设置完毕。主从两模块松开key键重新上电,LED都快闪(每秒闪2次),表明均处于等待配对状态,随后大约几秒钟后,LED闪烁频率发生变化(不确定),表明已经侦测到目标设备,正在建立连接。随后大约一秒钟,很快 LED变成慢双闪状态(每2秒闪一次,每次连闪2下),提示已经配对成功,可以通过蓝牙协议传输数据了 8. 此时,在串口助手中发送一串字符,如果另一个蓝牙模块的串口助手里收到了同样的字符,且回送的字符,对方亦能收到,则通信成功。
### 回答1: 好的,以下是一个简单的蓝牙接收和发送程序的示例,使用Python编写: 接收程序: ```python import bluetooth server_sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM) server_sock.bind(("", bluetooth.PORT_ANY)) server_sock.listen(1) port = server_sock.getsockname()[1] uuid = "00001101-0000-1000-8000-00805F9B34FB" bluetooth.advertise_service(server_sock, "SampleServer", service_id=uuid, service_classes=[uuid, bluetooth.SERIAL_PORT_CLASS], profiles=[bluetooth.SERIAL_PORT_PROFILE]) print("Waiting for connection on RFCOMM channel %d" % port) client_sock, client_info = server_sock.accept() print("Accepted connection from ", client_info) try: while True: data = client_sock.recv(1024) if not data: break print("Received: ", data) except OSError: pass print("Disconnected.") client_sock.close() server_sock.close() print("All done.") ``` 发送程序: ```python import bluetooth server_mac = '00:1A:7D:DA:71:13' port = 1 sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM) sock.connect((server_mac, port)) try: while True: message = input() if not message: break sock.send(message) except OSError: pass print("Disconnected.") sock.close() print("All done.") ``` 在这里,接收程序在RFCOMM通道上监听传入连接,并在成功连接后打印连接信息。它继续接收数据,直到没有更多数据可用为止,然后关闭连接。 发送程序将连接到指定的蓝牙设备和端口,并等待用户输入消息。它将消息发送到连接的设备,直到用户输入一个空消息为止,然后关闭连接。 请注意,这只是一个简单的示例程序,实际应用中可能需要更复杂的逻辑和错误处理。 ### 回答2: 编写一个蓝牙接发收程序可以使用不同的编程语言来实现,比如Java、Python等。以下是一个使用Java语言编写的简单蓝牙接发收程序的示例。 首先,你需要在代码中导入Java蓝牙相关的库文件,比如javax.bluetooth和java.io。接着,你需要实例化一个BluetoothDeviceDiscovery类,该类用于发现附近的蓝牙设备。 ```java import javax.bluetooth.*; import java.io.*; public class BluetoothDeviceDiscovery { public static void main(String[] args) throws IOException, InterruptedException { final Object inquiryCompletedEvent = new Object(); DiscoveryListener listener = new DiscoveryListener() { public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) { System.out.println("设备发现:" + btDevice.getBluetoothAddress()); try { System.out.println("设备名称:" + btDevice.getFriendlyName(true)); } catch (IOException e) { e.printStackTrace(); } } public void inquiryCompleted(int discType) { System.out.println("扫描完成!"); synchronized (inquiryCompletedEvent) { inquiryCompletedEvent.notifyAll(); } } public void servicesDiscovered(int transID, ServiceRecord[] servRecord) { } public void serviceSearchCompleted(int transID, int respCode) { } }; synchronized (inquiryCompletedEvent) { boolean started = LocalDevice.getLocalDevice().getDiscoveryAgent().startInquiry(DiscoveryAgent.GIAC, listener); if (started) { System.out.println("蓝牙扫描中..."); inquiryCompletedEvent.wait(); } } } } ``` 在上述代码中,我们创建了一个BluetoothDeviceDiscovery类,并实现了一个DiscoveryListener接口来处理蓝牙设备的发现事件。在main方法中,我们使用本地蓝牙设备的DiscoveryAgent发起扫描,并在设备发现和扫描完成时打印相关信息。 此外,你还需要根据具体需求编写发送和接收数据的逻辑。对于发送数据,你可以使用BluetoothSerialPort类或者SPP(Serial Port Profile)来发送数据。对于接收数据,你可以通过监听蓝牙串口来读取数据。 以上是一个简单的蓝牙接发收程序示例,你可以根据自己的具体需求进行修改和完善。请注意,不同的编程语言和平台可能有不同的实现方式和API,所以请根据你使用的编程语言和开发环境进行相应的调整。 ### 回答3: 编写一个蓝牙接发收程序需要用到蓝牙通信的相关知识和编程技巧。下面是一个简单的示例: 首先,需要使用一种编程语言(如Java、Python等)来编写程序。在程序中,我们需要使用合适的蓝牙库或API来实现蓝牙通信功能。 接收数据: 1. 初始化蓝牙适配器,确保蓝牙功能可用。 2. 扫描附近的蓝牙设备,并选择目标设备进行连接。 3. 获取与目标设备建立的蓝牙socket。 4. 从socket中读取数据流,并解析收到的数据。 5. 处理接收到的数据,比如显示在界面上或进行其他操作。 发送数据: 1. 初始化蓝牙适配器,确保蓝牙功能可用。 2. 扫描附近的蓝牙设备,并选择目标设备进行连接。 3. 获取与目标设备建立的蓝牙socket。 4. 构造要发送的数据。 5. 将数据写入socket中发送给目标设备。 需要注意的是,在编写蓝牙接收发程序时,还需要处理蓝牙连接的建立和断开、异常情况的处理等。此外,还需要根据具体需求调整程序逻辑和功能。 总之,编写一个蓝牙接发收程序需要使用相关的蓝牙库或API以及编程语言的知识,理解蓝牙通信的原理和协议,并按照需求设计程序的功能和流程。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值