Arduino蓝牙模块实验(HC-42)

一、目的:

用手机连接蓝牙模块,并传输数据给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);

 

版权声明:本文为CSDN博主「Z·y001」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_63503875/article/details/121891486

生成海报
点赞 0

Z·y001

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

STM32C8T6+LORA(SX1278)

LoRa通信系统 从毕设开始搭建了一个简单的LORA通信系统(两块STM32C8T6最小单片机系统,两块正点原子的loRa,一块温湿度传感器)构建了一个简单的loRa通信系统作为入门。之

STM32 QSPI双闪存操作

STM32 QSPI双闪存操作 使用CubeMX或者CubeIDE生成框架 使用野火的开发板,MCU型号为stm32h750/743,他们家核心板上使用了QSPI挂了2片FLASH,型号为W25Q2