Arduino 连接JDY-08蓝牙模块
简介
从蓝牙4.0开始包含两个蓝牙芯片模块:传统/经典蓝牙模块(Classic Bluetooth,简称BT)和低功耗蓝牙(Bluetooth Low Energy,简称BLE) 。经典蓝牙是在之前的蓝牙1.0,1.2,2.0+EDR,2.1+EDR,3.0+EDR等基础上发展和完善起来的,而低功耗蓝牙是Nokia的Wibree标准上发展起来的,是完全不同两个标准。
经典蓝牙模块(BT)
泛指蓝牙4.0以下的模块,一般用于数据量比较大的传输,如:语音、音乐、较高数据量传输等。
低功耗蓝牙模块(BLE)
泛指蓝牙4.0或更高的模块,蓝牙低功耗技术是低成本、短距离、可互操作的鲁棒性无线技术,工作在免许可的2.4GHz ISM射频频段。
因为BLE技术采用非常快速的连接方式,因此平时可以处于“非连接”状态(节省能源),此时链路两端相互间只是知晓对方,只有在必要时才开启链路,然后在尽可能短的时间内关闭链路(每次最多传输20字节)。
HC-05、HC-06是蓝牙2.0的模块。
而JDY-08的蓝牙模块,支持蓝牙4.0协议。
![image-20200926153428404](https://gitee.com/xiaoshihd/MdPicture/raw/master/img/20200926153428.png)
JDY-08由于采用蓝牙4.0,所以在手机蓝牙搜索那里无法进行配对。需要通过相应的应用程序来连接,这样的话就无法像HC-05那样使用手机端的蓝牙串口APP来进行连接它。
![image-20200926151011338](https://gitee.com/xiaoshihd/MdPicture/raw/master/img/20200926151011.png)
不过可以通过Serial Bluetooth Terminal
这样一款App进行连接。下载链接。具体操作后面会讲到。
关于该模块的文档可以参考。
一、基本连接
使用模块首先就需要进行简单基本的配置,比如改名字,配置连接的密码;基本的配置就是AT指令,这个就跟HC-05模块类似了。
常用的AT指令文档里有,摘出部分如下:
![image-20200926154342236](https://gitee.com/xiaoshihd/MdPicture/raw/master/img/20200926154342.png)
在硬件的连接上可以使用USB转TTL工具进行连接:
![image-20200926154608195](https://gitee.com/xiaoshihd/MdPicture/raw/master/img/20200926154608.png)
一般单片机开发板也自带该模块,比如我用的是普中51-单核-A2开发板。
如图所示连线后:
![image-20200926155532299](https://gitee.com/xiaoshihd/MdPicture/raw/master/img/20200926155532.png)
在电脑上打开串口调试工具,找到串口号,设置好波特率,就可以进行指令设置了:
![image-20200926155442902](https://gitee.com/xiaoshihd/MdPicture/raw/master/img/20200926155442.png)
特别注意:
1.AT指令后不用换行
2.JDY-08的默认波特率是115200
3.AT模式必须是模块未连接状态,即状态灯闪烁
二、软件连接
这里使用的是arduino uno的板子,硬件串口(0,1)用作PC与arduino通讯,使用软串口将(4,5)引脚转化为串口连接蓝牙模块。指令的发送就是通过arduino IDE的串口监视器发送命令到arduino uno,uno接收到命令后再转发到蓝牙模块,蓝牙模块返回值再被uno接收并转发到串口监视器打印。
#include <SoftwareSerial.h>
/*
* 使用arduino uno板做测试
* 串口(0,1)作为PC连接uno通讯串口
* 将串口4,5引脚使用软串口RX、TX处理连接BLE蓝牙模块
*/
SoftwareSerial BT_Serial(4,5);// 使用软串口设置蓝牙连接串口
String str="";
void setup() {
Serial.begin(115200);
BT_Serial.begin(115200);
}
void loop() {
//监控串口,将串口接收到的字符串传送给蓝牙模块
//将蓝牙模块返回的内容串口打印到串口监视器进行显示
str = "";
while(Serial.available()>0)
{
str += char(Serial.read());
delay(10);
}
if(str.length()>0)
{
Serial.print(F("命令行发送内容:"));
Serial.println(str);
// 蓝牙串口向蓝牙发送信息
BT_Serial.print(str);
delay(10);
str = "";
while(BT_Serial.available()>0)
{
str += char(BT_Serial.read());
delay(10);
}
if(str.length()>0)
{
Serial.print(F("BT 返回内容:"));
Serial.println(str);
}
else
{
Serial.println(F("BT 无返回内容:"));
}
}
}
实验结果:
![image-20200926160050195](https://gitee.com/xiaoshihd/MdPicture/raw/master/img/20200926160050.png)
三、手机连接
先用USB转TTL试一下蓝牙通信:
![image-20200926155532299](https://gitee.com/xiaoshihd/MdPicture/raw/master/img/20200926155532.png)
硬件连接好之后,打开Serial Bluetooth Terminal
这款App,在左上角菜单中找到Devices
这个选项,打开之后选择Bluetooth LE
,点击上方的SCAN
,就可以扫描到JDY-08
蓝牙模块。
点击即可连接。
之后在电脑上打开串口调试工具,发送一个“form pc”,就会神奇地发现手机端接受到了电脑发的这个字符串。之后手机端发送"from phone",电脑端就可以收到这个字符串。
整个流程可以理解为:电脑发送"from pc"到蓝牙模块的RXD,蓝牙通过串口接收到数据,通过蓝牙广播出去,手机连接蓝牙就能收到广播"from pc"。
而手机发送"from phone" 就是将该字符串通过蓝牙传给蓝牙模块,蓝牙模块接收到之后,就通过TXD串口发送出去,从而计算机能够接受到字符串"from phone"。
![image-20200928204813435](https://gitee.com/xiaoshihd/MdPicture/raw/master/img/20200928204813.png)
![image-20200928204933080](https://gitee.com/xiaoshihd/MdPicture/raw/master/img/20200928204933.png)
之后编写Arduino程序做一个通过手机蓝牙控制小灯亮灭的小工具。
按如图所示接线:
![image-20200928210410992](https://gitee.com/xiaoshihd/MdPicture/raw/master/img/20200928210411.png)
黄色的那根线连接蓝牙的TXD即可。
char serialData;
void setup() {
Serial.begin(115200);
pinMode(11, OUTPUT); //11引脚连接演示用LED
}
void loop() {
if ( Serial.available() > 0 ) {
serialData = Serial.read();
if (serialData == '1' ) { //接收到点亮LED指令
Serial.print("Got command: ");
Serial.println(serialData);
Serial.println("LED-ON");
digitalWrite(11, HIGH); //点亮LED指令
}
if (serialData == '0' ){ //接收到熄灭LED指令
Serial.print("Got command: ");
Serial.println(serialData);
Serial.println("LED-OFF");
digitalWrite(11, LOW); //熄灭LED指令
}
}
}
实验结果:
手机发送1
,小灯亮;手机发送0
,小灯灭。
实验分析:手机发送1
是将该字符串通过蓝牙传给蓝牙模块,蓝牙模块接收到之后,就通过TXD串口发送出去,到达Arduino板的RXD,之后Arduino的串口寄存器中就存在1
这个数据了。Arduino就会执行编写的程序,在串口监视器中打印字符,之后点亮LED灯。