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