RF/无线
虽然在过去十年中引入了许多无线技术,但蓝牙仍然是短距离无线通信中最受欢迎的技术。在嵌入式系统中,HC-05/06是最流行的蓝牙模块。
今天我们将学习如何将蓝牙模块 HC-05 与德州仪器 (TI) 的 MSP430 Launchpad 连接起来。在这个接口示例中,我们将使用蓝牙终端安卓应用程序从智能手机控制 MSP430 的板载 LED 。
所需材料
TI-MSP430 启动板
HC-05蓝牙模块
Play 商店的蓝牙终端应用程序
HC-05 蓝牙模块
HC-05是一款易于使用的蓝牙模块。它使用串行通信协议(USART) 在设备之间进行通信。该模块有两种操作模式——第一种是命令模式,第二种是操作模式。命令模式用于配置设备设置,如修改模块密码、波特率等。操作模式用于在设备之间发送或接收数据。
在本教程中,我们将使用默认设置(默认密码为 0000 或 1234,设备名称为 HC-05,默认波特率为 9600)。因此,我们只会在操作模式下工作。
工作电压范围为4V 至 6V(通常为 +5V),工作电流为30 mA。模块的范围是 100 米。HC-05 蓝牙模块共有 6 个引脚,其中 EN 和 State 引脚用于命令模式。HC-05蓝牙模块的管脚如下图所示:
电路原理图
将 HC-05 蓝牙模块与 TI-MSP340 板连接的电路图如下所示。
在这里,我们从 HC-05 完成了 4 个连接。HC-05 的 RxD 和 TxD 引脚分别连接到 MSP430 的 P1.1 和 P1.2 进行串行通信。HC-05 的 VCC 和 GND 连接到 MSP430 的 VCC 和 GND。
为蓝牙模块 HC-05 编程 MSP430 Launchpad
使用 MSP430对该蓝牙控制的 LED 进行编程很容易。MSP 将使用与 Arduino IDE 非常相似的 Energia IDE 进行编程,因此熟悉 Arduino 的人在理解这一点上不会遇到任何困难。
我们首先为我们正在使用的红色 LED 定义一个宏。这条线只是为了简单起见,这样我们就可以用 LED 代替 RED_LED
#define LED RED_LED
接下来是我们的setup()函数,Serial.begin()函数用于将串行通信的波特率设置为 9600,因为这是 HC-05 的默认波特率。我们还使用pinMode()函数将数字引脚初始化为输出(在本例中为 LED)。
无效设置(){ 序列.开始(9600); pinMode(LED,输出); }
在循环函数中,首先我们通过Serial.available()函数检查串行端口上的数据是否可用。接下来定义一个变量data_recieved来存储Serial.read ()函数的值。该函数用于接收蓝牙数据。
接下来在 if-else 语句中,我们正在检查从手机发送的数据。如果为 1,则使用digitalWrite(LED, HIGH) 开启 LED;并使用Serial.write()函数在应用程序上打印 LED 已打开的消息。如果是 2,则使用digitalWrite(LED, LOW); 关闭 LED;并使用Serial.write()函数在应用程序上打印 LED 熄灭的消息。
void loop() { if (Serial.available()) { char data_received; data_received = Serial.read(); if (data_received == '1') { digitalWrite(LED, HIGH); Serial.write("LED 开启"); } else if (data_received == '2') { digitalWrite(LED, LOW); Serial.write("LED 关闭"); } } }
使用 MSP430 蓝牙控制 LED 的工作
最后使用 Energia IDE 将代码上传到 MSP430,然后在您的智能手机上下载并安装蓝牙终端应用程序。该应用程序将如下所示:
现在打开智能手机中的蓝牙并通过从可用设备列表中选择 HC-06 来连接蓝牙模块。使用密码 0000 或 1234 进行连接。连接后,将打开一个窗口,标题为设备名称并在其下方写入已连接。此窗口将如下图所示:
在此窗口中,尝试通过蓝牙模块 HC-05 向 MSP430 发送 1 和 2。发送 1将打开 LED,并在您的手机上打印“ LED 已打开”的消息,如下图所示:
发送 2将关闭 LED,并在您的手机上打印“LED 已关闭”的消息,如下图所示。瞧!您只需使用蓝牙通过手机控制 LED。
这就是使用蓝牙无线控制 LED的方式。通过用继电器和任何家用电器替换 LED,它可以很容易地转换为 家庭自动化项目。
#define LED RED_LED
void setup() {
Serial.begin(9600);
pinMode(2,输出);
}
void loop() {
if (Serial.available())
{
char data_received;
data_received = Serial.read();
if (data_received == '1')
{
digitalWrite(LED, HIGH);
Serial.write("LED 亮\n");
}
if (data_received == '2')
{
digitalWrite(LED, LOW);
Serial.write("LED 关闭\n");
}
}
}
全部0条评论
快来发表一下你的评论吧 !