当前位置: 首页 > article >正文

蓝牙模块(BT04/HC05)

目录

一、介绍

二、模块原理

1.原理图与外形尺寸

2.引脚描述

3.蓝牙模块基础AT指令介绍

三、程序设计

usart3.h文件

usart3.c文件

四、实验效果 

五、资料获取

项目分享


一、介绍

        BT04A是一款蓝牙低功耗(Bluetooth Low Energy, BLE)模块,它主要用于物联网(IoT)设备之间的无线通信,特别是那些需要长电池寿命的应用场景。此模块支持蓝牙4.0标准,能够提供高速的数据传输速率以及低功耗特性,适合于穿戴设备、智能家居控制、健康监测等应用。

以下是BT04A蓝牙模块的参数:

型号

BT04-A

工作电压

3.3~5V

蓝牙模式

从模式

最大距离

10M

配对码

1234

串口参数

9600810

工作频段

2.4 GHz ISM频段

哔哩哔哩视频链接:

蓝牙模块(BT04 HC05)

(资料分享见文末) 

二、模块原理

1.原理图与外形尺寸

2.引脚描述

引脚名称

描述

RXD

信息接收端

TXD

信息发送端

GND

电源负极

VCC

电源正极

用于指示蓝牙模块所处状态,LED灯闪烁方式与蓝牙模块状态对应见表

3.蓝牙模块基础AT指令介绍

注意:发AT指令时必须回车换行,只能在模块未连接状态下才能生效。

三、程序设计

使用STM32F103C8T6通过串口调试助手(APP)控制LED亮灭

BT04_TX

PB11

BT04_RX

PB10

LED

PA0

串口

串口1

main.c文件

#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
#include "delay.h"
#include "oled.h"
#include "usart3.h"

/*****************辰哥单片机设计******************
											STM32
 * 项目			:	蓝牙模块通信实验                     
 * 版本			: V1.0
 * 日期			: 2024.10.2
 * MCU			:	STM32F103C8T6
 * 接口			:	参看usart3.h							
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥 

**********************BEGIN***********************/

u8 dakai;
u8 Flag_dakai;

int main(void)
{ 
	
  SystemInit();//配置系统时钟为72M	
	delay_init(72);
	LED_Init();
	LED_On();
	USART1_Config();
	USART3_Config();

	printf("Start \n");
	delay_ms(1000);

  while (1)
  {
		 if(dakai==1&&Flag_dakai==0)
      {
				LED_On();
        Flag_dakai=1;
				printf("1 \n");
      }
      if(dakai==0&&Flag_dakai==1)
      {
				LED_Off();
        Flag_dakai=0;
				printf("0 \n");
      }
			
  }
}

usart3.h文件

#ifndef __USART3_H
#define __USART3_H

#include "stm32f10x.h"                  // Device header
#include "oled.h"
#include "usart.h"

/*****************辰哥单片机设计******************
											STM32
 * 项目			:	蓝牙模块通信实验                     
 * 版本			: V1.0
 * 日期			: 2024.10.2
 * MCU			:	STM32F103C8T6
 * 接口			:	参串口3						
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥 

**********************BEGIN***********************/


void USART3_Config(void); //串口 3 初始化



#endif

usart3.c文件

#include "usart3.h"	

/*****************辰哥单片机设计******************
											STM32
 * 项目			:	蓝牙模块通信实验                     
 * 版本			: V1.0
 * 日期			: 2024.10.2
 * MCU			:	STM32F103C8T6
 * 接口			:	串口3						
 * BILIBILI	:	辰哥单片机设计
 * CSDN			:	辰哥单片机设计
 * 作者			:	辰哥 

**********************BEGIN***********************/

//串口1中断服务程序
	//初始化 IO 串口 3
	//pclk1:PCLK1 时钟频率(Mhz)
	//bound:波特率  
void USART3_Config()
{ 
			NVIC_InitTypeDef NVIC_InitStructure;
		GPIO_InitTypeDef GPIO_InitStructure;
		USART_InitTypeDef USART_InitStructure;
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//GPIOB 时钟
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //串口 3 时钟使 USART_DeInit(USART3); //复位串口 3
		//USART3_TX PB10
		GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10; //PB10
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
		GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化 PB10
		
		//USART3_RX PB11
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
		GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //浮空输入
		GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化 PB11
	
		USART_InitStructure.USART_BaudRate= 9600; //波特率设
		USART_InitStructure.USART_WordLength=USART_WordLength_8b; //8 位数据格
		USART_InitStructure.USART_StopBits = USART_StopBits_1; //一个停止
		USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验
		USART_InitStructure.USART_HardwareFlowControl=
		USART_HardwareFlowControl_None;
		//无硬件数据流
		USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	  //收发模式
	  USART_Init(USART3, &USART_InitStructure); //初始化串口 3
	  USART_Cmd(USART3, ENABLE);//使能串口
	  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//使能接收中断 
	  //设置中断优先级
	  NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
	  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//抢占优先级 2
	  NVIC_InitStructure.NVIC_IRQChannelSubPriority =0; //子优先级 3
	  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道使能
	  NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化 NVIC 寄存器
}
extern u8 Flag_dakai,dakai;

void USART3_IRQHandler(void)
{ u8 Res; 
  if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据
  { 
		Res =USART_ReceiveData(USART3);
		if(Res=='1')
		{
			dakai=1;
			Res='5';
		}			
		if(Res=='2')
		{
			dakai=0;
			Res='5';
		}						
  } 
} 

四、实验效果 

五、资料获取

项目分享


http://www.kler.cn/news/339841.html

相关文章:

  • 点评项目-4-隐藏敏感信息、使用 redis 优化登录业务
  • sqli-labs less-12 post注入
  • 【C++篇】继承之巅:超越法则束缚,领略面向对象的至臻智慧
  • 金融风险管理中的量化模型与算法应用
  • i18n多语言项目批量翻译工具(支持84种语言)
  • 2024年9月30日--10月6日(ue5肉鸽结束,20小时,共2851小时)
  • 网络防火墙的主要功能及其弊端
  • 千寻位置大气增强服务为高效农耕作业保驾护航
  • 需求7———通过一个简单的小需求来理清修改后端的思路
  • var let const 之间的区别
  • Mybatis-plus做了什么
  • 一分钟掌握 Java18 新特性
  • uni-app 如何全局设置,获取app.vue里面的值
  • 房屋水电费:重新布局,重构JS代码
  • Databinding(kotlin)
  • qt for Android程序编译通过,运行闪退
  • 【D3.js in Action 3 精译_031】3.5.2 DIY实战:在 Observable 平台实现带数据标签的 D3 条形图并改造单元测试模块
  • R语言绘制折线图
  • 深入剖析递归算法:原理、特点、应用与优化策略
  • redis高级(面试题二)