蓝牙模块HC05
試驗(yàn)都通過:
- USB-TTL+藍(lán)牙模塊與手機(jī)藍(lán)牙通訊,測(cè)試通過,能夠互發(fā)數(shù)據(jù)并接收;
- STM32串口藍(lán)牙與手機(jī)藍(lán)牙通訊,測(cè)試通過;輸入1,LED亮,輸入2,LED滅,輸入其它字符,LED亮;
- STM32串口藍(lán)牙與PC藍(lán)牙通訊,測(cè)試通過;輸入1,LED亮,輸入2,LED滅,輸入其它字符,LED亮;
?
1. USB-TTL驅(qū)動(dòng)安裝,連接藍(lán)牙模塊
?
?
?
2. 藍(lán)牙模塊的調(diào)試
2.1 兩種工作模式:
HC-05藍(lán)牙串口通訊模塊具有兩種工作模式:命令響應(yīng)工作模式和自動(dòng)連接工作模式。在自動(dòng)連接工作模式下模塊又可分為主(Master)、從(Slave)和回環(huán)(Loopback)三種工作角色。
- 當(dāng)模塊處于自動(dòng)連接工作模式時(shí),將自動(dòng)根據(jù)事先設(shè)定的方式連接的數(shù)據(jù)傳輸;
- 當(dāng)模塊處于命令響應(yīng)工作模式時(shí)能執(zhí)行AT命令,用戶可向模塊發(fā)送各種AT 指令,為模塊設(shè)定控制參數(shù)或發(fā)布控制命令。
2.2 進(jìn)入命令響應(yīng)工作模式?
進(jìn)入命令響應(yīng)工作模式有兩種方法:
- 模塊上電,未配對(duì)情況下就是AT模式,波特率為模塊本身的波特率,默認(rèn):9600,發(fā)送一次AT指令時(shí)需要置高一次PIO11;
- PIO11 置高電平后,再給模塊上電,此時(shí)模塊進(jìn)入AT 模式,波特率固定為:38400,可以直接發(fā)送AT指令。
2.3 什么叫做置高一次PIO11?
在藍(lán)牙模塊中有一個(gè)小按鍵,按一下就置高一次PIO11。也就是說,第一種方法需要每發(fā)送一次AT指令按一次;而第二種方式是長(zhǎng)按的過程中上電,之后就無需再管了,直接發(fā)送AT命令即可。
需要注意一下,兩種進(jìn)入命令響應(yīng)工作模式的方式使用的波特率是不一樣的,建議使用第二種方式。
2.4 怎么區(qū)分進(jìn)了命令響應(yīng)工作模式呢?
在藍(lán)牙模塊上有燈,當(dāng)燈快閃的時(shí)候,就是自動(dòng)連接工作模式;當(dāng)燈慢閃的時(shí)候,就是命令響應(yīng)工作模式。
2.5 串口調(diào)試助手發(fā)送AT命令格式
串口軟件發(fā)送給HC-05藍(lán)牙模塊AT指令 ,必須嚴(yán)格按照格式發(fā)送才可以(即使看不到格式情況),否則返回錯(cuò)誤ERROR或者沒有反應(yīng),格式如下兩種:
1.AT+一個(gè)回車;
2.AT命令+勾選發(fā)送新行
2.6?AT命令
進(jìn)入到命令響應(yīng)工作模式之后,就可以使用串口調(diào)試助手進(jìn)行藍(lán)牙調(diào)試了。
首先有一點(diǎn),AT指令不區(qū)分大小寫,下面介紹常用的AT指令:
| 指令名 | 響應(yīng) | 含義 |
| AT | OK | 測(cè)試指令 |
| AT+RESET | OK | 模塊復(fù)位 |
| AT+VERSION? | +VERSION:<Param> OK | 獲得軟件版本號(hào) |
| AT+ORGL | OK | 恢復(fù)默認(rèn)狀態(tài) |
| AT+ADDR? | +ADDR:<Param> OK | 獲得藍(lán)牙模塊地址 |
| AT+NAME=<Param> | OK | 設(shè)置設(shè)備名稱 |
| AT+NAME? | +NAME:<Param> OK | 獲得設(shè)備名稱 |
| AT+PSWD=<Param> | OK | 設(shè)置模塊密碼 |
| AT+PSWD? | +PSWD:<Param> OK | 獲得模塊密碼 |
| AT+UART=<Param1>,<Param2>,<Param3>,輸入數(shù)據(jù)去掉尖括號(hào) | OK | 設(shè)置串口參數(shù) |
| AT+UART? | +UART:<Param1>,<Param2>,<Param3> OK | 獲得串口參數(shù) |
2.7?AT命令之設(shè)置串口
- AT+UART?:獲得串口參數(shù),串口的參數(shù)一共有三個(gè),波特率、停止位、檢驗(yàn)位。其取值如下:
| 參數(shù)名稱 | 取值 |
| 波特率 | 2400、4800、9600、19200、38400、5760、 115200、230400、460800、921600、1382400 |
| 停止位 | 0:1位 1:2位 |
| 校驗(yàn)位 | 0:NONE? 1:Odd? 2:Even |
設(shè)置藍(lán)牙串口的波特率:115200。之后的內(nèi)容,就會(huì)采用這個(gè)波特率來進(jìn)行通訊。
?
?
3. PC藍(lán)牙模塊與手機(jī)傳輸數(shù)據(jù)
3.1 藍(lán)牙模塊與USB-TTL轉(zhuǎn)換模塊連接,再連接到電腦上,進(jìn)入自動(dòng)連接工作模式,打開軟件野火的多功能調(diào)試助手fireTools或其它串口調(diào)試工具,在設(shè)置中選擇編碼為GB18030或UTF-8。
3.2 手機(jī)下載并打開“藍(lán)牙串口APP”,連接藍(lán)牙模塊,藍(lán)牙名HC05,配對(duì)碼1234,設(shè)置編碼與串口調(diào)試助手一致,在聊天界面下接收發(fā)送數(shù)據(jù)。
3.3 然后在電腦上的串口調(diào)試助手和手機(jī)的“藍(lán)牙串口APP”之間就可以相互傳輸了,互相發(fā)送漢字或字符串試驗(yàn)。偶爾出現(xiàn)亂碼,可能是我的USB-TTL-藍(lán)牙模塊的線太長(zhǎng)的原因,干擾導(dǎo)致。
4.?STM32藍(lán)牙模塊與電腦通訊
藍(lán)牙模塊上電,電腦控制面板搜索藍(lán)牙設(shè)備,密碼匹配,則電腦與透?jìng)髂K將建立起連接,如果以前沒有安裝過藍(lán)牙串口設(shè)備,則系統(tǒng)將自動(dòng)安裝驅(qū)動(dòng)并生成虛擬串口,設(shè)備管理器打開串口設(shè)置通信格式或者使用串口調(diào)試軟件進(jìn)行設(shè)置。打開這個(gè)端口的時(shí)候藍(lán)牙模塊的LED會(huì)由快閃變?yōu)殡p閃,這時(shí)只需要把藍(lán)牙模塊當(dāng)成是電腦的固定波特率的串口一樣使用即可,只不過它是無線的。
5.STM32藍(lán)牙模塊與手機(jī)通訊
實(shí)現(xiàn)功能:手機(jī)通過藍(lán)牙,向STM32單片機(jī)發(fā)送消息,STM32接收到消息之后原封不動(dòng)的返回給手機(jī),同時(shí)輸入1、2、其它字符控制LED燈。
連線:使用USART5進(jìn)行試驗(yàn),也就是說STM32選取PC12(TX)、PD2(RX)來和HC-05進(jìn)行連接,見下圖UART5;同時(shí)手機(jī)通過藍(lán)牙來和HC-05進(jìn)行連接。
原理:手機(jī)通過藍(lán)牙傳輸?shù)紿C-05上,再通過串口和STM32通信;而之前一般都是電腦上通過USB線轉(zhuǎn)串口的方式,通過串口和STM32通信。本質(zhì)上沒有區(qū)別的。
說白了,只是個(gè)藍(lán)牙轉(zhuǎn)串口的設(shè)備,只要知道串口怎么編程使用,就可以了,實(shí)現(xiàn)了所謂的透明傳輸。藍(lán)牙的相關(guān)一切都被封裝起來了,都不需要接觸到。
?
5. STM32控制程序
/********************************************************************************* @file main.c* @author fire* @version V1.0* @date 2013-xx-xx* @brief 測(cè)試led******************************************************************************* @attention** 實(shí)驗(yàn)平臺(tái):秉火 F103-霸道 STM32 開發(fā)板 * 論壇 :http://www.firebbs.cn* 淘寶 :http://firestm32.taobao.com********************************************************************************/ #include "stm32f10x.h" #include "bsp_led.h" #include "bsp_usart.h" #include "bsp_rccclkconfig.h"int main(void) { USART_Config();LED_GPIO_Config();HSE_SetSysClk( RCC_PLLMul_6 );/*********************藍(lán)牙串口輸入輸出、控制LED**********************************************/ printf( "藍(lán)牙串口輸入輸出、控制LED測(cè)試\n" );Usart_SendStr(DEBUG_USARTx, "請(qǐng)輸入1、2、3,觀察LED和返回值:");// Usart_SendByte(DEBUG_USARTx,'A'); // Usart_SendHalfWord(DEBUG_USARTx, 0xff56); // Usart_SendArray(DEBUG_USARTx, a,10);while (1){} } /*********************************************END OF FILE**********************/?
#include "bsp_usart.h"static void NVIC_Configuration(void) {NVIC_InitTypeDef NVIC_InitStructure;/* 嵌套向量中斷控制器組選擇 */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);/* 配置USART為中斷源 */NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;/* 搶斷優(yōu)先級(jí)*/NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;/* 子優(yōu)先級(jí) */NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;/* 使能中斷 */NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/* 初始化配置NVIC */NVIC_Init(&NVIC_InitStructure); }void USART_Config(void) {GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;// 打開串口GPIO的時(shí)鐘DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);// 打開串口外設(shè)的時(shí)鐘DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);// 將USART Tx的GPIO配置為推挽復(fù)用模式GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);// 將USART Rx的GPIO配置為浮空輸入模式GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);// 配置串口的工作參數(shù)// 配置波特率USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;// 配置 針數(shù)據(jù)字長(zhǎng)USART_InitStructure.USART_WordLength = USART_WordLength_8b;// 配置停止位USART_InitStructure.USART_StopBits = USART_StopBits_1;// 配置校驗(yàn)位USART_InitStructure.USART_Parity = USART_Parity_No ;// 配置硬件流控制USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;// 配置工作模式,收發(fā)一起USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;// 完成串口的初始化配置USART_Init(DEBUG_USARTx, &USART_InitStructure);// 串口中斷優(yōu)先級(jí)配置NVIC_Configuration();// 使能串口接收中斷USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE); // 使能串口USART_Cmd(DEBUG_USARTx, ENABLE); }/* 發(fā)送一個(gè)字節(jié) */ void Usart_SendByte(USART_TypeDef* pUSARTx, uint8_t data) {USART_SendData(pUSARTx, data);while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET ); }/* 發(fā)送兩個(gè)字節(jié)的數(shù)據(jù) */ void Usart_SendHalfWord(USART_TypeDef* pUSARTx, uint16_t data) {uint8_t temp_h,temp_l;temp_h = (data&0xff00) >> 8 ;temp_l = data&0xff;USART_SendData(pUSARTx, temp_h);while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET );USART_SendData(pUSARTx, temp_l);while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET ); }/* 發(fā)送8位數(shù)據(jù)的數(shù)組 */ void Usart_SendArray(USART_TypeDef* pUSARTx, uint8_t *array,uint8_t num) {uint8_t i;for( i=0; i<num; i++ ){Usart_SendByte(pUSARTx, array[i]);}while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TC) == RESET ); }/* 發(fā)送字符串 */ void Usart_SendStr(USART_TypeDef* pUSARTx, uint8_t *str) {uint8_t i=0;do{Usart_SendByte(pUSARTx, *(str+i));i++;}while(*(str+i) != '\0');while( USART_GetFlagStatus(pUSARTx, USART_FLAG_TC) == RESET ); }///重定向c庫函數(shù)printf到串口,重定向后可使用printf函數(shù) int fputc(int ch, FILE *f) {/* 發(fā)送一個(gè)字節(jié)數(shù)據(jù)到串口 */USART_SendData(DEBUG_USARTx, (uint8_t) ch);/* 等待發(fā)送完畢 */while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET); return (ch); }///重定向c庫函數(shù)scanf到串口,重寫向后可使用scanf、getchar等函數(shù) int fgetc(FILE *f) {/* 等待串口輸入數(shù)據(jù) */while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET);return (int)USART_ReceiveData(DEBUG_USARTx); } #ifndef __BSP_USART_H #define __BSP_USART_H#include "stm32f10x.h" #include <stdio.h>#define DEBUG_USART1 0 #define DEBUG_USART2 0 #define DEBUG_USART3 0 #define DEBUG_USART4 0 #define DEBUG_USART5 1#if DEBUG_USART1 // 串口1-USART1 #define DEBUG_USARTx USART1 #define DEBUG_USART_CLK RCC_APB2Periph_USART1 #define DEBUG_USART_APBxClkCmd RCC_APB2PeriphClockCmd #define DEBUG_USART_BAUDRATE 115200// USART GPIO 引腳宏定義 #define DEBUG_USART_GPIO_CLK (RCC_APB2Periph_GPIOA) #define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd#define DEBUG_USART_TX_GPIO_PORT GPIOA #define DEBUG_USART_TX_GPIO_PIN GPIO_Pin_9 #define DEBUG_USART_RX_GPIO_PORT GPIOA #define DEBUG_USART_RX_GPIO_PIN GPIO_Pin_10#define DEBUG_USART_IRQ USART1_IRQn #define DEBUG_USART_IRQHandler USART1_IRQHandler#elif DEBUG_USART2 //串口2-USART2 #define DEBUG_USARTx USART2 #define DEBUG_USART_CLK RCC_APB1Periph_USART2 #define DEBUG_USART_APBxClkCmd RCC_APB1PeriphClockCmd #define DEBUG_USART_BAUDRATE 115200// USART GPIO 引腳宏定義 #define DEBUG_USART_GPIO_CLK (RCC_APB2Periph_GPIOA) #define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd#define DEBUG_USART_TX_GPIO_PORT GPIOA #define DEBUG_USART_TX_GPIO_PIN GPIO_Pin_2 #define DEBUG_USART_RX_GPIO_PORT GPIOA #define DEBUG_USART_RX_GPIO_PIN GPIO_Pin_3#define DEBUG_USART_IRQ USART2_IRQn #define DEBUG_USART_IRQHandler USART2_IRQHandler#elif DEBUG_USART3 //串口3-USART3 #define DEBUG_USARTx USART3 #define DEBUG_USART_CLK RCC_APB1Periph_USART3 #define DEBUG_USART_APBxClkCmd RCC_APB1PeriphClockCmd #define DEBUG_USART_BAUDRATE 115200// USART GPIO 引腳宏定義 #define DEBUG_USART_GPIO_CLK (RCC_APB2Periph_GPIOB) #define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd#define DEBUG_USART_TX_GPIO_PORT GPIOB #define DEBUG_USART_TX_GPIO_PIN GPIO_Pin_10 #define DEBUG_USART_RX_GPIO_PORT GPIOB #define DEBUG_USART_RX_GPIO_PIN GPIO_Pin_11#define DEBUG_USART_IRQ USART3_IRQn #define DEBUG_USART_IRQHandler USART3_IRQHandler#elif DEBUG_USART4 //串口4-UART4 #define DEBUG_USARTx UART4 #define DEBUG_USART_CLK RCC_APB1Periph_UART4 #define DEBUG_USART_APBxClkCmd RCC_APB1PeriphClockCmd #define DEBUG_USART_BAUDRATE 115200// USART GPIO 引腳宏定義 #define DEBUG_USART_GPIO_CLK (RCC_APB2Periph_GPIOC) #define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd#define DEBUG_USART_TX_GPIO_PORT GPIOC #define DEBUG_USART_TX_GPIO_PIN GPIO_Pin_10 #define DEBUG_USART_RX_GPIO_PORT GPIOC #define DEBUG_USART_RX_GPIO_PIN GPIO_Pin_11#define DEBUG_USART_IRQ UART4_IRQn #define DEBUG_USART_IRQHandler UART4_IRQHandler#elif DEBUG_USART5 //串口5-UART5 #define DEBUG_USARTx UART5 #define DEBUG_USART_CLK RCC_APB1Periph_UART5 #define DEBUG_USART_APBxClkCmd RCC_APB1PeriphClockCmd #define DEBUG_USART_BAUDRATE 115200// USART GPIO 引腳宏定義 #define DEBUG_USART_GPIO_CLK (RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD) #define DEBUG_USART_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd#define DEBUG_USART_TX_GPIO_PORT GPIOC #define DEBUG_USART_TX_GPIO_PIN GPIO_Pin_12 #define DEBUG_USART_RX_GPIO_PORT GPIOD #define DEBUG_USART_RX_GPIO_PIN GPIO_Pin_2#define DEBUG_USART_IRQ UART5_IRQn #define DEBUG_USART_IRQHandler UART5_IRQHandler#endifvoid USART_Config(void); void Usart_SendByte(USART_TypeDef* pUSARTx, uint8_t data); void Usart_SendHalfWord(USART_TypeDef* pUSARTx, uint16_t data); void Usart_SendArray(USART_TypeDef* pUSARTx, uint8_t *array,uint8_t num); void Usart_SendStr(USART_TypeDef* pUSARTx, uint8_t *str); #endif /* __BSP_USART_H */ //晶振8M改為12M #include "bsp_rccclkconfig.h"void HSE_SetSysClk( uint32_t RCC_PLLMul_x ) {ErrorStatus HSEStatus;// 把RCC 寄存器復(fù)位成復(fù)位值RCC_DeInit(); // 使能 HSE RCC_HSEConfig(RCC_HSE_ON);HSEStatus = RCC_WaitForHSEStartUp();if( HSEStatus == SUCCESS ){// 使能預(yù)取指FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);FLASH_SetLatency(FLASH_Latency_2);RCC_HCLKConfig(RCC_SYSCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2);RCC_PCLK2Config(RCC_HCLK_Div1);// 配置 PLLCLK = HSE * RCC_PLLMul_xRCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_x);// 使能PLLRCC_PLLCmd(ENABLE);// 等待PLL穩(wěn)定while( RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET );// 選擇系統(tǒng)時(shí)鐘RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);while( RCC_GetSYSCLKSource() != 0x08 );}else{/* 如果HSE 啟動(dòng)失敗,用戶可以在這里添加處理錯(cuò)誤的代碼 */} }void HSI_SetSysClk( uint32_t RCC_PLLMul_x ) {__IO uint32_t HSIStatus = 0;// 把RCC 寄存器復(fù)位成復(fù)位值RCC_DeInit(); // 使能 HSI RCC_HSICmd(ENABLE);HSIStatus = RCC->CR & RCC_CR_HSIRDY;if( HSIStatus == RCC_CR_HSIRDY ){// 使能預(yù)取指FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);FLASH_SetLatency(FLASH_Latency_2);RCC_HCLKConfig(RCC_SYSCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div2);RCC_PCLK2Config(RCC_HCLK_Div1);// 配置 PLLCLK = HSE * RCC_PLLMul_xRCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_x);// 使能PLLRCC_PLLCmd(ENABLE);// 等待PLL穩(wěn)定while( RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET );// 選擇系統(tǒng)時(shí)鐘RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);while( RCC_GetSYSCLKSource() != 0x08 );}else{/* 如果HSI 啟動(dòng)失敗,用戶可以在這里添加處理錯(cuò)誤的代碼 */} }void MCO_GPIO_Config(void) {GPIO_InitTypeDef GPIO_InitStructure;// 開啟GPIOA的時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// 選擇GPIO8引腳GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//設(shè)置為復(fù)用功能推挽輸出GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//設(shè)置IO的翻轉(zhuǎn)速率為50MGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;// 初始化GPIOA8GPIO_Init(GPIOA, &GPIO_InitStructure);} #ifndef __BSP_RCCCLKCONFIG_H #define __BSP_RCCCLKCONFIG_H#include "stm32f10x.h"void HSE_SetSysClk( uint32_t RCC_PLLMul_x ); void MCO_GPIO_Config(void); void HSI_SetSysClk( uint32_t RCC_PLLMul_x ); #endif /*__BSP_RCCCLKCONFIG_H */ #include "stm32f10x_it.h" #include "bsp_usart.h" #include "bsp_led.h"// 串口中斷服務(wù)函數(shù) void DEBUG_USART_IRQHandler(void) {uint8_t ucTemp;if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET){ ucTemp = USART_ReceiveData(DEBUG_USARTx);//只能使用中斷作為輸入,不能使用ch = getchar(),藍(lán)牙串口手機(jī)軟件不支持。switch(ucTemp){case '1': LED1(ON);break;case '2': LED1(OFF);break;default: LED1(ON);break;} USART_SendData(DEBUG_USARTx,ucTemp); } }?
6. 藍(lán)牙其它知識(shí)
6.1產(chǎn)品特性:
1、核心模塊使用HC-05從模塊,引出接口包括VCC,GND,TXD,RXD,EN引腳、藍(lán)牙連接狀態(tài)引出腳(STATE),未連接輸出低,連接后輸出高(應(yīng)該是指通信后輸出高);
2、led指示藍(lán)牙連接狀態(tài),快閃表示沒有藍(lán)牙連接,慢閃表示進(jìn)入AT模式,雙閃表示藍(lán)牙已連接并打開了端口
3、底板設(shè)置防反接二極管,帶3.3V LDO,輸入電壓3.6~6V,未配對(duì)時(shí)電流約30mA,配對(duì)后約10mA,輸入電壓禁止超過7V!
4、接口電平3.3V,可以直接連接各種單片機(jī)(51,AVR,PIC,ARM,MSP430等),5V單片機(jī)也可直接連接,無需MAX232也不能經(jīng)過MAX232!
5、空曠地有效距離10米(功率等級(jí)為CLASS 2),超過10米也是可能的,但不對(duì)此距離的連接質(zhì)量做保證
6、配對(duì)以后當(dāng)全雙工串口使用,無需了解任何藍(lán)牙協(xié)議,支持8位數(shù)據(jù)位、1位停止位、可設(shè)置奇偶校驗(yàn)的通信格式,這也是最常用的通信格式,不支持其他格式。
7、可以通過拉高34腳進(jìn)入AT命令模式設(shè)置參數(shù)和查詢信息
8、體積小巧(3.57cm*1.52cm),工廠貼片生產(chǎn),保證貼片質(zhì)量。并套透明熱縮管,防塵美觀,且有一定的防靜電能力。
9、可通過AT命令切換為主機(jī)或者從機(jī)模式,可通過AT命令連接指定設(shè)備
10、支持從4800bps~1382400bps間的標(biāo)準(zhǔn)波特率
6.2 藍(lán)牙三種角色:
AT+ROLE:該指令用于選擇HC05藍(lán)牙模塊的角色,總共有三種角色:master,slave,loop-slave.
AT+ROLE=0\r\n ?將藍(lán)牙模塊設(shè)置成從角色,只能被動(dòng)連接
AT+ROLE=1\r\n ?將藍(lán)牙模塊設(shè)置成主角色,可以查詢周圍SPP藍(lán)牙從設(shè)備,并發(fā)送連接
AT+ROLE=2\r\n ?將藍(lán)牙模塊設(shè)置成回環(huán)角色,被動(dòng)連接,接收遠(yuǎn)程藍(lán)牙模塊主設(shè)備數(shù)據(jù)并將數(shù)據(jù)原樣返回給遠(yuǎn)程藍(lán)牙設(shè)備
這幾個(gè)指令用在不同的場(chǎng)合,當(dāng)設(shè)置藍(lán)牙模塊為從設(shè)備的時(shí)候,可以用手機(jī)的相關(guān)藍(lán)牙裝串口軟件連接該設(shè)備,進(jìn)行通訊;當(dāng)設(shè)置成主角色的時(shí)候,可以搜索周遭的藍(lán)牙從設(shè)備,并連接,這種模式在應(yīng)用中很常用;回環(huán)角色很多時(shí)候都是用來做測(cè)試用的。
設(shè)置為主模塊的步驟:
1、PIO11 置高。
2、上電,模塊進(jìn)入AT 命令響應(yīng)狀態(tài)。
3、超級(jí)終端或其他串口工具,設(shè)置波特率38400,數(shù)據(jù)位8 位,停止位1 位,無校驗(yàn)位,無流控制。
4、串口發(fā)送字符“AT+ROLE=1\r\n”,成功返回“OK\r\n”,其中\(zhòng)r\n 為回車換行。
5、PIO 置低,重新上電,模塊為主模塊,自動(dòng)搜索從模塊,建立連接。
?
6.3?藍(lán)牙測(cè)試軟件
USB-TTL連接藍(lán)牙模塊HC-05后,可一鍵獲取和設(shè)置模塊信息
? ? ?
?
總結(jié)
- 上一篇: 速达5000进销存PDA条码打印扫码开单
- 下一篇: 电子计算机中专考试试题,职业中专考试试题