实现蓝牙HC-05、06与单片机的连接及与手机通信
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
} void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
USART_Init(USART1,&USART_InitStructure); USART_Cmd(USART1,ENABLE); } void delay_ms(u16 time) { u16 i=0; while(time--) { i=12000; while(i--); } } int Putchar(int c)
USART_ART_BaudRate = 9600;
USART_ART_WordLength = USART_WordLength_8b;
USART_ART_StopBits = USART_StopBits_1;
{ while (0 != *str) { UART_PutChar(USARTx, *str); str++; } }
{ if (c == ‘\n’){putchar(‘\r’);} USART_SendData(USART1,c); while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET){}; return c; } void UART_PutChar(USART_TypeDef* USARTx, uint8_t Data) { USART_SendData(USARTx, Data); while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET){} } void UART_PutStr (USART_TypeDef* USARTx, uint8_t *str)
USART_ART_Parity = USART_Parity_No;
USART_ART_HardwareFlowControl
=
USART_HardwareFlowControl_None;
USART_ART_Mode = USART_Mode_Rx | USART_Mode_Tx;
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch) void RCC_Configuration(void); void GPIO_Configuration(void); void USART_Configuration(void); void delay_ms(u16 time); void UART_PutChar(USART_TypeDef* USARTx, uint8_t Data); void UART_PutStr (USART_TypeDef* USARTx, uint8_t *str); int Putchar(int c); int main() { SystemInit(); RCC_Configuration();
上电后,蓝牙指示灯一般进入快闪状态,即等待蓝牙连接(从模式),用手 机搜索并连接单片机上的蓝牙,配对密码默认为 1234。配对成功就可以发送
数据给蓝牙,如下图,至此基于 STC51 单片机的蓝牙与手机通信成功。 因为毕业设计需要用到无线传输,第一次接触蓝牙串口通信,芯片用的 HC-05。调试了一天,复制了不少例程,一直无解认为是程序问题。直到看 到这篇文章才发现自己引脚就接错了 一定记住单片机 TX 接蓝牙 RX,单片机 RX 接蓝牙 TX。一定记住单片机 TX 接蓝牙 RX,单片机 RX 接蓝牙 TX。一定记住单片机 TX 接蓝牙 RX,单 片机 RX 接蓝牙 TX。重要的事说三次。 附基于 STM32 的 HC-05 串口通信框架代码 #include stm32f10x.h #include stm32f10x_rcc.h #include stm32f10x_gpio.h #include stm32f10x_usart.h #include stm32f10x_crc.h #include system_stm32f10x.h #include stdio.h
命令: AT+NAME=Xidian\r\n //设置蓝牙名称为:Xidian 返回: OK //返回提示符:OK 命令: AT+PSWD?\r\n //查询蓝牙配对密码 返回:+PSWD:1234 //配对密码为:1234 命令: AT+ROLE?\r\n //查询蓝牙模式 返回:+ROLE:0 //0:从角色,1:主角色,2:回环角色 注意!!每行命令必须以更多 AT 命令\r\n 结尾,更多的 AT 指令一般技术手 册都会给出,活在网上查询。 5、实现基于 STC51 单片机的蓝牙与手机通信 首先,给单片机载入串口通信程序,注意!!一般下载程序时单片机与蓝牙 断开,避免因蓝牙占用单片机串口导致程序无法烧写。载入程序后,按照上 图给出的读写连接方式连接,并给给单片机及 HC-05 连接合适电源,一般都 用单片机板子上电源。手机端需先在浏览器上搜索并下载蓝牙串口调试助手。
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void USART_SART_InitTypeDef USART_InitStructure;
实现蓝牙 HC-05、06 与单片机的连接及与手机通信
蓝牙(Bluetooth):是一种无线技术标准,可实现固定设备、移动设备和 楼宇个人域网之间的短距离数据交换(使用 2.42.485GHz 的 ISM 波段的 UHF 无线电波)。蓝牙技术最初由电信巨头爱立信公司于 1994 年创制,当时是作 为 RS232 数据线的替代方案, 蓝牙可连接多个设备,在与单片机连接使用 也得到了广泛应用。 1、端口连接 与单片机串口连接时,两者之间 相互可以读写。例如 51 给 HC-05 传递数 据,即 51 向 HC-05 写数据,HC-05 从 51 读取数据,那幺串口连接处 51 的 写端 P3.1 引脚(TXD)就与 HC-05 读端(RXD)相连,反之蓝牙向 51 传递数据时, HC-05 写端(TXD)T 与 51 的读端 P3.0 引脚(RXD)相连,所以通常为以下连接 方式即可实现数据传送。 注意:只有正确连接读写端才能正常通信。 2、电平选择 一般情况下,蓝牙不能正常工作的原因出在电源这得可能比较小,大多数 蓝牙模块电压范围比较大,像 HC-05 蓝牙模块一般在 3.3~6V,单片机电源都
GPIO_Configuration(); USART_Configuration(); GPIO_SetBits(GPIOB,GPIO_Pin_5); while(1) { UART_PutStr(USART1, hello world!); delay_ms(1000); } } void RCC_Configuration(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_G PIOA|RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB,ENABLE);
在这个范围内。不过不排除部分 3.3V 蓝牙,所以在连接电源前一定按照技术 手册,连接正确电源,并保证正负极不能接反。 3、蓝牙配置 设置决定了蓝牙模块自动连接工作后的角色,主角色(Master)会自动搜索配 对连接,从角色(Slave)只被动接受连接,不会主动搜索,回环角色(Loopback), 属于被动连接,接收远程蓝牙主设备数据并将数据原样返回给远程蓝牙主设 备。如果两个 HC05 模块要建立连接,其中一个必须设置为主角色,另外一 个可以设置为从角色或回环角色,如果一个 HC05 模块和电脑蓝牙或者手机 蓝牙通信,一般电脑或手机可以主动建立连接,所以 HC05 可以使用从角色, 出厂默认也是设置为从角色的。 4、AT 指令 在控制电平信号下,可以对蓝牙的一些特性参数进行查询课更改。 AT+XXX? //查询参数 XXX AT+XXX=mmm //设置参数 XXX 为 mmm 例如: 命令: AT+NAME?\r\n //查询蓝牙名称 返回:+NAME:ChunyuY19 //蓝牙名称为:ChunyuY19