【雕爷学编程】Arduino动手做(110)---JDY-31 蓝牙模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十:JDY-31蓝牙转串口适配器SPP模块组无线透传 替换HC-05/06从机

在这里插入图片描述
蓝牙bluetooth

是一种支持设备短距离通信(一般10m内)的无线电技术,能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够成功地简化设备与因特网Internet之间的通信,从而数据传输变得更加迅速高效,为无线通信拓宽道路。 蓝牙作为一种小范围无线连接技术,能在设备间实现方便快捷、灵活安全、低成本、低功耗的数据通信和语音通信,因此它是目前实现无线个域网通信的主流技术之一。与其他网络相连接可以带来更广泛的应用。是一种尖端的开放式无线通信,能够让各种数码设备无线沟通,是无线网络传输技术的一种,原本用来取代红外。蓝牙技术是一种无线数据与语音通信的开放性全球规范,它以低成本的近距离无线连接为基础,为固定与移动设备通信环境建立一个特别连接。其实质内容是为固定设备或移动设备之间的通信环境建立通用的无线电空中接口(Radio Air Interface),将通信技术与计算机技术进一步结合起来,使各种3C设备在没有电线或电缆相互连接的情况下,能在近距离范围内实现相互通信或操作。简单的说,蓝牙技术是一种利用低功率无线电在各种3C设备间彼此传输数据的技术。蓝牙工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段,使用IEEE802.11协议。作为一种新兴的短距离无线通信技术,正有力地推动着低速率无线个人区域网络的发展。

在这里插入图片描述
蓝牙原理
蓝牙是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4—2.485GHz的ISM波段的UHF无线电波)。蓝牙可连接多个设备,克服了数据同步的难题。 蓝牙技术是世界著名的5家大公司一爱立信(Ericsson)、诺基亚(Nokia)、东芝(TOshiba)、国际商用机器公司(IBM)和英特尔(Intel),于1998年5月联合宣布的一种无线通信新技术。蓝牙设备是蓝牙技术应用的主要载体,常见蓝牙设备比如电脑、手机等。蓝牙产品容纳蓝牙模块,支持蓝牙无线电连接与软件应用。蓝牙设备连接必须在一定范围内进行配对。这种配对搜索被称之为短程临时网络模式,也被称之为微微网,可以容纳设备最多不超过8台。蓝牙设备连接成功,主设备只有一台,从设备可以多台。蓝牙技术具备射频特性。采用了TDMA结构与网络多层次结构,在技术上应用了跳频技术、无线技术等,具有传输效率高、安全性高等优势,所以被各行各业所应用。

蓝牙特点
1、蓝牙技术的适用设备多,无需电缆,通过无线使电脑和电信连网进行通信。
2、蓝牙技术的工作频段全球通用,适用于全球范围内用户无界限的使用,解决了蜂窝式移动电话的“国界”障碍。蓝牙技术产品使用方便,利用蓝牙设备可以搜索到另外一个蓝牙技术产品,迅速建立起两个设备之间的联系,在控制软件的作用下,可以自动传输数据。
3、蓝牙技术的安全性和抗干扰能力强,由于蓝牙技术具有跳频的功能,有效避免了ISM频带遇到干扰源。蓝牙技术的兼容性较好,目前,蓝牙技术已经能够发展成为独立于操作系统的一项技术,实现了各种操作系统中良好的兼容性能。
4、传输距离较短:现阶段,蓝牙技术的主要工作范围在10米左右,经过增加射频功率后的蓝牙技术可以在100米的范围进行工作,只有这样才能保证蓝牙在传播时的工作质量与效率,提高蓝牙的传播速度。另外,在蓝牙技术连接过程中还可以有效的降低该技术与其他电子产品之间的干扰,从而保证蓝牙技术可以正常运行。蓝牙技术不仅有较高对传播质量与效率,同时还具有较高的传播安全性特点。
5、通过调频扩频技术进行传播:蓝牙技术在实际应用期间,可以原有的频点进行划分、转化,如果采用一些跳频速度较快的蓝牙技术,那么整个蓝牙系统中的主单元都会通过自动跳频的形式进行转换,从而将其以随机的进行跳频。由于蓝牙技术的本身具有较高的安全性与抗干扰能力,在实际应用期间可以蓝牙运行的质量。

在这里插入图片描述
蓝牙串口

是基于SPP协议(Serial Port Profile),能在蓝牙设备之间创建串口进行数据传输的一种设备。蓝牙串口的目的是针对如何在两个不同设备(通信的两端)上的应用之间保证一条完整的通信路径。如蓝牙模块(BF10-A)和BF10-A之间,蓝牙模块和蓝牙适配器之间,蓝牙模块和PDA蓝牙之间都可以通过SPP蓝牙串行端口服务来建立蓝牙串口数据传输。蓝牙模块(BF10-A)的目的,是针对如何在两个不同设备(通信的两端)上的应用之间保证一条完整的通信路径,并在它们之间保持一通信段。应用不只表示终端用户应用, 比如也可以是高层协议或作为终端用户应用的其它服务。蓝牙模块(BF10-A)准备把利用设备串口进行通信的应用覆盖在内。在一个简单配置实例当中,通信段就是设备之间的BT直接链路。如果通信段为另一网络,BT用于在该设备和网络接入设备(如Modem)之间建立路径。蓝牙模块(BF10-A)只针对直接互连设备之间的连接,或者是设备与网络接入设备之间的互连。蓝牙模块(BF10-A)支持其它的配置方式,如一端采用BT通信,另一端采用有线接口,如下面第二个图所示。这些设备不只是调制解调器,而且提供简单服务。通信两端设备必须兼容于蓝牙模块BF10-A协议。第一类设备是诸如计算机、打印机等通信终端设备。第二类设备是通信段的一部分,如Modem。但是为了简化协议内容,蓝牙模块(BF10-A)协议对这两种设备不作区分。在两个蓝牙模块BF10-A实体间传输信息也都支持这两类设备,其中有些信息只用于第二类设备。协议中也没有对两类设备所用信息进行严格划分。而是由用户决定使用哪些信息。由于一个设备并不知道通信路径上的其它设备的类型,所以每一个设备都应按照协议规定发送所有可用信息。

在这里插入图片描述
BK3231

BK3231 芯片是一种高度集成的单芯片蓝牙3.0 HID设备。它集成了高性能的收发信机、丰富的基带处理器和蓝牙HID配置文件。FLASH程序存储器使其适合自定义应用,也可用于其他蓝牙应用,如spp控制器

BK3231特性:

工作电压从2.0V到3.6V

蓝牙3.0兼容

-86dBm对1Mbps模式和2dBm发射功率的灵敏度

HID v1.0,以及其他根据请求提供的光轮廓

16MHz晶体参考时钟

键盘用56针QFN 7mmx7mm封装

I2C、spi和UART接口

10位电池显示器ADC

PWM模式下的三个定时器

在这里插入图片描述
JDY-31蓝牙转串口适配器SPP模块组无线透传 替换HC-05/06从机

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百一十: JDY-31蓝牙转串口适配器SPP-C模块组无线透传 替换HC-05/06从机
项目:进入蓝牙模块 AT 模式,输入AT,看看是不是有OK返回
JDY-31模块与Uno接线
VCC—— 5V
GND——GND
TXD——D7
RXD——D8

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十: JDY-31蓝牙转串口适配器SPP-C模块组无线透传 替换HC-05/06从机

项目:进入蓝牙模块 AT 模式,输入AT,看看是不是有OK返回

JDY-31模块与Uno接线

VCC—— 5V

GND——GND

TXD——D7

RXD——D8

*/



#include <SoftwareSerial.h>

//使用软件串口,能将数字口模拟成串口

SoftwareSerial BT(7, 8);  //新建对象,接收脚为7,发送脚为8

char val;  //存储接收的变量



void setup() {
    
    

  Serial.begin(9600);  //与电脑的串口连接

  Serial.println("BT is ready!");

  BT.begin(9600);  //设置HC-06兼容模块波特率

}



void loop() {
    
    

  //如果串口接收到数据,就输出到蓝牙串口

  if (Serial.available()) {
    
    

  val = Serial.read();

  BT.print(val);

  }

  //如果接收到蓝牙模块的数据,输出到屏幕

  if (BT.available()) {
    
    

  val = BT.read();

  Serial.print(val);

  }

}

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百一十: JDY-31蓝牙转串口适配器SPP-C模块组无线透传 替换HC-05/06从机
项目二:JDY-31蓝牙模块从模式与Arduino的回环测试
JDY-31模块与Uno接线
VCC VCC
GND GND
TXD D0
RXD D1

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十: JDY-31蓝牙转串口适配器SPP-C模块组无线透传 替换HC-05/06从机

项目二:JDY-31蓝牙模块从模式与Arduino的回环测试

JDY-31模块与Uno接线

VCC              VCC

GND            GND

TXD              D0

RXD              D1

*/



void setup(){
    
    

Serial.begin(9600);

}



void loop(){
    
    

  while(Serial.available())

  {
    
    

    char c=Serial.read();

    if(c=='A')

      {
    
    

      Serial.println("Hello I am Eagler8");

      }

  }

}

实验串口返回情况

在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百一十: JDY-31蓝牙转串口适配器SPP-C模块组无线透传 替换HC-05/06从机
项目三:通过JDY-31蓝牙模块Arduino 控制 LED 灯
串口发送“1”为开灯,发送“2"为关灯
JDY-31模块与Uno接线
VCC VCC
GND GND
TXD D0
RXD D1

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十: JDY-31蓝牙转串口适配器SPP-C模块组无线透传 替换HC-05/06从机

项目三:通过JDY-31蓝牙模块Arduino 控制 LED 灯

串口发送“1”为开灯,发送“2"为关灯

JDY-31模块与Uno接线

VCC        VCC

GND        GND

TXD        D0

RXD        D1

*/



void setup(){
    
    

  Serial.begin(38400);

  pinMode(13, OUTPUT);

}



void loop(){
    
    

  while(Serial.available())

  {
    
    

  char c=Serial.read();

  

    if(c=='1')

    {
    
    

      Serial.println("Eagler8");

      

      Serial.write("Serial--13--high");

      digitalWrite(13, HIGH);

    }

    

    if(c=='2')

    {
    
    

    Serial.write("Serial--13--low");

    digitalWrite(13, LOW);

    }

  }

}

实验串口返回情况

在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十: JDY-31蓝牙转串口适配器SPP-C模块组无线透传 替换HC-05/06从机

项目四:通过JDY-31蓝牙模块Arduino 控制 LED 灯

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十: JDY-31蓝牙转串口适配器SPP-C模块组无线透传 替换HC-05/06从机

项目四:通过JDY-31蓝牙模块Arduino 控制 LED 灯

连接方式

JDY-31模块与Uno:

VCC        VCC

GND        GND

TXD        D0

RXD        D1

*/



const byte LED = 13;

char val;    // 儲存接收資料的變數,採字元類型



void setup() {
    
    

  pinMode(LED, OUTPUT);

  // 序列傳輸速率依照藍牙模組的設定

  // 115200bps或57600bps

  Serial.begin(57600);

  Serial.println("Welcome to Arduino!");

}



void loop() {
    
    

  if( Serial.available() ) {
    
    

  val = Serial.read();

  switch (val) {
    
    

  case '0' :

    digitalWrite(LED, LOW);

    Serial.println("LED OFF");

    break;

  case '1' :

    digitalWrite(LED, HIGH);

    Serial.println("LED ON");

    break;

  }

  }

}

实验串口返回情况

在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十: JDY-31蓝牙转串口适配器SPP-C模块组无线透传 替换HC-05/06从机

项目五:最简单的蓝牙控制LED的程序,输入1为亮,其他为熄灭,串口显示输入字符

(手机端-应用宝-搜索《SPP》-安装-打开-搜蓝牙-连接-设置控制面板)

连接方式 LED D13

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十: JDY-31蓝牙转串口适配器SPP-C模块组无线透传 替换HC-05/06从机

项目五:最简单的蓝牙控制LED的程序,输入1为亮,其他为熄灭,串口显示输入字符

(手机端-应用宝-搜索《SPP》-安装-打开-搜蓝牙<JDY-31-SPP>-连接-设置控制面板)

连接方式 LED D13

JDY-31模块与Uno:

VCC        VCC

GND        GND

TXD        D0

RXD        D1

*/



void setup(){
    
    

pinMode(13,OUTPUT);

Serial.begin(9600);

}



void loop(){
    
    

  if(Serial.available())

  {
    
    

  char num = Serial.read();

  Serial.println(num);

  if(num == '1')

  digitalWrite(13,HIGH);

  else

  digitalWrite(13,LOW);

  }

}

实验串口返回情况

在这里插入图片描述
手机端-应用宝-搜索《SPP》-安装-打开-搜蓝牙-连接-设置控制面板

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百一十: JDY-31蓝牙转串口适配器SPP-C模块组无线透传 替换HC-05/06从机

项目六:蓝牙控制的三色自锁灯(板载灯监测蓝牙接通状态)

/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百一十: JDY-31蓝牙转串口适配器SPP-C模块组无线透传 替换HC-05/06从机
项目六:蓝牙控制的三色自锁灯(板载灯监测蓝牙接通状态)
连接方式
JDY-31模块与Uno:
VCC        VCC
GND        GND
TXD        D0
RXD        D1
*/

int ledPinGreen = 9;
int ledPinBlue = 11;
int ledPinRed = 10;
int beep = 13;//蓝牙接通指示灯
int state=7;//蓝牙state口
int signal;//测试是否连接

void setup() {
    
    
  pinMode(ledPinGreen, OUTPUT);
  pinMode(ledPinBlue, OUTPUT);
  pinMode(ledPinRed, OUTPUT);
  Serial.begin(9600);
  pinMode(state,INPUT);
  pinMode(beep,OUTPUT);
}

void loop() {
    
    
  signal= digitalRead(state);
  if(signal==HIGH)
  digitalWrite(beep,HIGH);
  else
  digitalWrite(beep,LOW);
  while (Serial.available()) {
    
    
  char p = Serial.read();
    Serial.println(p);
  //按下 B 键 蓝灯亮
  if (p == 'B') {
    
    
    rgbLedOn(ledPinRed, ledPinGreen, ledPinBlue);
  }
  //按下 R 键 红灯亮
  if (p == 'R' ) {
    
    
    rgbLedOn( ledPinGreen, ledPinBlue, ledPinRed);
  }
  //按下 G 键 绿灯亮
  if (p == 'G' ) {
    
    
    rgbLedOn( ledPinBlue, ledPinRed, ledPinGreen);
  }
  }
}
//RGBLED
void rgbLedOn(int onLedPin, int offLedPin1, int offLedPin2) {
    
    
  digitalWrite(onLedPin, HIGH);
  digitalWrite(offLedPin1, LOW);
  digitalWrite(offLedPin2, LOW);
}

实验场景图
在这里插入图片描述
实验开源仿真编程(Linkboy V4.63)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41659040/article/details/128317144