草庐IT

HC05蓝牙模块AT指令与手机蓝牙控制STM32板载LED

zkisltm 2023-10-29 原文

本文讲述了HC-05蓝牙模块的配置和其与STM32F103单片机的连接。
代码使用HAL库函数编写。

AT指令配置HC-05蓝牙模块

常见的HC-05模块:

通过使用AT指令,我们对蓝牙模块可以进行查看版本号、波特率、配对密码、设置/查询设备名称等多达30多种配置方式。

蓝牙模块进入AT模式的方法

硬件连接:使用USB转TTL模块连接电脑和蓝牙模块。上电后模块板载指示灯可能是快闪状态。但进入AT模式后,板载灯为慢闪状态。

  • 法一:
    按住黑色按键(本质上是PIO11脚置高)后再上电即可进入AT模式,此时默认模特率为38400,上电后松开手就行;
  • 法二:
    直接上电,波特率默认为9600(蓝牙模块还没有被配置过),每次发送AT指令都需要按住按键。
    注意:一些模块两种方法都行。(太多的商家制作并售卖盗版模块,下文会讲到如何通过AT指令辨别是否为盗版模块)
    进入AT模式后,就可以在电脑端的串口助手上编写并发送AT指令了。各种串口助手都行,比如常见的XCOM2.1,我这里用的是野火的串口助手。

    每一条指令末尾都需要换行,因此这里勾上“发送新行”。

    然后就可以进入愉快的配置环节了。
    具体的AT指令可以参考网上,或者购买模块的时候商家给的用户手册。
    这里给出网盘资源链接。
    链接:https://pan.baidu.com/s/1pVDAF9EtUXxsWs0IWhBwCA?pwd=zl0k
    提取码:zl0k
    常用的AT指令有:

    注意:有时候修改了蓝牙名称后但手机找不到修改后的蓝牙名,出现这种情况是因为手机已经和原来的蓝牙配对了,物理地址是唯一的,此时肯定找不到修改后的蓝牙名。所以需要先将原来的蓝牙取消配对,在去寻找蓝牙,才能看到修改后的蓝牙名。

单片机代码部分:

由于本项目比较简单,就不封装成单独的板级支持包了,这里只需要更改main.c。
配置好模块之后,就可以进行愉快的代码编写过程了。注意cubemx配置串口的时候要使用你配置的蓝牙串口波特率,不然无法通信。

//include部分
#include "main.h"
#include "usart.h"
#include "gpio.h"
#include "string.h"  //字符串处理
char msg[40];   //返回信息
uint8_t rx;     //接收到的信息
//写在while循环之前,检验上电后代码是否正常运行
  /* USER CODE BEGIN 2 */
	uint8_t send[11]={"I am ready!"};
	HAL_UART_Transmit(&huart1,send,11,HAL_MAX_DELAY);
  /* USER CODE END 2 */
 while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_UART_Receive(&huart1,&rx,1,HAL_MAX_DELAY);
		if(rx=='o')  //发送o则开灯
		{
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
			strcpy(msg, "Successfully opened");
			HAL_UART_Transmit(&huart1,(uint8_t*)msg,19,HAL_MAX_DELAY);
		}
		else if (rx=='d') //发送d就关灯
		{
			HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
			strcpy(msg, "LED is off");
			HAL_UART_Transmit(&huart1,(uint8_t*)msg,10,HAL_MAX_DELAY);
		}
		else 
		{
			strcpy(msg, "Error happens");
			HAL_UART_Transmit(&huart1,(uint8_t*)msg,13,HAL_MAX_DELAY);
		}
  }
  /* USER CODE END 3 */
}

有关HC05蓝牙模块AT指令与手机蓝牙控制STM32板载LED的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  3. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

  4. ruby - 导轨 4 : column reference "updated_at" is ambiguous with Postgres - 2

    我正在尝试使用“updated_at”字段的日期时间范围查询数据库。前端在JSON数组中发送查询:["2015-09-0100:00:00","2015-10-0223:00:00"]在RailsController中,我使用以下方法将两个字符串解析为DateTime:start_date=DateTime.parse(params[:date_range_arr][0])end_date=DateTime.parse(params[:date_range_arr][1])#...@events=@events.where('updated_atBETWEEN?AND?,start_d

  5. ruby-on-rails - 安装 active admin 时 activeadmin.git (at master) is not yet checked out 错误 - 2

    Activeadmingem已添加到我的rails项目中,但每次我尝试安装railsgactive_admin:install时,我都会收到类似的错误git://github.com/activeadmin/activeadmin.git(atmaster)isnotyetcheckedout.Runbundleinstallfirst.我肯定在运行“railsgactive_admin:install”之前运行了bundle。运行“bundleshow”后,我看到我已将“*activeadmin(1.0.0.pre3f916d6)”添加到我的项目中,但不断收到此错误消息。我的gem文

  6. STM32的HAL和LL库区别和性能对比 - 2

    LL库和HAL库简介LL:Low-Layer,底层库HAL:HardwareAbstractionLayer,硬件抽象层库LL库和hal库对比,很精简,这实际上是一个精简的库。LL库的配置选择如下:在STM32CUBEMX中,点击菜单的“ProjectManager”–>“AdvancedSettings”,在下面的界面中选择“AdvancedSettings”,然后在每个模块后面选择使用的库总结:1、如果使用的MCU是小容量的,那么STM32CubeLL将是最佳选择;2、如果结合可移植性和优化,使用STM32CubeHAL并使用特定的优化实现替换一些调用,可保持最大的可移植性。另外HAL和L

  7. ruby-on-rails - Rails 和 MQTT : Subscribe to topic in background at server startup? - 2

    我想在服务器启动时在我的Rails应用程序中订阅一个mqtt主题,并保持订阅始终处于事件状态和运行状态。我正在使用这个mqttgem进行mqtt通信:https://github.com/njh/ruby-mqtt这是我现在拥有的:在application.rb中:config.after_initializedomqttSub=BackgroundMQTT.newmqttSub.runend后台MQTT类:classMQTTSubscriberdefrunThread.newdoMQTT::Client.connect(:host=>'localhost',:port=>1883,)

  8. ruby - Rails+ActiveAdmin - 使用 ransacker 过滤会抛出错误 PG::SyntaxError: ERROR: syntax error at or near "," - 2

    我在RubyonRails4.1.4上有一个项目,使用来自git://github.com/activeadmin/activeadmin的activeadmin1.0.0.pre,pg0.17.1,PostgreSQL9.3在项目中我有这些模型:类用户has_one:账户类账户属于:用户有很多:project_accountshas_many:项目,:through=>:project_accounts类项目#该项目有一个bool属性'archive'has_many:project_accounts类ProjectAccount属于:帐户属于:项目我有一个任务是在索引页面上实现一个

  9. ruby - 为什么在 IRB 中使用 Refinement 时得到 "main.using is permitted only at toplevel"? - 2

    我尝试在IRB(v0.9.6,Ruby2.3.0)中使用Refinement:moduleFoorefineObjectdodeffoo()"foo"endendendusingFoo#=>RuntimeError:main.usingispermittedonlyattoplevel这基本上是theexactsetupfromthedocumentation(这会导致相同的错误)。出了什么问题?我该如何解决这个问题? 最佳答案 这可能是IRb的错误或功能不当。众所周知,由于IRb的实现方式非常骇人听闻,因此它无法在所有极端情况下正

  10. ESP32学习入门:WiFi连接网络 - 2

    目录一、ESP32简单介绍二、ESP32Wi-Fi模块介绍三、ESP32Wi-Fi编程模型四、ESP32Wi-Fi事件处理流程 五、ESP32Wi-Fi开发环境六、ESP32Wi-Fi具体代码七、ESP32Wi-Fi代码解读6.1主程序app_main7.2自定义代码wifi_init_sta()八、ESP32Wi-Fi连接验证8.1测试方法8.2服务器模拟工具sscom58.3测试代码8.4测试结果前言为了开发一款亚马逊物联网产品,开始入手ESP32模块。为了能够记录自己的学习过程,特记录如下操作过程。一、ESP32简单介绍ESP32是一套Wi-Fi(2.4GHz)和蓝牙(4.2)双模解决方

随机推荐