嵌入式入门学习笔记——Arduino蓝牙模块(HC-42)实验

举报
yd_266832696 发表于 2025/05/31 21:19:13 2025/05/31
【摘要】 本文介绍了通过手机蓝牙控制Arduino LED灯的详细方法。使用HC-42蓝牙模块连接Arduino板,设置9600波特率进行通信。关键步骤包括:编写软串口代码、正确接线(蓝牙TXD接Arduino引脚2,RXD接引脚3)、手机蓝牙助手连接测试,以及最终通过发送字符'a'和'b'控制LED开关。文章还说明了进入蓝牙AT指令模式的注意事项,强调两个设备波特率必须一致、KEY引脚接GND,并包

一、目的:

用手机连接蓝牙模块,并传输数据给Arduino板,进而控制led灯的开关。

二、主要材料:

蓝牙模块(HC-42)、Arduino板、led灯、电脑、手机

蓝牙模块(HC-42)简介:

HC42 蓝牙串口通信模块是新一代的基于 Bluetooth Specification V5.0 BLE 蓝牙协议 的数传模块。无线工作频段为 2.4GHz ISM,调制方式是 GFSK。模块最大发射功率为 4dBm, 接收灵敏度-96dBm。

 参数:

该蓝牙的默认波特率为9600

 接口说明:

TXD:输出——接arduino的RX      RXD:输入——接arduino的TX     GND——接arduino的GND

VCC:正极——接arduino的3.3V    

STATE:是蓝牙连接状态指示,连接成功此引脚为高电平(蓝牙模块的LED常亮),没有连接则为低电平(蓝牙模块的LED灯闪烁)。有的底板标识为“LED”。

 KEY :为控制蓝牙模块工作状态的,接高电平进入AT状态,接受命令控制和各种设置,接低电平或者悬空则蓝牙进入自动工作状态。有的底板标注为“EN"。可不接,也可接arduino的GND


三、步骤

1、编写初步代码

#include <SoftwareSerial.h>
//实例化软串口,设置虚拟输入输出串口。
SoftwareSerial BT(2, 3); // 设置数字引脚2是arduino的RX端,3是TX端
                         //所以蓝牙的TX接2,RX接3
void setup()
{
  Serial.begin(9600);     //设置arduino的串口波特率与蓝牙模块的默认值相同为9600
  BT.begin(9600);         //设置虚拟输入输出串口波特率与蓝牙模块的默认值相同为9600
  Serial.println("HELLO") //如果连接成功,在电脑串口显示HELLO,在蓝牙串口显示hello
  BT.println("hello");
}

2、接线

蓝牙模块 Arduino
VCC

3.3V

GND         GND
RXD 3
TXD 2

3、上传代码,启动Arduino

4、手机连接蓝牙模块

在手机的应用商店下载个蓝牙助手,连接上蓝牙模块


 

连接成功后,蓝牙模块的LED灯常亮

此时,电脑上打开串口监视器(注意调节相应的波特率),发现“HELLO”


 再看手机屏幕,此时出现“hello”,证明连接成功

 5、手机、Arduino双向传输数据

代码:

void loop()
{
  //arduino有数据输入,就显示在电脑和手机上
  if(Serial.available()){    //判断串口缓冲区是否有数值
    char ch = Serial.read(); //将Arduino串口输入的字符赋给ch
    Serial.println(ch);      //在串口监视器打印出输入的字符ch
    BT.println(ch);          //蓝牙模块的串口(在手机屏幕上显示)打印出电脑输入的字符ch
  }
  //同理,蓝牙模块有数据输入,就显示在电脑上
  if(BT.available()){
    char ch1 = BT.read();  //读取蓝牙模块获得的数据
    Serial.println(ch1);
  }
}

 测试:

电脑端输入‘LOL’,手机通过蓝牙接收数据,在屏幕上显示‘LOL’

 手机输入‘love’,arduino的串口监视器显示‘love’,而手机没有设置显示就不显示

 四、实验

        手机控制LED开关

1、代码


#include <SoftwareSerial.h>
//实例化软串口,设置虚拟输入输出串口。
SoftwareSerial BT(2, 3); // 设置数字引脚2是arduino的RX端,3是TX端
                         //所以蓝牙的TX接2,RX接3
void setup()
{
  Serial.begin(9600);     //设置arduino的串口波特率与蓝牙模块的默认值相同为9600
  BT.begin(9600);         //设置虚拟输入输出串口波特率与蓝牙模块的默认值相同为9600
  Serial.println("HELLO"); //如果连接成功,在电脑串口显示HELLO,在蓝牙串口显示hello
  BT.println("hello");
  pinMode(8, OUTPUT);       //设置数字引脚8为LED灯的输出正极
}

void loop()
{
  //arduino有数据输入,就显示在电脑和手机上
  if(Serial.available()){    //判断串口缓冲区是否有数值
    char ch = Serial.read(); //将Arduino串口输入的字符赋给ch
    Serial.println(ch);      //在串口监视器打印出输入的字符ch
    BT.println(ch);          //蓝牙模块的串口(在手机屏幕上显示)打印出电脑输入的字符ch
  }
  
  //同理,蓝牙模块有数据输入,就显示在电脑上
  if(BT.available()){
    char ch1 = BT.read();  //读取蓝牙模块获得的数据
    Serial.println(ch1);
    if(ch1 =='a'){
    digitalWrite(8, HIGH);
    }
    if(ch1 =='b'){
    digitalWrite(8, LOW);
    }
  }
}

 手机输入‘a’,led开,输入‘b’,led关。

总结:关键点:1、设置模拟软串口SoftwareSerial  name(Pin ,Pin),软串口RX、TX的引脚,

2、蓝牙与Arduino的波特率要设置一样。

3、获取电脑端或手机端的字符,Serial.read / BT.read

五、进入蓝牙模块的AT指令模式

AT指令模式:AT 指令用来设置模块的参数,模块在未连线状态下可以进行 AT 指令操作,连线后进入串口透传模式。

现在网上关于进入蓝牙AT指令的文章都是HC-04、HC-05、HC-06等,偏偏就没有HC42的,

虽然他们进入的方法都大抵差不多,但是还是有那么一点不同。

网上的方法:

连接蓝牙模块,烧录代码进arduino板,拔掉蓝牙模块电源线,一边按住蓝牙模块上的小按钮一边接通电源线就进入了蓝牙模块的AT模式。

打开串口监视器,输入AT就会自动回复OK

关键所在:

1、两个波特率要相等

2、接线时KEY接GND

3、代码要求:一定要有读取串口代码,并输出的过程

如:

if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());

 如:

//arduino有数据输入,就显示在电脑和手机上
  if(Serial.available()){    //判断串口缓冲区是否有数值
    char ch = Serial.read(); //将Arduino串口输入的字符赋给ch
    Serial.println(ch);      //在串口监视器打印出输入的字符ch
    BT.print(ch);          //蓝牙模块的串口(在手机屏幕上显示)打印出电脑输入的字符ch
  }
  
  //同理,蓝牙模块有数据输入,就显示在电脑上
  if(BT.available()){
    char ch1 = BT.read();  //读取蓝牙模块获得的数据
    Serial.println(ch1);

 


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。