STM32外设系列—HC-05(蓝牙)

news2024/11/25 0:58:24

文章目录

  • 一、蓝牙简介
  • 二、使用方法
    • 2.1 接线
    • 2.2 AT指令
  • 三、蓝牙APP
  • 四、实战项目
    • 4.1 添加文件
    • 4.2 配置需要传递的参数
    • 4.3 获取返回值
    • 4.4 发送光照强度
    • 4.5 控制程序
    • 4.6 手机端页面设计
      • 4.6.1 新建调试工程
      • 4.6.2 设置通信变量
      • 4.6.3 编辑控件
      • 4.6.4 添加LED控制开关
      • 4.6.5 添加光照强度显示控件
  • 五、成果展示

一、蓝牙简介

蓝牙(Bluetooth)是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4~2.485GHz的ISM波段的UHF无线电波)。蓝牙技术最初由电信巨头爱立信公司于1994年创制,当时是作为RS232数据线的替代方案。蓝牙可连接多个设备,克服了数据同步的难题。我们这里介绍的是在嵌入式开发中常用的蓝牙模块——HC-05。

HC-05

二、使用方法

2.1 接线

HC-05供电电压为3.6V~6V。通常使用5V供电。其余的RXD接TXD,TXD接RXD,CND接GND即可。

2.2 AT指令

HC-05也可以使用AT指令进行配置。在配置之前,首先需要让模块进入配置模式。博主买的HC-05有一个小按钮。按住小按钮再给蓝牙模块上电,蓝牙模块进入配置模式,此时模块上自带的LED会慢速闪烁。进入配置模式后,就可以用AT指令来配置我们的HC-05了。配置时,用USB转TTL连接HC-05,用串口调试助手发送AT指令进行配置。需要注意的是,HC-05配置模式的波特率固定为38400,如果你给HC-05发送指令,没有收到回复,记得检查一下串口调试助手的波特率是否正确。下面列举一些配置时常用的AT指令

  • AT
    检查HC-05模块连接是否正常,HC-05收到后会回复“OK”
  • AT+NAME=名字
    配置HC-05的名字,配置成功后会返回“OK”
  • AT+NAME?
    询问HC-05的名字。发送后会收到“+NAME:“名字””,换行加“OK”
  • AT+PSWD=密码
    配置HC-05密码,配对时需要用到。配置成功后,会收到“OK”
  • AT+PSWD?
    询问HC-05配对密码。发送后会收到“+PSWD:991102”,换行加“OK”
  • AT+UART=波特率,停止位,校验
    设置HC-05的波特率,其中停止位0表示一位停止位,为1表示两位停止位。校验位为0表示无校验,为1表示奇校验,为2表示偶校验。比如设置115200的波特率,一位停止位,无校验。发送“AT+UART=115200,0,0”即可。配置成功后会返回“OK”
  • AT+UART?
    询问HC-05波特率。发送后会收到“+UART:波特率,停止位,校验”,换行加“OK”

配置完成功后,断电重新上电,HC-05按照配置好的名字,配对密码和波特率开始工作。此时LED快闪。

三、蓝牙APP

这里介绍一个超级好用的蓝牙APP——蓝牙调试器。大概长这个样子,大家可以在应用商店下载

蓝牙调试器

这个蓝牙调试器是一个大佬编写的,我这里只是介绍一下使用方法。其他的详细内容,可以到大佬的原文查看提高开发效率-蓝牙调试器。

为什么推荐这个蓝牙调试器?个人觉得,它能够在众多蓝牙调试器中脱颖而出,是因为它支持用户自己设计GUI,提供了许多控件,比如常见的按钮,文本框,可编辑文本框,以及一些滑动条,遥杆和曲线图等。支持自由设置位置,大小,功能十分强大。更重要的是,大佬提供了程序文件,对于想快速上手蓝牙模块,用手机与蓝牙交互的小伙伴来说,十分友好。

四、实战项目

下面我们以手机控制两个LED亮灭,同时通过BH1750检测周围环境光照强度变化,返回到手机端显示,并且能够显示光强变化曲线。

4.1 添加文件

第一步,先将大佬的文件添加到工程中。大佬的工程中的初始化函数已经包含了串口的初始化,所以我们不需要再包含串口文件。

添加蓝牙文件

除此之外还要讲BH1750相关文件添加进来,具体可见博主STM32外设系列BH1750篇,这里就不再做介绍。

4.2 配置需要传递的参数

根据项目要求,我们需要配置三个参数,分别用来控制两个LED亮灭,传输周围环境光照强度。首先在程序中定义好这三个变量。

int gLed1Flag = 0;   // LED1亮灭控制标志位
int gLed2Flag = 0;   // LED2亮灭控制标志位
float gLingt = 0;   // 周围环境光照强度

定义好这些变量之后,我们需要配置一下文件中的接收和发送数据。打开大佬的.h文件,可以看到里面定义了许多类型的发送和接收变量。这里的发送接收是针对单片机来说的,而不是手机。

#define TX_BOOL_NUM  0
#define TX_BYTE_NUM  0
#define TX_SHORT_NUM 0
#define TX_INT_NUM   0
#define TX_FLOAT_NUM 0

#define RX_BOOL_NUM  0
#define RX_BYTE_NUM  0
#define RX_SHORT_NUM 0
#define RX_INT_NUM   0
#define RX_FLOAT_NUM 0

我们需要单片机发送一个周围环境的光照强度,数据类型为浮点型。需要接收两个LED亮灭控制变量,数据类型为int型。我们在对应的位置配置好对应的变量数量,如下

#define TX_BOOL_NUM  0
#define TX_BYTE_NUM  0
#define TX_SHORT_NUM 0
#define TX_INT_NUM   0
#define TX_FLOAT_NUM 1

#define RX_BOOL_NUM  0
#define RX_BYTE_NUM  0
#define RX_SHORT_NUM 0
#define RX_INT_NUM   2
#define RX_FLOAT_NUM 0

4.3 获取返回值

在使用手机APP控制LED亮灭时,单片机需要接收到手机发送来的数值。接收程序如下

// 如果接收到APP端数据
		if(readValuePack(&rxpack))
		{
			gLed1Flag = rxpack.integers[0];
			gLed2Flag = rxpack.integers[1];
		}

具体哪个值对应哪个参数,这些需要在手机端配置,放在下面介绍。

4.4 发送光照强度

单片机需要不断地向APP端发送周围环境光照强度数据,程序如下

	// 向APP发送周围环境光照强度
	txpack.floats[0] = gLingt;
	sendValuePack(&txpack);
	delay_ms(10);   // 防止发送过快

需要注意的是,蓝牙发送数据时如果需要一次发送多个数据,一定要在两次发送之间加10ms延时,否则会造成发送失败。

4.5 控制程序

包含两部分内容,一部分是通过BH1750获取周围环境光照强度,另一部分是LED亮灭控制函数。程序如下

// LED亮灭控制
		if (gLed1Flag == 1)
		{
			Med_Led_StateCtrl(LED1,LED_ON);   // 点亮LED1
		}
		if (gLed2Flag == 1)
		{
			Med_Led_StateCtrl(LED2,LED_ON);   // 点亮LED2
		}
		if (gLed1Flag == 0)
		{
			Med_Led_StateCtrl(LED1,LED_OFF);   // 熄灭LED1
		}
		if (gLed2Flag == 0)
		{
			Med_Led_StateCtrl(LED2,LED_OFF);   // 熄灭LED2
		}
		
		gLingt = Med_Bh1750_GetLightIntensity();   // 获取周围环境光照强度

4.6 手机端页面设计

根据项目要求,需要有两个LED开关,一个显示周围环境光照强度的文本框,还有一个波形显示框。

4.6.1 新建调试工程

打开蓝牙调试助手,选择中间的“专业调试”,然后点击加号新建调试工程。

新建调试工程

4.6.2 设置通信变量

我们新建完调试工程后,需要先进行通信设置。实际就是将我们手机APP与单片机通信时需要的变量配置好。

首先选中新建的调试工程,选择“通信设置”

通信设置

进入之后可以看到如下页面

通信设置页面

这里的发送接收,只针对手机APPA而言的。

我们需要新建一个接收变量和两个发送变量。接收变量为float型,发送变量为int型。这里的顺序对应我们单片机接收时,变量在接收数组中的位置。

发送变量

接收变量

设置完收发变量后还需要设置一下通信模式。点击最右边的通信模式。选择“仅操作控件时发送”即可。如下图

通信模式设置

至此,通信设置完成。

4.6.3 编辑控件

选中新建的调试工程,选择“编辑控件”,即可进入编辑页面。

编辑控件

4.6.4 添加LED控制开关

进入编辑控件页面后,点击加号,添加一个开关。添加时会弹出页面让我们设置开关的信息

添加开关

第一栏是选择该变量是接收变量还是发送变量,第二栏是选择变量类型。最后一栏是选择关联的变量。关联的变量就是我们在通信设置中添加的变量。

选择完成后需要设置开关参数,设置打开和关闭时对应的值

设置参数

4.6.5 添加光照强度显示控件

光照强度显示控件我们选择文本,操作与添加LED开关类似,注意链接好我们添加的光照强度变量即可,这里就不再做详细介绍了。

项目要求能够显示周围环境光照强度变化曲线。这里我们用Y-T一维曲线图来显示。添加之后链接我们添加的光照强度变量,设置好范围即可,这里不再展示。

五、成果展示

首先用蓝牙调试器搜索我们的HC-05进行配对。配对完成后,在专业调试中找到我们新建的调试工程。点击右侧的开始按钮,选择我们的蓝牙,就可以开始操作啦。

成果展示

点击开关可以控制LED的亮灭。文本框显示当前周围环境光照强度。最下面显示当前周围环境光照强度变化曲线。博主最近手边没有烙铁,买来的BH1750没有焊接排针,所以没有连接。因此,显示的光照强度值为0。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/702916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue 时间转换

文章目录 将秒转换成简单时间格式方式一 表格渲染方式二 js转换 将时间转换为字符串方式一 年、月、日、时、分、秒、星期等信息方式二 返回多久之前的时间 将秒转换成简单时间格式 方式一 表格渲染 element-ui 表格为例&#xff0c;duration 单位为秒 <el-table-column …

Openresty原理概念篇(十一) 为什么要避免使用 NYI?

一 JIT编译器的死穴&#xff1a;为什么要避免使用 NYI ? ① 问题引入 1) 那么到底有哪些操作可以被 JIT,哪些不能呢?2) 怎样才可以避免写出不能被 JIT 的代码呢? ② 上节回顾 ③ 什么是 NYI&#xff1f; NYI函数 NYI完整的列表 ④ NYI列表中string库函数 说明&am…

sonarqube安装以及jenkins集成sonarqube

一、sonarqube安装 docker方式安装sonarqube docker 方式安装是最简便的&#xff0c;我选择了这个安装方式 1、下载镜像 docker pull postgres:latest docker pull sonarqube2、 创建挂载目录 #用于postgres的挂载目录 mkdir -p /opt/postgres/postgresql mkdir -p /opt/po…

慧博云通加入飞桨技术伙伴计划,共同推动企业AI应用创新

近日&#xff0c;慧博云通子公司慧博云通&#xff08;上海&#xff09;软件技术有限公司正式加入飞桨技术伙伴计划&#xff0c;双方将共同探索人工智能多场景创新应用&#xff0c;为企业提供智能化解决方案。 慧博云通 慧博云通科技股份有限公司&#xff08;股票代码&#x…

Pytorch分布式训练(一)

参考文献&#xff1a; 33、完整讲解PyTorch多GPU分布式训练代码编写_哔哩哔哩_bilibili pytorch进程间通信 - 文举的博客 (liwenju0.com) 前言 2023年&#xff0c;训练模型时&#xff0c;使用DDP&#xff08;DistributedDataParallel&#xff09;已经成为Pytorch炼丹师的标准…

sourcetree打开就闪退

1、问题分析 一直未出现如题描述情况&#xff0c;今早到公司可能是异常重启或者系统更新的愿意导致没有正常关机&#xff0c;出现了此种情况 2、问题解决 注&#xff1a;本文sourcetree安装在win11系统&#xff0c;win10等系统目录大同小异 ① (若快捷方式在桌面步骤①省略…

你的服务器还安全吗?用户数据是否面临泄露风险?

一系列严重的网络安全事件引起了广泛关注&#xff0c;多家知名公司的服务器遭到黑客挟持&#xff0c;用户的个人数据和敏感信息面临泄露的风险。这些事件揭示了网络安全的脆弱性和黑客攻击的威胁性&#xff0c;提醒着企业和个人加强对网络安全的重视。 一、入侵案例1.1 蔚来数据…

复习Javascript第二章

JavaScript 函数 JavaScript 函数是被设计为执行特定任务的代码块。 JavaScript 函数会在某代码调用它时被执行。 function myFunction(p1, p2) {return p1 * p2; // 该函数返回 p1 和 p2 的乘积 } JavaScript 函数语法 JavaScript 函数通过 function 关键词…

爆款视频生成器小程序源码搭建方案

爆款视频生成器是一种可以帮助用户快速制作出高质量视频的工具。它可以根据用户提供的素材、模板和音乐等要素&#xff0c;自动生成一个精美的视频。这种工具可以大大节省用户的时间和精力&#xff0c;同时还能够提高视频制作的效率和质量&#xff0c;使视频更易于被观众接受和…

开发一个商城小程序有哪些功能?

✔️近年来&#xff0c;随着微信小程序的不断优化和推出&#xff0c;越来越多的商家开始选择使用小程序作为销售渠道。商城小程序作为一种便捷、快速、高效的销售渠道&#xff0c;已经成为商家们打造线上商城的重要手段。商城小程序拥有着丰富的功能&#xff0c;可以满足不同商…

使用itextpdf填充表单域并生成pdf

文章目录 前言一、准备工作1.1 安装软件1.2 准备pdf1.3 设置表单域 二、创建项目三、编写代码3.1 编写工具类3.2 测试 四、测试结果 前言 最近手上有个任务&#xff0c;就是需要做一个pdf导出的功能。 可选择的技术点比较多&#xff0c;我这边综合考虑之后&#xff0c;使用的…

品牌推广的新路径:邀请歌手出席活动的独特策略“

在当今的市场竞争中&#xff0c;品牌推广和市场营销已经成为企业取得成功的重要因素之一。而邀请知名歌手出席活动则是一种备受瞩目的策略&#xff0c;可以为品牌带来巨大的优势和机遇。无论是与赵丽颖、迪丽热巴、张子枫、关晓彤、周冬雨还是孙俪等知名歌手合作&#xff0c;都…

WPF中Binding的数据转换—ValueConverters

WPF中Binding的数据转换—ValueConverters 在WPF中使用Binding经常会遇到需要转换的情况&#xff0c;如bool转为visibility&#xff0c;通常情况需要自己写一个类继承自IValueConverter接口&#xff0c;使用详情请参见Binding对数据的转换和校验&#xff0c;这种方法虽然不难&…

C 模拟包装机

一种自动包装机的结构如图 1 所示。首先机器中有 N 条轨道&#xff0c;放置了一些物品。轨道下面有一个筐。当某条轨道的按钮被按下时&#xff0c;活塞向左推动&#xff0c;将轨道尽头的一件物品推落筐中。当 0 号按钮被按下时&#xff0c;机械手将抓取筐顶部的一件物品&#x…

中间件漏洞解析

服务器解析漏洞算是历史比较悠久了&#xff0c;但如今依然广泛存在。在此记录汇总一些常见服务器&#xff08;WEB server&#xff09;的解析漏洞&#xff0c;比如IIS6.0、IIS7.5、apache、nginx等 2|0 二、IIS5.x-6.x解析漏洞&#xff08;针对asa/asp/cer&#xff09; 2|11、打…

学习笔记|盘点一些Linux 常用的命令

目录 1、apt-get Debian/Ubuntu系统包管理器 2、uname 获取 操作系统信息 3、date 查看/设置 系统时间 4、yum CentOS系统包管理器 5、mkdir 新建 文件夹 6、free 查看内存使用信息 7、wget 下载工具 8、cd 进入 文件夹 8、cp 复制或重命名 文件/文件夹 9、VI、VIM …

机器学习之支持向量机(SVM)

1 支持向量机介绍 支持向量机&#xff08;support vector machine&#xff0c;SVM&#xff09;是有监督学习中最有影响力的机器学习算法之一&#xff0c;该算法的诞生可追溯至上世纪 60 年代&#xff0c; 前苏联学者 Vapnik 在解决模式识别问题时提出这种算法模型&#xff0c;…

synchronized监视器锁

1、synchronized&监视器锁 1.1 synchronized 介绍 在 Java 中&#xff0c;synchronized 是一种关键字&#xff0c;用于实现线程的同步和互斥控制。它可以修饰方法或代码块&#xff0c;用于保护共享资源的访问&#xff0c;避免多个线程同时修改数据而引发的并发问题。 具…

chatgpt赋能python:Python重写父类__init__方法的必要性与实现方法

Python重写父类__init__方法的必要性与实现方法 在Python中&#xff0c;一个类可以继承自另一个类&#xff0c;从而获得另一个类的属性和方法。当我们继承一个父类时&#xff0c;通常我们需要重写其中的一些方法&#xff0c;以满足我们自己的需求。在这篇文章中&#xff0c;我…

玩机搞机-----带你了解高通刷机平台中的一些选项释义 玩转平台

很多刷机工具玩家都使用过&#xff0c;但对于一些新手来说。有些选项所表达的意义不太了解&#xff0c;选择与否严重会导致机型固件刷完个别功能出现故障&#xff0c;今天的这个博文对有些刷机平台中的选项做个简单的说明。 一 小米刷机平台 MiFlash.截止目前最新的版本是2022…