如何配置和配对两个 HC-05 蓝牙模块作为主从模块 | AT 命令
在本 Arduino 教程中,我们将学习如何配置和配对两个 HC-05 蓝牙模块作为主设备和从设备。您可以观看以下视频或阅读下面的书面教程。
在我之前的两个教程中,我们已经学习了如何将 HC-05 蓝牙模块连接到 Arduino 并在 Android 智能手机和 Arduino 之间进行通信。在那些教程中,我们使用默认配置的 HC-05 蓝牙模块作为从设备。
对于本教程,我们需要配置这两个模块。为了做到这一点,我们需要切换到 AT 命令模式,这是我们将如何做到的。首先,我们需要将蓝牙模块连接到 Arduino,如前面教程中解释的电路原理图。我们还需要做的是将蓝牙模块的“EN”引脚连接到 5 伏,并在 Arduino 板上切换 TX 和 RX 引脚。
所以Arduino的RX脚需要通过分压器连接到蓝牙模块的RX脚,Arduino的TX脚需要连接蓝牙模块的TX脚。现在,在“EN”引脚上按住小按钮的同时,我们需要为模块供电,这就是我们进入命令模式的方式。如果蓝牙模块指示灯每2秒闪烁一次,则表示我们已成功进入AT命令模式。
在此之后,我们需要将一个空草图上传到 Arduino,但不要忘记在上传时断开 RX 和 TX 线。然后我们需要运行串行监视器并选择“NL 和 CR”,以及“38400 波特率”,这是蓝牙模块的默认波特率。现在我们准备发送命令,其格式如下。
所有命令都以“AT”开头,然后是“+”号,然后是
例如,如果我们只输入“AT”,这是一个测试命令,我们应该会返回“OK”消息。那么如果我们输入“AT+UART?”我们应该返回显示默认波特率 38400 的消息。然后如果我们键入“AT+ROLE?”我们将返回一个消息“+ROLE=0”,这意味着蓝牙设备处于从属模式。如果我们输入“AT+ADDR?”我们将获取蓝牙模块的地址,它应该看起来像这样:98d3:34:905d3f.
现在我们需要记下这个地址,因为我们在配置主设备时需要它。实际上,这就是我们在配置从设备时所需要的,获取它的地址,虽然我们可以改变很多不同的参数,比如它的名称、波特率、配对密码等,但我们不会在这个例子中这样做。
好的,现在让我们继续将另一个蓝牙模块配置为主设备。首先,我们将检查波特率以确保它与从设备相同 38400。然后通过键入“AT+ROLE=1”我们将蓝牙模块设置为主设备。之后使用“AT+CMODE=0”我们将连接模式设置为“固定地址”并使用“AT+BIND=”命令设置我们之前记下的从设备地址。
注意这里写地址时我们需要使用逗号而不是冒号。另请注意,如果我们在“AT+CMODE”命令中输入“1”而不是“0”,我们可能会跳过上一步,这会使主设备连接到其传输范围内的任何设备,但这样的配置不太安全。在这里您可以找到完整的命令和参数列表:HC-05 AT 命令列表
尽管如此,这就是我们需要对蓝牙模块进行基本配置以作为主设备和从设备工作的全部内容,现在如果我们在正常数据模式下重新连接它们并重新为模块供电,主设备将在几秒钟内连接给奴隶。两个模块将开始每 2 秒闪烁一次,表示连接成功。
好的,现在我们已经准备好为本教程制作实际示例了。这是电路原理图。我们将在主机上使用电位器来控制从机上的伺服电机。反之亦然,我们将在从机上使用一个按钮来控制主机上的 LED。
您可以从以下任何网站获取本 Arduino 教程所需的组件:
说明: 所以首先我们需要定义程序所需的引脚和一些变量。在设置部分,在主机上,我们将 LED 引脚设置为输出并立即将其设置为低电平,并以 38400 波特率启动串行通信。类似的,在从机上,我们将按键引脚设置为输入,定义引脚连接的舵机,并以相同的波特率启动串行通信。
在循环部分,在这两个代码中,我们将使用 Serial.available() 函数检查串行端口中是否有可用数据可供读取,并使用 Serial.read() 函数读取数据并将其存储到“状态”变量。因此,当按键状态为高或按下按键时,如果主机收到从机发送的字符“1”,则 LED 将亮起。否则,如果字符为“0”,则 LED 将熄灭。
至于伺服电机控制,首先在主机上,我们读取电位器值并将其映射到伺服的合适范围,从 0 到 255。这个值被发送到从机,从机使用它来相应地旋转伺服电机。这就是我们所需要的,这里是示例的演示。
主密码:
从代码:
仅此而已,如果您有任何问题,请随时在下面的评论部分寻求帮助。概览
配置 HC-05 蓝牙模块 – AT 命令
从机配置
主配置
两个HC-05蓝牙模块之间的通信示例
Arduino 源代码
/*
* How to configure and pair two HC-05 Bluetooth Modules
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
* == MASTER CODE ==
*/
#define ledPin 9
int state = 0;
int potValue = 0;
void setup() {
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.begin(38400); // Default communication rate of the Bluetooth module
}
void loop() {
if(Serial.available() > 0){ // Checks whether data is comming from the serial port
state = Serial.read(); // Reads the data from the serial port
}
// Controlling the LED
if (state == '1') {
digitalWrite(ledPin, HIGH); // LED ON
state = 0;
}
else if (state == '0') {
digitalWrite(ledPin, LOW); // LED ON
state = 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);
}
Code language: Arduino (arduino)/*
* How to configure and pair two HC-05 Bluetooth Modules
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
* == SLAVE CODE ==
*/
#include <Servo.h>
#define button 8
Servo myServo;
int state = 20;
int buttonState = 0;
void setup() {
pinMode(button, INPUT);
myServo.attach(9);
Serial.begin(38400); // Default communication rate of the Bluetooth module
}
void loop() {
if(Serial.available() > 0){ // Checks whether data is comming from the serial port
state = Serial.read(); // Reads the data from the serial port
}
// Controlling the servo motor
myServo.write(state);
delay(10);
// Reading the button
buttonState = digitalRead(button);
if (buttonState == HIGH) {
Serial.write('1'); // Sends '1' to the master to turn on LED
}
else {
Serial.write('0');
}
}
Code language: Arduino (arduino)
制造工艺
- 回顾:蓝牙 LE 和 XLE 如何成为资产跟踪和监控的未来
- 蓝牙 + 超声波如何 =更好的 RTLS 准确性和更低的成本
- 如何检查和校准湿度传感器
- 如何制作 Arduino 蓝牙控制汽车
- 带 Arduino 和蓝牙的智能咖啡机
- 蓝牙控制的拾放机器人
- 如何使用 Vixen Lights 和 Arduino 配置 NeoPixels
- 如何使用 Arduino 和 ADXL345 加速度计跟踪方向
- 使用 HC-05 蓝牙、NRF24L01 和 HC-12 收发器模块的 Arduino 机器人汽车无线控制
- 旋转编码器的工作原理以及如何与 Arduino 一起使用
- 了解工具钢及其制造方式
- 如何区分带锯和圆锯?