优酷视频教学
蓝牙模块购买地址
蓝牙,顾名思义,蓝色的牙齿,并不能用来咬人,而是一种无线数据传输标准。
HC-05和HC-06是现在使用较多的两种蓝牙模块。两者之间的区别是HC-05是主从一体机,既能向自己的’主子’打小报告,也可以接收下达的命令;而HC-06只能工作在从机模式下,那就只能乖乖接收上级的命令啦。
在很多情况下,我们都想当“霸道总裁”,让下级乖乖听话就OK了,不需要他多废话。那就用HC-06就够了。
进入AT模式 (文章:参考Arduino+HC-05蓝牙模块AT模式设置):
在HC-05蓝牙模块的正面会有一个圆形按键,摁住的过程中给蓝牙模块上电,蓝牙模块的指示灯慢闪(1秒亮一次),即说明已经进入AT模式。
蓝牙模块基本配置 :
模块默认波特率为9600、默认配对密码为1234、默认名称为HC-05, AT模式波特率固定38400,8位数据位、1位停止位、无奇偶校验的通信格式。
AT+NAME=”XXX” //修改蓝牙模块名称为XXX
AT+ROLE=0 //蓝牙模式为从模式
AT+CMODE=1 //蓝牙连接模式为任意地址连接模式,也就是说该模块可以被任意蓝牙设备连接
AT+PSWD=1234 //蓝牙配对密码为1234
AT+UART=9600,0,0 //蓝牙通信串口波特率为9600,停止位1位,无校验位
(更多配置请参考HC-05AT命令文档。)
我这里是这个(模块网址:HC-06)
设置AT模式代码如下:
void setup() {
// put your setup code here, to run once:
Serial.begin(38400);
}
void sendcmd()
{
Serial.println("AT");
while(Serial.available())
{
char ch;
ch = Serial.read();
Serial.print(ch);
} // Get response: OK
delay(1000); // wait for printing
Serial.println("AT+NAME=14jxcheng");
while(Serial.available())
{
char ch;
ch = Serial.read();
Serial.print(ch);
}
delay(1000);
Serial.println("AT+ADDR?");
while(Serial.available())
{
char ch;
ch = Serial.read();
Serial.print(ch);
}
delay(1000);
Serial.println("AT+PSWD=1125");
while(Serial.available())
{
char ch;
ch = Serial.read();
Serial.print(ch);
}
delay(1000);
}
void loop() {
sendcmd();
}
线路连接图:
VCC:接Arduino的5V或者3.3V
GND:接Arduino的GND
TXD:发送端,接Arduino的RX
RXD:接收端,接Arduino的TX
注意:上传代码的时候要注意拔掉arduino开发板上面的TX、RX,否则上传代码会报错。
代码:
void setup() {
Serial.begin(9600);
pinMode(8, OUTPUT); // put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available()>0)
{
char data= Serial.read(); // reading the data received from the bluetooth module
switch(data)
{
case 'a': digitalWrite(8, HIGH);break; // when a is pressed on the app on your smart phone
case 'd': digitalWrite(8, LOW);break; // when d is pressed on the app on your smart phone
default : break;
}
Serial.println(data);
}
delay(50);
}
Android APP地址:(安卓蓝牙调试app网上太多了)
iOS APP:
(注意:安卓手机与苹果手机,苹果手机老是检测不到蓝牙的问题)
更 新:
HC-06(参考文章:[Arduino]HC-06蓝牙模块使用小结)
/*
arduino数字口引脚与蓝牙引脚连接:
RX(接收)---------------9(发送)
TX(发送)---------------- 8(接收)
*/
#include
//使用软件串口,能讲数字口模拟成串口
SoftwareSerial BT(8, 9); //新建对象,接收脚为8,发送脚为9
char val; //存储接收的变量
void setup() {
Serial.begin(9600); //与电脑的串口连接
Serial.println("BT is ready!");
BT.begin(9600); //设置波特率
}
void loop() {
//如果串口接收到数据,就输出到蓝牙串口
if (Serial.available()) {
val = Serial.read();
BT.print(val);
}
//如果接收到蓝牙模块的数据,输出到屏幕
if (BT.available()) {
val = BT.read();
Serial.print(val);
}
}
通过串口对蓝牙AT的设置:
实例代码:
Arduino之间通过蓝牙进行连接
Arduino之间通过蓝牙进行通信
修改(20190304):
蓝牙之间的通信
-主模块有 传感器、主模式蓝牙 单片机nano等;
-从模块蓝牙有 从模式蓝牙 单片机 LED等显示。
功能描述:当主模块通过传感器采集数据 然后由主模块蓝牙传输给从模块的蓝牙接收打开/关闭LED照明设备。
/*
-------------从模块-----------
arduino数字口引脚与蓝牙引脚连接:
RX(接收)---------------9(发送)
TX(发送)---------------- 8(接收)
*/
#include
//使用软件串口,能讲数字口模拟成串口
SoftwareSerial BT(8, 9); //新建对象,接收脚为8,发送脚为9
char val; //存储接收的变量
int ledpin2 = 6;
int ledpin = 13;
void setup() {
Serial.begin(9600); //与电脑的串口连接
Serial.println("BT is ready!");
BT.begin(9600); //设置波特率
pinMode(ledpin,OUTPUT);
pinMode(ledpin2,OUTPUT);
digitalWrite(ledpin,HIGH);
digitalWrite(ledpin2,HIGH);
}
void loop() {
//如果接收到蓝牙模块的数据,输出到屏幕
if (BT.available()) {
val = BT.read();
if(val=='1')
{
digitalWrite(ledpin,LOW);
digitalWrite(ledpin2,LOW);
}
if(val=='0')
{
digitalWrite(ledpin,HIGH);
digitalWrite(ledpin2,HIGH);
}
}
Serial.println(val);
delay(1500);
}
/*
-------------主模块-----------
arduino数字口引脚与蓝牙引脚连接:
RX(接收)---------------9(发送)
TX(发送)---------------- 8(接收)
*/
#include
//使用软件串口,能讲数字口模拟成串口
SoftwareSerial BT(8, 9); //新建对象,接收脚为8,发送脚为9
char val; //存储接收的变量
int IRspin = 6;
int ledpin = 13;
int i=0;
void setup() {
Serial.begin(9600); //与电脑的串口连接
Serial.println("BT is ready!");
BT.begin(9600); //设置波特率
pinMode(IRspin,INPUT);
pinMode(ledpin,OUTPUT);
}
void loop() {
int val2 = digitalRead(IRspin);
Serial.print(val2);
//sleepping
if(val2==1)
{
digitalWrite(ledpin,HIGH);
i++;
if(i>=3)
{
Serial.print("sleep i=");
Serial.println(i);
delay(5000);
BT.print('1');
i=0;
}
}
//wake up!
if(val2==0)
{
digitalWrite(ledpin,LOW);
i++;
if(i>=5)
{
BT.print('0');
Serial.print("wake i=");
Serial.println(i);
i=0;
//delay(10000);
}
}
delay(1500);
}
修改(2019/04/27):
/*
arduino数字口引脚与蓝牙引脚连接:
RX(接收)---------------9(发送)
TX(发送)---------------- 8(接收)
作者:Naiva
日期:2019/04/27
*/
#include
//使用软件串口,能讲数字口模拟成串口
SoftwareSerial BT(8, 9); //新建对象,接收脚为8,发送脚为9
char val; //存储接收的变量
int IRspin = 6;//红外线
int ledpin = 13;//13pin LED灯
int i = 0;//flag1旗标(睡眠)
int j = 0;//flag2旗标(清醒)
void setup() {
Serial.begin(9600); //与电脑的串口连接
Serial.println("BT is ready!");
BT.begin(9600); //设置波特率
pinMode(IRspin,INPUT);//读取
pinMode(ledpin,OUTPUT);//输出
}
void loop() {
int val2 = digitalRead(IRspin);
Serial.print(val2);
//判断是否进入睡眠
if(val2 == 1)
{
digitalWrite(ledpin,HIGH);
j = 0;
i++;
else if(i >= 3)
{
Serial.print("sleep i=");
Serial.println(i);
delay(3000);
BT.print('1');
i = 0;
}
delay(500);
}
//判断是否清醒
if(val2 == 0)
{
digitalWrite(ledpin,LOW);
i = 0;
j++;
else if(j >= 5)
{
BT.print('0');
Serial.print("wake i=");
Serial.println(i);
j = 0;
}
delay(500);
}
delay(200);
}