基于stm32通过HC_05(ZS-040)蓝牙模块用手机控制stm32开发板上led灯的亮灭

news/2024/10/17 4:58:18/

文章目录

  • 前言
  • 一、HC-05蓝牙是什么?
  • 二、应用实例步骤
    • 1.使用AT指令对蓝牙的初始化
    • 2.打开手机蓝牙助手查看是否搜索到该蓝牙
    • 3.用蓝牙模块代替TTL连接stm开发板
    • 4.创建项目开始配置相关配置和编写代码
  • 总结


前言

蓝牙是我们生活中非常常见的一个功能,也是嵌入式中用来远程操控的一个非常重要的功能,所以对于我们来说学习蓝牙是非常有必要的,以下是我在学习过程的收获。


一、HC-05蓝牙是什么?

HC-05蓝牙模块是嵌入式中使用最广泛的的蓝牙模块,因为蓝牙其实就相当于一个串口,可以使用相同的串口协议,可以通过手机连接该蓝牙模块,发送命令实现对stm32单片机控制的一系列应用。

二、应用实例步骤

1.使用AT指令对蓝牙的初始化

首先我们需要HC_05蓝牙模块进行AT命令初始化,也就是使用AT命令命名蓝牙名字,以及设置配对密码,接下来将蓝牙模块与串口助手连接,RXD对TXD,TXD对RXD,GND对GND,VCC对3.3V,然后打开串口助手,进行AT指令设置,如下图所示:

2.打开手机蓝牙助手查看是否搜索到该蓝牙(手机应用商店下载)


 3.用蓝牙模块代替TTL连接stm开发板

4.蓝牙其实就相当于一个串口,可以使用相同的串口协议,这里我们采用FreeRtos系统中的任务和消息队列用蓝牙实现对LED灯的控制,进入Cubemx新建一个工程,选好定时器和时钟后:

第一步,打开USART1,选择异步通信模式,并更改波特率为9600,因为蓝牙对应的波特率为9600:

第二步还需要打开USART1的中断,

第三步,添加任务和队列,需要添加两个任务,一个是控制灯的高低电平,一个是控制队列读取输入的字符处理,队列就是用来存放输入的字符串的, 

第五步,首先使能UART中断,如下所示:

__HAL_UART_ENABLE_IT(uartHandle,UART_IT_RXNE);

 

然后在中断里面写下去USART1的寄存器里面读取收到的数据也就是我们向蓝牙里面发送的数据装到一个容器中,然后再将数据发送到消息队列中,如下所示:

 uint8_t data;
void USART1_IRQHandler(void)
{/* USER CODE BEGIN USART1_IRQn 0 */if(__HAL_UART_GET_FLAG( &huart1,UART_FLAG_RXNE)== SET){data=huart1.Instance->DR;//数据寄存器找数据找到基地址访问第一个成员//将收到的数据发送到消息队列中xQueueSendFromISR(myQueueHandle,&data,NULL);//第一个参数是队列的句柄第二个是发送的数据}/* USER CODE END USART1_IRQn 0 */HAL_UART_IRQHandler(&huart1);/* USER CODE BEGIN USART1_IRQn 1 *//* USER CODE END USART1_IRQn 1 */
}

然后再freertos系统中的任务函数中写下将消息队列的数据放到一个数组中然后再输出出来,看是否正确,并且输一次都需要初始化数组,如下所示:

void Uart_input(void const * argument)
{/* USER CODE BEGIN Uart_input */uint8_t index=0;/* Infinite loop */for(;;){index=0;memset(DataBuff,0,20); //初始化数组if(xQueueReceive(myQueueHandle,&DataBuff[index++],portMAX_DELAY)==pdPASS){ //如果接收到数据,就把数据放进databuff数组里面while(xQueueReceive(myQueueHandle,&DataBuff[index++],50)==pdPASS){}//一个字节一个字节的接收数据DataBuff[index]='\0';printf("%s\r\n",DataBuff);}osDelay(100);}/* USER CODE END Uart_input */
}

 然后再在一个任务函数中写收到的数据与这里的数据进行比较如果一样就实现所对应的功能,自己定义一个字符来打开灯或者关闭灯,就是如果数据一样就转换io口的高低电平来点亮台灯,这里对应的引脚是PA6,如下所示:

 

uint8_t DataBuff[20];
void Led_Task(void const * argument)
{/* USER CODE BEGIN Led_Task *//* Infinite loop */for(;;){if(strncmp((const char*)DataBuff,"openled",8)==0){		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET);memset(DataBuff,0,20);}											if(strncmp((char*)DataBuff,"closeled",9)==0){		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_SET);memset(DataBuff,0,20);}osDelay(100);}/* USER CODE END Led_Task */
}

然后我们需要在手机上下载一个蓝牙串口调试助手app,连接HC_05蓝牙模板进行使用,如下图所示:

 

 


总结

以上就是今天要讲的内容,本文仅仅简单介绍了蓝牙模块的基本使用,嵌入式的学习过程任重道远,我们需更加努力。


http://www.ppmy.cn/news/140796.html

相关文章

增值税发票税控开票软件V2.0.48_ZS_20220429(220518)-3

金税盘软件开票时所遇到的问题: 解决方案: 软件配合政策等不定期更新,覆盖安装最新版本的软件即可 最新版本 航天信息增值税发票税控开票软件(金税盘版V2.0.48_ZS_20220429(220518)-3) 下载地址 1、官方下载&#x…

zs/rz 命令

为什么80%的码农都做不了架构师?>>> sz/rz 是基于ZModem传输协议的命令。对传输的数据会进行核查,并且有很好的传输性能。使用起来更是非常方便,但前提是window端需要有能够支持ZModem的telnet或者SSH客户端,例如secu…

HC06 ,ZS040 (没有按键的)AT配置相关

学习内容: HC-06 步骤一接线:HC-06的Rx和Tx 接到 USB转TTL的 Tx和 Rx,VCC接5V,GND接GND 步骤二:上电之后灯闪,说明进入了AT指令模式 步骤三:打开串口调试器 这里使用SSCOM,选择9600…

matlab练习程序(zs图像细化)

zseven.m function out=zseven(nbhd)s=sum(nbhd(:))-nbhd(5);temp1=(2<=s)&(s<=6);p=[nbhd(1) nbhd(4) nbhd(7) nbhd(8) nbhd(9) nbhd(6) nbhd(3) nbhd(2)];pp=[p(2:8) p(

7z命令行语法

目录 命令行语法命令行格式通配符清单文档命令行语法 命令行格式 7z <command> [<switch>...] <base_archive_name> [<arguments>...]7z 的命令主要由 command、switch、base_archive_name、arguments 组成 其中 switch 的格式如下: <switch&g…

一起学MongoDB(四)——MongoDB操作

基本概念 生活中&#xff1a;仓库、架子、物品计算机&#xff1a;数据库&#xff08;database&#xff09;、集合&#xff08;collection&#xff09;、数据/文档&#xff08;document&#xff09; 查看数据库 语法&#xff1a;show databases > show databases admin …

回收站不见了怎么恢复?3个方法快速解决!

案例&#xff1a;我想把需要删除的软件拖到桌面回收站中进行删除&#xff0c;却发现我电脑桌面上的回收站不见了&#xff0c;有小伙伴知道怎么恢复吗&#xff1f; 在日常使用电脑的过程中&#xff0c;回收站是一个至关重要的功能。当我们删除文件时&#xff0c;它提供了一个安…

耕耘不缀、丰收如期,中药入血组又双叒叕升级了

春去夏来&#xff0c;小满已至&#xff0c;麦浪序曲逐渐拉响&#xff0c;百趣人在中药领域的勤耕不辍也迎来了本年度的第一次丰收。中药入血组作为中药临床应用重磅产品&#xff0c;此次升级可谓“一优化&#xff0c;两提升&#xff0c;三新增”。“一优化”为分析图例优化&…