基于蓝牙模块HC05的手机控制灯开关的小项目
(第一次发文章,如果有问题请轻喷,谢谢!)
本人使用的蓝牙模块是在优信电子购买的HC05蓝牙模块JDY-31,刚开始想要参照正点原子的HC05模块教程去编写,但感觉之前没怎么了解过他家的编写思维,代码看起来很乱,所以就自己写了一个,结果半天发不出去信息,最后发现是自己的串口代码移植过来的时候配置时忘记把串口1改成串口2了.。。。
其实这款蓝牙模块的使用非常简单,只要你会配置串口1的相关函数,把他的函数拿过来,直接把串口1改成串口2就行,该蓝牙模块有VCC,GND,RXD, TXD,STATE, EN六个引脚,EN是浮空的,所以不用接线,state接不接都可以(所以我也不知道他有啥用,直接搞成四个脚不是更节省成本?)
以下是函数,如有问题欢迎指正
HC05相关函数
/***********************************************
*函数名 :usart2_init
*函数功能 :串口1初始化配置函数
*函数参数 :u32 baud
*函数返回值:无
*函数描述 :PA2-------Tx
PA3------Rx
************************************************/
void usart2_init(void)
{
/*IO控制器配置*/
/*1、端口时钟使能*/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟
/*2、创建一个端口配置结构体*/
GPIO_InitTypeDef GPIO_InitStruct = {0};//清零
/*3、设置输出的端口*/
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;//配置PA2/3
/*4、端口模式配置*/
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//配置为复用模式
/*5、端口输出类型配置*/
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//配置为推挽类型
/*6、端口上下拉配置*/
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//配置为无上下拉
/*7、端口输出速度配置*/
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//50M输出速度
/*8、使用初始化函数配置*/
GPIO_Init(GPIOA, &GPIO_InitStruct);
/*9、复用功能配置*/
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2);
/*串口控制器配置*/
/*1、串口2时钟使能*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
/*2、创建一个端口配置结构体*/
USART_InitTypeDef USART_InitStruct = {0};//清零
/*3、设置波特率*/
USART_InitStruct.USART_BaudRate = 9600;
/*4、硬件流设置*/
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件流
/*5、模式设置*/
USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//发送接收
/*6、奇偶校验设置*/
USART_InitStruct.USART_Parity = USART_Parity_No;//无奇偶校验
/*7、停止位设置*/
USART_InitStruct.USART_StopBits = USART_StopBits_1;//一个停止位
/*8、字节长度设置*/
USART_InitStruct.USART_WordLength = USART_WordLength_8b;//8个字长
/*9、使用初始化函数配置*/
USART_Init(USART2, &USART_InitStruct);
/*10、中断使能*/
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//接收中断使能
USART_ITConfig(USART2, USART_IT_IDLE, ENABLE);//空闲中断使能
/*NVIC控制器配置*/
/*1、优先级分组*/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//优先级分组
/*2、创建一个端口配置结构体*/
NVIC_InitTypeDef NVIC_InitStruct = {0};
/*3、中断源设置*/
NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQn;
/*4、响应通道使能*/
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
/*5、设置抢占优先级级别值*/
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
/*6、设置响应优先级级别值*/
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
/*7、使用初始化函数配置*/
NVIC_Init(&NVIC_InitStruct);
//串口使能
USART_Cmd(USART2, ENABLE);
}
/***********************************************
*函数名 :hc05_init
*函数功能 :串口1初始化配置函数
*函数参数 :u32 baud
*函数返回值:无
*函数描述 :PA4——STATE
************************************************/
void hc05_init(void)
{
usart2_init();
}
/***********************************************
*函数名 :usart2_send_byte
*函数功能 :串口2发送一个字节函数
*函数参数 :u8 data
*函数返回值:无
*函数描述 :
***********************************************/
void usart2_send_byte(u8 data)
{
//等待上一位发送完成
while(!USART_GetFlagStatus(USART2, USART_FLAG_TC ));//发送完成标志位为0
USART_SendData(USART2, data);
}
/***********************************************
*函数名 :usart2_send_str
*函数功能 :串口2发送多字节函数
*函数参数 :u8 *str
*函数返回值:无
*函数描述 :
***********************************************/
void usart2_send_str(u8 *str)
{
while(*str != '\0')
{
usart2_send_byte(*str);
str++;
}
}
/*****************************************************
函数功能:hc05接收数据
函数形参:void
函数返回值:void
函数说明:
*****************************************************/
u8 usart2_rec_buff[20];
void USART2_IRQHandler(void)
{
static u8 i = 0;
//判断是接收中断
if(USART_GetITStatus(USART2, USART_IT_RXNE))
{
//清除中断标志位
USART_GetITStatus(USART2, USART_IT_RXNE);
//紧急事件
usart2_rec_buff[i] = USART_ReceiveData(USART2);
i++;
}
//判断是空闲中断
if(USART_GetITStatus(USART2, USART_IT_IDLE))
{
//清除中断标志位
USART2->SR;
USART2->DR;
//紧急事件
usart2_rec_buff[i] = '\0';
i = 0;//清零
printf("接收到的字符串是%s\r\n", usart2_rec_buff);
}
}
LED灯相关配置函数
/**********************************
*函数名 :led_init
*函数功能 :LED所用IO初始化配置
*函数参数 :无
*函数返回值:无
*函数描述 :PB8——LED_R/LED4
P89——LED_G/LED3
**********************************/
void led_init(void)
{
/*1、端口时钟使能*/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOC时钟
/*2、创建一个端口配置结构体*/
GPIO_InitTypeDef GPIO_InitStruct = {0};//清零
/*3、设置输出的端口*/
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;//配置PC4/5/6/7
/*4、端口模式配置*/
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//配置为输出模式
/*5、端口输出类型配置*/
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//配置为推挽输出类型
/*6、端口上下拉配置*/
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//配置为无上下拉
/*7、端口输出速度配置*/
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;//2M输出速度
/*8、使用初始化函数配置*/
GPIO_Init(GPIOC, &GPIO_InitStruct);
/*9、配置输出数据寄存器*/
GPIO_SetBits(GPIOC, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);//配置为高电平,关灯
}
/********************main函数***********************************/
int main()
{
// u8 key = 0;
NVIC_PriorityGroupConfig( NVIC_PriorityGroup_2); //优先级分组
led_init();//LED初始化
key_init();//按键初始化
usart1_init(9600);串口一初始化
hc05_init();//HC05初始化,其实就是串口2初始化
while(1)
{
if(strcmp(usart2_rec_buff,"on")==0)//接收的字符串有on就开灯
{
LED1_ON;//这个是我自己定义的宏GPIO_ResetBits(GPIOC, GPIO_Pin_4)
}
if(strcmp(usart2_rec_buff,"off")==0)//接收的字符串有off就关灯
{
LED1_OFF;//这个是我自己定义的宏GPIO_SetBits(GPIOC, GPIO_Pin_4)
}
}
}
下载到板子后,下载厂家给你的蓝牙apk到手机上,搜索蓝牙名字连接,就可以收发数据了,发送数据就使用一下串口发送字符串函数就行,在这个基础上添加一些传感器配置,也可以发到手机上
基于蓝牙模块HC05的手机控制灯开关的小项目相关推荐
- 20220727使用汇承科技的蓝牙模块HC-05配对手机进行蓝牙串口的演示
20220727使用汇承科技的蓝牙模块HC-05配对手机进行蓝牙串口的演示 2022/7/27 18:55 Android11:摩托罗拉 motorola edge s 6GB+128GB 骁龙870 ...
- 蓝牙模块hc05原理图_使用步进电机和Android App的蓝牙控制迷你升降机
背景知识视频教程 使用App Inventor创建Android应用viadean.com Arduino微控制器:学习Arduino制作项目 - 国外课栈viadean.com Arduino ...
- 蓝牙模块HC-05的调试(利用LED灯来检验信号是否能正常传输)
蓝牙模块HC-05的调试(利用LED灯来检验信号是否能正常传输) by hasyu 我所用到的硬件 BlueTooth HC-05,arduino 2560(uno也行吧) 电脑 手机 硬件的连接 不 ...
- 学习记录--蓝牙模块HC05(串口收发)
主要实现:PC上位机与蓝牙之间的通信(收发) 一,HC05模式等一系列设置 参考博客: (11条消息) stm32之蓝牙模块HC-05使用_一剃解千愁的博客-CSDN博客_stm32蓝牙模块的使用 ( ...
- 基于蓝牙与Android设备的控制系统设计
Android操作系统是Google基于开源的Linux操作系统开发的移动操作平台,由操作系统.中间件.用户界面和应用软件组成,是专门为移动终端打造的开放和完整的移动操作系统.Android软件平台包 ...
- STM32系列——手把手教你蓝牙模块HC05、HC06的使用,重在“用起来”(HAL库)
前言 不论是HC05还是HC06,我们用到的都是蓝牙模块的透传功能,只需要用到4个引脚:RXD.TXD.VCC(5V).GND. HC-05的使用 1.HC-05有6个引脚,但是我们只用到4个. 2. ...
- 基于蓝牙模块ROK101 007/1的小区监控系统设计
基于蓝牙模块ROK101 007/1的小区监控系统设计 引言 蓝牙是一种正在发展中的短距离无线时分多址通信技术(也叫个域网技术),这是一种直接面对个人和商务的无线应用连接技术,并以其低成本.低功耗.高 ...
- android studio 课程表,基于课程表的安卓Android手机控制APP设计(AndroidStudio,SQLite)(含录像)...
基于课程表的安卓Android手机控制APP设计(AndroidStudio,SQLite)(含录像)(毕业论文12000字,程序代码) 摘 要 随着IT技术的发展,以前老套的课程表内容查询管理方式已 ...
- 20220728使用电脑上的蓝牙和汇承科技的蓝牙模块HC-05配对蓝牙串口传输
20220728使用电脑上的蓝牙和汇承科技的蓝牙模块HC-05配对蓝牙串口传输 2022/7/28 11:27 电脑:DELL Vostro 3888,WIN10系统 五.蓝牙模块如何与电脑连接(从模 ...
最新文章
- springboot中controller单例模式多线程安全的简单理解
- JZOJ 3947 . 【省常中JSOI模拟】收历史作业
- 5个常用的Python功能代码
- BigDecimal类的使用
- 【案例】ZigBee无线模块在城市智能照明上的应用
- ROBOTS.TXT屏蔽笔记、代码、示例大全
- 玩转CocoaPods
- 2_C语言中的数据类型 (二)进制
- Bailian2944 单词替换【字符串流】
- CSDN发布博文时出错的截图
- vba手机号码归属_Android中手机号码归属地查询实现
- 金蝶移动bos开发教程_移动BOS开发 -- 移动表单
- 图像加密标准测试图库
- IDEA GitToolBox插件安装教程
- python爬虫基础详解
- 【网站】八大极品桌面壁纸网站,惊艳
- 如何快速知道哪些中文期刊是中文核心期刊
- 神经网络前向传播和反向传播算法(作业4)
- 胡润研究院发布《2018胡润区块链富豪榜》
- 干支纪年法简便算法_高中化学分类学法指导!附高考化学必记知识点及规律
热门文章
- ARM Cortex-M底层技术(1)—单片机的内存RAM和FLASH的理解
- 【UDS】基于CAN FD的UDS传输层 重要理解
- MySQL视图_刘锋的博客
- springboot整合pdfobject 预览pdf文件 出现 Not allowed to load local resource : file:///c:/xxxx.pdf 报错的问题解决
- uniapp 窗口小工具、桌面小部件、微件 Ba-AppWidget
- 利用在线工具weblogo3画图,有些问题想寻求大家帮助!
- pyside6的QTextEdit 自动移动光标到末尾
- RTK和GPS的区别 有哪些产品和服务
- ubuntu ufw 配置
- 应用程序的组件中发生了无法处理的异常。如果单击继续,应用程序将忽略次错误并尝试继续