最近在学习STM32开发板,在使用HC-05蓝牙模块时遇到了很多问题,没有驱动,串口通讯异常等等,在此期间借鉴了大量CSDN博主的文章,作为回报,我将最终可以正常运行的程序,配置方法以及可能出现的问题分享给大家。大家有问题也可以留言,尽量回复!
本文分为三个模块:
- Arduino与HC-05连接(与手机进行蓝牙通讯)
- STM32与HC-05连接(与手机进行蓝牙通讯)
- STM32与Arduino透过HC-05通讯
已更新
目录
*为了能够阅读之后的模块,需要你先阅读下面文字:
研究HC-05可以不用太在意HC-05具体硬件体系和软件构成,但需要至少知道以下几点:
- HC-05有两个工作模式,正常模式(用于蓝牙通讯)和AT模式(用于配置蓝牙模块参数),二者之间不能通过软件方法切换(不是不能实现而是实现需要通过断电上电实现),正常上电会进入正常模式,但若在上电前保持PIO11为高则会进入AT模式(一般HC-05上会有一个按钮,按住按钮上电相当于上电前保持PIO11为高,能进入AT模式);
- AT模式相当于HC-05模块成为一个终端,可以与开发板进行串口通信,所有AT指令从开发板发向HC-05,HC-05反馈操作结果给开发板,AT指令可以设置蓝牙模块名称,配对密码,通讯频率等;
- 正常模式HC-05相当于一根串口通信线缆,将与之配对的设备和开发板的通信串口相连接。
1.Arduino与HC-05连接(与手机进行蓝牙通讯)
此模块目的是将Arduino作为一个收发中继,将HC-05发来的信息原封不动的发给电脑,并将电脑发来的信息原封不动的发给Arduino,主要有两个步骤:
第一步:配置Arduino模块
将以下程序烧录进Arduino,解释可以先不看;
#include <SoftwareSerial.h>
// 设置Arduino软件串口,10-RX,11-TX
// Pin10为RX,接HC05的TXD
// Pin11为TX,接HC05的RXD
SoftwareSerial BT(10, 11);
char val;
void setup() {
Serial.begin(38400);
//初始化Arduino串口,波特率自定,这里选38400
Serial.println("BT is ready!");
//测试与PC之间串口是否正常,正常则显示上述文字,异常则显示乱码
BT.begin(38400);
// HC-05的AT模式默认通信波特率为38400
pinMode(13,OUTPUT);
pinMode(8,INPUT);
//用来使能HC-05并读取HC-05状态,这里没用到
}
void loop() {
if (Serial.available()) {
val = Serial.read();
BT.print(val);
//将PC发来的数据存在val内,并发送给HC-05模块
}
if (BT.available()) {
val = BT.read();
Serial.print(val);
//将HC-05模块发来的数据存在val内,并发送给PC
}
}
连接HC-05和Arduino开发板:
HC-05 | Arduino |
TXD | Pin10 |
RXD | Pin11 |
VCC | VCC |
GND | GND |
可选(这里没有用到) | |
STATE | Pin8 |
EN-M | Pin13 |
接完线,烧好程序,将Arduino断电,按住HC-05模块上的按钮或者将PIO11接在VCC上,将Arduino与PC连接,发现HC-05模块指示灯2秒周期慢闪,即进入AT模式。
打开PC机上的串口助手,设置波特率为38400,结束符选择Both NL & CR,若显示“BT is ready”则证明串口通信可用,若无显示则按下Arduino上的Reset键,否则请检查线路和程序。
串口通信成功后,通过串口助手发送“AT”,如果一切正常将收到“OK”。若无反馈,请检查HC-05指示灯情况,并重新连接,若仍然无反馈,则可能因为串口助手不支持自动结束符,需要输入“AT\r\n”或在结尾按下回车,并在接下来所有AT指令后都加上“\r\n”或按下回车。若反馈为“ERROR:(0)”,那就再发一次,并检查输入的是否是"AT",其前后是否有包括回车符在内的其他符号。
常用的AT指令有
- AT+NAME(咨询修改蓝牙名称),若发送“AT+NAME”,则会反馈蓝牙名称(部分品牌不会反馈