首次接触蓝牙模块,对蓝牙模块的操作还非常陌生,自从上旬通过串口调试助手连接蓝牙模块进行操作练习之后,一直尝试通过单片机来操作蓝牙模块,经过十多天的摸索和测试,今天总算有了结果,通过单片机连接主蓝牙模块、电脑的串口调试助手连接从蓝牙模块,从蓝牙模块初步成功地接收到了主蓝牙模块发送的信息。下图为测试过程的照片:
这是从串口调试助手上观察从蓝牙模块接收到的数据信息,:
下面是单片机中搜索从设备的函数:
void BT05_Init(void)
{
uint8_t ReceSize;
printf("AT\r\n");
while(!__HAL_UART_GET_FLAG(&huart2,UART_FLAG_RXNE));
HAL_UART_Receive(&huart2,aBT_Buff,64,1000);
/*
LCD_write_ASCII(0,3,1,(uint8_t *)"BT05=");
LCD_write_ASCII(30,3,1,aBT_Buff);
BT_display();
*/
if(aBT_Buff[0] == 0x4F){ //蓝牙模块有回应,开始设置
printf("AT+INQ\r\n");
while(!__HAL_UART_GET_FLAG(&huart2,UART_FLAG_RXNE));
HAL_UART_Receive(&huart2,aBT_Buff,64,1000); //接收蓝牙返回的信息
// LCD_write_ASCII(30,4,1,aBT_Buff);
// BT_display();
BT_Mode = 10; //设置搜索成功标志
// printf("AT+CONN1\r\n");
LCD_write_ASCII(100,5,1,(uint8_t *)"BT05_Init OK! ");
}
else{ //蓝牙模块无回应
LCD_write_ASCII(100,5,1,(uint8_t *)"BT05_Init Fail!");
}
}
这是向从蓝牙设备发送信息的函数,因为尚在测试过程,这个函数中仅对搜索到的第一个设备进行连接操作:
/************************************************************
* 发送命令到蓝牙设备
* 进入参数:
* ID 搜索列表中的设备号
* OnOff 0=关闭命令、1=打开命令
* 返回参数:无
*************************************************************/
void BT05_Handler(uint8_t ID, uint8_t OnOff)
{
printf("AT+CONN1\r\n");
// while(!__HAL_UART_GET_FLAG(&huart2,UART_FLAG_RXNE));
// HAL_UART_Receive(&huart2,aBT_Buff,64,1000); //接收蓝牙返回的信息
// LCD_write_ASCII(30,4,1,aBT_Buff);
// BT_display();
if(OnOff)
printf("The Light On!\r\n");
else
printf("The Light OFF!\r\n");
}
之所以说是初步成功,是因为在测试过程中多次出现了单片机死循环现象,复位重启都不能解决,必须对蓝牙模块断电重启才行。另外两个蓝牙模块连接是简单通讯,还未涉及到绑定操作,实际应用时应该绑定MAC,防止其他设备的干扰。