在当今世界,蓝牙已变得非常流行,几乎所有设备(如手机,笔记本电脑和汽车信息娱乐系统)都使用蓝牙进行无线通信。蓝牙不仅用于传输数据,而且可以无线控制其他蓝牙设备,例如使用蓝牙耳机,您可以从手机无线收听歌曲,也可以使用汽车音频系统从手机播放歌曲。
蓝牙是一种工作于2.4GHz频率的无线技术。正常的蓝牙信号在10米半径范围内。蓝牙是嵌入式项目中最常用的无线技术,条件是通信范围有限。蓝牙具有低功耗和低成本运行的优点。它通常用于通过使用蓝牙应用程序将微控制器与智能电话接口。
我们已经看到了蓝牙模块与Arduino,8051,PIC等其他微控制器的接口。现在,在本教程中,我们将HC-05蓝牙模块与STM32F103C8进行接口连接,并使用Android移动设备打开/关闭LED。
所需材料
- STM32F103C8
- 蓝牙模块(HC-05)
- LED
- Android手机
- 面包板
- 连接线
软件:
- 蓝牙终端(Android应用程序)
蓝牙模块(HC-05)
它是嵌入式项目中最常使用的蓝牙模块。它是一个串行蓝牙模块,它使用范围小于100m的串行通信并在5V(最低3.3V)下工作。它可以用于无线连接两个微控制器,也可以用于手机和笔记本电脑。由于有许多可用的android应用程序,因此对于制作无线蓝牙控制的项目非常有用。
它使用USART通信,并且可以与具有USART通信协议的微控制器接口。
它具有集成天线。它具有可在AT命令模式下更改的主/从配置,当只有一个设备应将数据(主机到从设备)发送数据(例如从PC(主机)到从机(任何MCU))发送时,该配置很有用。主机可以连接到其他设备,而从机不能连接到除主机以外的其他连接。
操作方式
它有两种模式:AT命令模式和数据模式。
蓝牙开机时进入数据模式默认。此模式可用于数据传输。要在加电期间进入AT Command模式,我们需要按模块中存在的按钮来更改模块的默认设置,例如主/从配置。
蓝牙模块的针脚
- EN引脚(ENABLE)-此引脚用于设置数据模式或AT命令模式。默认情况下,它处于数据模式。在加电期间按下按钮时,它将进入AT指令模式。
- + 5V引脚-用于为模块供电
- GND引脚-用于模块的接地
- TX引脚-此引脚连接到MCU的RX引脚
- RX引脚-此引脚连接到MCU的TX引脚
- STATE-此引脚指示模块的状态,有关指示,请参见下文
LED指示
- 它具有一个LED(RED)指示灯,可提供蓝牙模块的状态。
- 当蓝牙模块未连接到任何设备时,信号变低,红色指示灯连续闪烁,表示模块未配对。
- 当蓝牙模块连接到任何设备时,信号变为高,红色指示灯闪烁一段延时,表示模块已配对。
查看我们的其他项目,以了解有关带有其他微控制器的蓝牙模块HC-05的更多信息:
- 使用Arduino的蓝牙控制玩具车
- 使用8051的蓝牙控制的家庭自动化系统
- 使用Raspberry Pi的声控灯
- 使用Arduino和处理功能的智能手机控制FM收音机
- 使用G传感器和Arduino的手机控制机器人车
- 将蓝牙模块HC-06与PIC微控制器接口
STM32 USART端口
STM32F103C8(BLUE PILL)USART串行通信端口如下图所示。它们是蓝色的(PA9-TX1,PA10-RX1,PA2-TX2,PA3-RX2,PB10-TX3,PB11-RX3)。它具有三个这样的通信渠道。
电路图和连接
蓝牙模块与STM32接口的电路连接如下
STM32F103C8与蓝牙模块(HC-05)之间的连接
- STM32F103C8的TX引脚(PA9)连接到蓝牙模块的RX引脚。
- STM32F103C8的RX引脚(PA10)连接到蓝牙模块的TX引脚。
- 蓝牙模块的VCC(+ 5V)引脚连接到STM32F103C8的5V引脚。
- 蓝牙模块的GND引脚连接到STM32F103C8的GND引脚。
其他连接
- STM32(蓝色药丸)的(PA0)引脚通过串联电阻连接到LED的正极。这里使用的LED是混合色。
- 带引号的另一个引脚连接到STM32的GND。
编程STM32F103C8
蓝牙与STM32的连接与arduino相同,而STM32中的编程与Arduino IDE相同。有关使用Arduino IDE用USB编程STM32的信息,请参阅本教程。
如前所述,在该项目中,我们将(HC-05)蓝牙模块与STM32F103C8连接,并使用带有蓝牙终端android应用程序的Android智能手机来打开和关闭LED。
注意: 在将代码上传到STM32F103C8时,必须删除RX和TX引脚。
本教程的结尾给出了该项目的完整代码,并带有一个演示视频。
该项目的编码非常简单。可以使用相同的Arduino代码,但只应更改引脚。由于STM32F103C8中有三组USART引脚,因此我们必须指定用于连接蓝牙模块的正确引脚。
1.首先,我们需要使用以下 int 数据类型命名其各自的引脚编号的引脚
const int引脚= PA0;
2.接下来,我们需要一个变量来存储来自android mobile的串行数据。数据可以是char或整数,如下所示
char inputdata = 0;
3.接下来在 void setup()中, 我们必须通过提供9600的波特率来启动STM32 Blue Pill和Bluetooth模块之间的串行通信。
Serial1.begin(9600);
我们之所以使用Serial1是因为将HC-05连接到STM32的TX1和RX1。
我们也可以使用Serial2或Serial3,但必须连接相应的引脚。
4.简介消息作为串行数据发送到serial1,即发送到蓝牙模块HC05。该模块进一步将数据发送到android mobile的Bluetooth Terminal应用程序。所以我们用下面的语句
Serial1.print(“ CIRCUIT DIGEST \ n”); Serial1.print(“带有STM32 \ n的蓝牙”);
5.接下来,我们需要将 引脚模式(PA0)设置 为output,因为我们连接了该引脚。因此我们使用
pinMode(引脚输出,输出);
6.接下来在 void循环()中, 运行以下数据以读取串行数据并相应地打开/关闭LED
void loop() { 如果(Serial1.available()> 0) { inputdata = Serial1.read(); if(inputdata =='1') { digitalWrite(pinout,HIGH); Serial1.print(“ LED ON \ n”); } else if(inputdata =='0'){ digitalWrite(pinout,LOW); Serial1.print(“ LED OFF \ n”); } } }
这里我们使用 if 语句,因为这些代码仅在Serial1端口从蓝牙模块接收到任何使用该语句的数据时才执行 Serial1.available()> 0 。否则,如果无法进入,它将等待直到开始串行通信。现在,它将接收到的数据存储在变量 inputdata = Serial1.read()中。 然后,它检查从蓝牙终端应用程序发送的值。因此,如果值为1,则通过语句 digitalWrite(pinout,HIGH) 将LED点亮,并使引脚(PA0) 变为高电平 ;如果值为0,则将LED熄灭,并使(PA0)引脚 变为 LOW。
将蓝牙模块与Android手机连接的步骤
步骤1:-从Arduino IDE将代码上传到STM32中并为电路供电后,从移动设备打开蓝牙。记住在上载代码时移除RX和TX引脚
步骤2:-在可用设备中选择HC-05并输入密码1234
步骤3:-配对后,打开Bluetooth Terminal应用程序并选择连接设备并选择HC-05,如下所示
步骤4:- 与HC-05蓝牙模块连接后,在端子1或0中提供值以打开和关闭LED。您还将收到一条消息,指示LED点亮或熄灭。