本文主要介绍基于STM32F103C8T6和蓝牙模块实现的交互控制

简介

蓝牙(Bluetooth)是一种用于无线通信的技术标准,允许设备在短距离内进行数据交换和通信。它是由爱立信(Ericsson)公司在1994年推出的,以取代传统的有线连接方式,使设备之间能够实现低功耗、低成本的数据传输和通信。

蓝牙技术的特点
无线通信:蓝牙允许设备在近距离内(通常是10米左右,具体取决于设备版本)进行通信,无需使用电缆或其他物理连接。
低功耗:蓝牙技术被设计为低功耗的通信方式,这使得它在移动设备上广泛使用,如智能手机、平板电脑、蓝牙耳机等。
多设备连接:蓝牙允许一个主设备(如手机)同时连接多个从设备(如蓝牙耳机、蓝牙音箱等),实现更灵活的数据传输和通信。
通用性:蓝牙技术在许多设备和应用中得到广泛应用,例如无线耳机、键盘、鼠标、汽车蓝牙连接、智能家居设备等。
安全性:蓝牙技术在不断发展和改进中,以提高其安全性,以防止未经授权的访问和数据泄露。
蓝牙技术在不同的版本中有不同的特性和功能,从经典蓝牙(Bluetooth Classic)到低功耗蓝牙(Bluetooth Low Energy,简称BLE),每个版本都针对不同的应用场景和需求。

常见的蓝牙模块
(1)HC-05/HC-06:
HC-05和HC-06是广泛使用的经典蓝牙模块,常用于与单片机(如Arduino)进行无线通信。
它们基于蓝牙2.0标准,支持串口通信(UART)协议,使得与单片机的连接和数据交换相对简单。
HC-05可作为主设备或从设备,支持蓝牙SPP(串口通信)和AT命令模式。
HC-06通常作为从设备,仅支持蓝牙SPP模式。
它们具有基本的通信范围,通常在10米左右。

(2)HM-10/CC2541:
HM-10和CC2541是低功耗蓝牙(BLE)模块,适用于物联网(IoT)设备和传感器网络。
它们基于蓝牙4.0标准,具有低功耗和短距离通信的特点。
它们支持BLE通信协议,如GATT(通用属性配置文件)和ATT(属性协议),用于数据传输和连接管理。
HM-10具有较大的功能集,包括主设备和从设备模式,而CC2541主要作为从设备。
它们通常用于连接和控制传感器、智能家居设备等。

(3)RN42/RN52:
RN42和RN52是经典蓝牙模块,由Microchip(以前是Roving Networks)生产。
它们基于蓝牙2.1+EDR标准,提供了丰富的功能和易于使用的接口。
这些模块支持串口通信(UART)协议,具有较大的通信范围(通常在30米以上)。
它们适用于各种应用,如音频传输、数据通信和蓝牙配对。
RN52还提供了额外的音频功能,如立体声音频传输和音频配置选项。

(4)ESP32:
ESP32是一款强大的Wi-Fi和蓝牙组合模块,由Espressif Systems开发。
它集成了双核处理器、Wi-Fi、蓝牙、低功耗技术和丰富的外设接口。
ESP32支持蓝牙经典和低功耗蓝牙(BLE),具有较大的灵活性和功能性。
它广泛应用于物联网(IoT)应用、嵌入式系统和智能设备开发。

综上,本文主要介绍基于HC-05和STM32F103C8T6的蓝牙无线控制

接线

将HC-05模块的VCC引脚连接到STM32的3.3V电源引脚,GND引脚连接到STM32的地引脚。
将HC-05模块的TXD引脚连接到STM32的一个UART接收引脚(例如USART1_RX),RXD引脚连接到STM32的一个UART发送引脚(例如USART1_TX)。
如果需要进行模块的配置或进入AT命令模式,可以将HC-05模块的EN引脚连接到STM32的一个GPIO引脚,并在代码中控制该引脚的状态。
本示例中管脚连接状态如下所示:

STM32F103C8T6 蓝牙模块
VCC VCC
GND GND
A2 RXD
A3 TXD

程序示例

串口UART初始化函数

void My_USART2_Init(void)  
{  
    GPIO_InitTypeDef GPIO_InitStrue;  
    USART_InitTypeDef USART_InitStrue;  
    NVIC_InitTypeDef NVIC_InitStrue;  
      
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIO端口使能  
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//串口端口使能  
      
	
	//实际使用的是这俩IO口
    GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;  
    GPIO_InitStrue.GPIO_Pin=GPIO_Pin_2;        //TXD
    GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;  
    GPIO_Init(GPIOA,&GPIO_InitStrue);  
      
    GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;  
    GPIO_InitStrue.GPIO_Pin=GPIO_Pin_3;         //RXD
    GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;  
    GPIO_Init(GPIOA,&GPIO_InitStrue);  
      
    USART_InitStrue.USART_BaudRate=9600;  
    USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;  
    USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;  
    USART_InitStrue.USART_Parity=USART_Parity_No;  
    USART_InitStrue.USART_StopBits=USART_StopBits_1;  
    USART_InitStrue.USART_WordLength=USART_WordLength_8b;  
      
    USART_Init(USART2,&USART_InitStrue);
      
    USART_Cmd(USART2,ENABLE);					//使能串口2  
      
    USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//开启接收中断  
      
    NVIC_InitStrue.NVIC_IRQChannel=USART2_IRQn;  
    NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;  
    NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=0;  
    NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;  
    NVIC_Init(&NVIC_InitStrue);      
}  

主函数中关于蓝牙点灯和关灯的操作函数

   	while(1)
	{		
		if(res=='1')
              {
			   Led_On(LED1);
			  //TIM_SetCompare2(TIM3,175);
			  delay_ms(1000);}
			  
			if(res=='2')
              {
			   Led_Off(LED1);
			  //TIM_SetCompare2(TIM3,180);
				  delay_ms(1000);}			  			
	}

示例效果

首先手机中装的蓝牙APP是如下SPP蓝牙串口助手,可支持命令聊天及键盘模式等

其中,接收命令是“1”时,LED点亮

if(res=='1')
              {
			   Led_On(LED1);
			  //TIM_SetCompare2(TIM3,175);
			  delay_ms(1000);}

接收命令是“2”时,LED灯灭

if(res=='2')
              {
			   Led_Off(LED1);
			  //TIM_SetCompare2(TIM3,180);
				  delay_ms(1000);}	

具体指令可以在代码中修改,也可以使用键盘模式控制,如下所示:

附完整资源链接

链接:https://pan.baidu.com/s/1o-lnlWjCYFTDZIvoJBs-iQ
提取码:4wh6

物联沃分享整理
物联沃-IOTWORD物联网 » STM32蓝牙通信实战指南

发表评论