【教程】Arduino两块蓝牙模块间上电自动连接

2019-04-13 16:07发布

一.预备知识

1.1 蓝牙通讯

定义:蓝牙通讯是指依据蓝牙协议进行通讯。在Arduino项目中我们常常使用蓝牙模块进行蓝牙通讯,蓝牙模块是一种集成了蓝牙功能的PCB板,可以实现短距离的无线数据传输。 特点: 1)Arduino蓝牙模块发送和接收数据是以ASCII码形式传输;如调用蓝牙模块发送数字1,那么蓝牙模块会把1转换为其对应的ASCII码49,然后发送49 2)每次只传输一个字节数据;比如使用蓝牙模块发送12,那么蓝牙模块会把12转换先分割为1和2,然后先后传输49和50,这一点导致了在极小的概率下你使用另一个蓝牙模块接收一个蓝牙模块发送的12时,会发现读取的是49,-1,-1,-1,-1,50,中间这些-1是没有数据时的默认读数

1.2软件串口

蓝牙通讯需要使用串口,但是UNO只要一个硬件串口,所以我们常常使用软件串口库SoftwareSerial.h,把普通数字口变成串口。需要注意的是Arduino UNO的所有数字口都可以设置为虚拟串口,但是mega2560数字口中只有10,11,12,13,14,15,50,51,52,53可以设置为虚拟串口。  

二.硬件

HC-06主从一体机*2 Arduino UNO*2 RX接数字口3,TX接数字口2

三.程序

/* * 蓝牙主机程序,接收数据如果有数据就通过串口打印出来 */ #include SoftwareSerial blueTooth(2, 3); int data; void setup() { blueTooth.begin(9600);//设置软串口通讯波特率 blueTooth.print("AT+BAUD4");//设置蓝牙通信波特率 delay(100); blueTooth.print("AT+ROLE=M");//设置蓝牙为主机 delay(100); blueTooth.print("AT+NAMEmaster"); delay(100); blueTooth.print("AT+PIN1994");//设置密码为1994 delay(100); } void loop() { data=blueTooth.read(); if(data>0){ Serial.println(data); } } /* * 蓝牙从机程序,每隔1秒调用蓝牙发送一次数字2 */ #include SoftwareSerial blueTooth(2, 3); int data; void setup() { blueTooth.begin(9600);//设置软串口通讯波特率 blueTooth.print("AT+BAUD4");//设置蓝牙间通信波特率为9600,主从需一致 delay(100); blueTooth.print("AT+ROLE=S");//设置蓝牙为从机 delay(100); blueTooth.print("AT+NAMEslave"); delay(100); blueTooth.print("AT+PIN1994");//设置密码为1994,密码必须要设置为和主机一样 delay(100); } void loop() { blueTooth.print(2); delay(1000); }

四.注意事项

1)蓝牙主机和从机波特率,密码一定要一样 2)上传程序后,断电,再接通重启设置的主从机才会生效,蓝牙模块上电后红灯闪烁,连接上其他蓝牙模块后红灯常亮,第一次连接花费的时间可能会较长 3)上面程序仅仅针对的是HC-06主从一体蓝牙模块 4)如果要把接收到的数据合成,数字类可以通过*10累加实现,字符串可以通过数组存储实现数据流合成与截取