一直想做无线传感器,通过蓝牙来接收数据,无奈因为arduino接收串口数据的一些问题,一直搁到现在。因为学校里给学生开了选修课,所以手边有一些nano和mega可以使用,所以就做了用两个nano加上两个蓝牙模块来发射数据,用mega加两个蓝牙模块来接收数据。因为mega可以同时使用4路串口,所以考虑用mega来作为主控机,用来接收来自传感器的数据,每个传感器加一个nano和蓝牙来无线发射数据。
因为是测试,所以在nano中写了一个简单的发射信号的语句。以下四nano中的程序:
————————————————我是分界线——————————————————————
int i=1;
void setup() {
Serial.begin(9600); }
void loop(){
Serial.print(i);
Serial.print("$");
delay(50);
i++;
}
————————————————我是分界线——————————————————————
以下是mega中的程序:
——————————————————我是分界线————————————————————————
String comdata = "";
String shuju="";
String shuju2="";
int i;
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
Serial2.begin(9600);
}
void loop()
{
while (Serial1.available() > 0)
{
shuju += char(Serial1.read());
delay(2);
}
while (Serial2.available() > 0)
{
shuju2 +=char(Serial2.read());
delay(2);
}
if (shuju.length() > 0)
{
i=shuju.indexOf("$");
if(i!=-1){
comdata=shuju.substring(0,i);
Serial.print("#1=");
Serial.print(comdata);
Serial.println("$");
shuju=shuju.substring(i+1,shuju.length());
comdata = "";
i=0;
}
}
if (shuju2.length() > 0)
{
i=shuju2.indexOf("$");
if(i!=-1){
comdata=shuju2.substring(0,i);
Serial.print("#2=");
Serial.print(comdata);
Serial.println("$");
shuju2=shuju2.substring(i+1,shuju2.length());
comdata = "";
i=0;
} } }
——————————————我是分界线————————————————————
上篇忘记介绍蓝牙模块的设置了,如果想要利用两路蓝牙来接收数据,那么这两路蓝牙必须设置不同的密码,以下是蓝牙模块的设置方法,可以将蓝牙模块接到串口模块上,然后里哟你串口软件发指令给蓝牙模块,以下设置是针对DFrobot的蓝牙模块的,它上面有开关可以设置接收命令状态。如果不是DFrobot的蓝牙模块,只要将KEY针脚接高电平就是可以接受命令状态。将两个蓝牙模块设置为主,然后设置不同的密码。再将另外两个设置为从,设置对应主蓝牙的密码。以下是具体的命令设置:
在发送栏中输入AT(不分大小写),然后点击发送,可看见模块返回OK,这表示AT指令通讯正常。当AT指令设置完毕后,将2号开关AT Mode拨到2端退出AT命令模式,重新上电后设置才生效。
1.AT指令集如下:
指令 | 响应 | 参数 |
AT | OK | 无 |
2.模块重启指令:
指令 | 响应 | 参数 |
AT+RESET | OK | 无 |
3.设置和查询模块连接模式:
当模块无法被适配器、主机连接时,需配置该参数,配置为AT+CMODE=1。
指令 | 响应 | 参数 |
AT+CMODE=< Param > | OK | Param: 0 —— 指定蓝牙地址连接模式 (指定蓝牙地址由绑定指令设置) 1 —— 任意蓝牙地址连接模式 (不受绑定指令设置地址的约束) 默认连接模式:0 |
AT+CMODE? | +CMODE: < Param > OK |
4.设置和查询模块角色:
当模块无法被适配器、主机搜索到时,需配置该参数,配置为从角色。
模块角色说明:
Slave(从角色) ——被动连接,可以和任意蓝牙适配器配对使用;
Master (主角色)——查询周围从设备,并主动发起连接,从而建立主、从蓝牙设备间的透明数据传输通道。
Slave-Loop(回环角色) ———被动连接,接收远程蓝牙主设备数据并将数据原样返回给远程蓝牙主设备;
5.设置和查询配对码:
6.设置和查询串口参数:
举例:设置串口波特率:115200,1位停止位,无校验
AT+ UART=115200,0,0\r\n
OK
AT+ UART?
+UART:115200,0,0
OK
注:在应用中,选择1位停止位,无校验。