
一、蓝牙简介 蓝牙(Bluetooth)是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4~2.485GHz的ISM波段的UHF无线电波)。蓝牙技术最初由电信巨头爱立信公司于1994年创制,当时是作为RS232数据线的替代方案。蓝牙可连接多个设备,克服了数据同步的难题。我们这里介绍的是在嵌入式开发中常用的蓝牙模块——HC-05。 ![]() HC-05 二、使用方法 2.1 接线7 ~5 x" R+ Q1 C1 M HC-05供电电压为3.6V~6V。通常使用5V供电。其余的RXD接TXD,TXD接RXD,CND接GND即可。! o% i7 q. C+ G% E) f! d: ?# v 2.2 AT指令 HC-05也可以使用AT指令进行配置。在配置之前,首先需要让模块进入配置模式。博主买的HC-05有一个小按钮。按住小按钮再给蓝牙模块上电,蓝牙模块进入配置模式,此时模块上自带的LED会慢速闪烁。进入配置模式后,就可以用AT指令来配置我们的HC-05了。配置时,用USB转TTL连接HC-05,用串口调试助手发送AT指令进行配置。需要注意的是,HC-05配置模式的波特率固定为38400,如果你给HC-05发送指令,没有收到回复,记得检查一下串口调试助手的波特率是否正确。下面列举一些配置时常用的AT指令 * T- o. c% r6 l, t" h4 @- [+ A • AT 检查HC-05模块连接是否正常,HC-05收到后会回复“OK” • AT+NAME=名字 配置HC-05的名字,配置成功后会返回“OK” • AT+NAME? 询问HC-05的名字。发送后会收到“+NAME:"名字"”,换行加“OK”+ S5 a. j* W0 L, e5 y% S; B8 ` • AT+PSWD=密码 配置HC-05密码,配对时需要用到。配置成功后,会收到“OK”& m1 w) ?, S+ Q' C- ? • AT+PSWD? 询问HC-05配对密码。发送后会收到“+PSWD:991102”,换行加“OK”# P: m7 L* t6 d4 K' \ • AT+UART=波特率,停止位,校验 设置HC-05的波特率,其中停止位0表示一位停止位,为1表示两位停止位。校验位为0表示无校验,为1表示奇校验,为2表示偶校验。比如设置115200的波特率,一位停止位,无校验。发送“AT+UART=115200,0,0”即可。配置成功后会返回“OK”# n8 U5 @$ W% |0 S$ ? • AT+UART? 询问HC-05波特率。发送后会收到“+UART:波特率,停止位,校验”,换行加“OK”: ]) a: ?9 g! S I B* x, U/ n* t- J' e2 D 配置完成功后,断电重新上电,HC-05按照配置好的名字,配对密码和波特率开始工作。此时LED快闪。! ?/ f# v2 Y. W6 g 4 U$ ]" ^$ t. o( U$ M. h % j5 v2 O" V& f; _$ M& Z5 Z6 T |3 f 三、蓝牙APP 这里介绍一个超级好用的蓝牙APP——蓝牙调试器。大概长这个样子,大家可以在应用商店下载5 z( Z' L1 \5 Y7 D( O3 \6 ? ![]() 蓝牙调试器 / f5 g8 U' I D 这个蓝牙调试器是一个大佬编写的,我这里只是介绍一下使用方法。其他的详细内容,可以到大佬的原文查看提高开发效率-蓝牙调试器。 为什么推荐这个蓝牙调试器?个人觉得,它能够在众多蓝牙调试器中脱颖而出,是因为它支持用户自己设计GUI,提供了许多控件,比如常见的按钮,文本框,可编辑文本框,以及一些滑动条,遥杆和曲线图等。支持自由设置位置,大小,功能十分强大。更重要的是,大佬提供了程序文件,对于想快速上手蓝牙模块,用手机与蓝牙交互的小伙伴来说,十分友好。 ( I5 p7 f, F- c, q 四、实战项目6 P$ g( s5 C+ M# l S5 G 下面我们以手机控制两个LED亮灭,同时通过BH1750检测周围环境光照强度变化,返回到手机端显示,并且能够显示光强变化曲线。 0 s- V3 i, p1 u3 E$ [" @ 4.1 添加文件- h8 o; ?% I. P# c 第一步,先将大佬的文件添加到工程中。大佬的工程中的初始化函数已经包含了串口的初始化,所以我们不需要再包含串口文件。 / {. A5 u- ^+ Z) { ![]() 添加蓝牙文件 ) q* v+ r8 A2 N7 f9 h: J7 d # o$ X! H8 | ?1 b) t! k' T 除此之外还要讲BH1750相关文件添加进来,具体可见博主STM32外设系列BH1750篇,这里就不再做介绍。 4.2 配置需要传递的参数7 Z( Q* m4 {7 R7 ]- B/ _5 q 根据项目要求,我们需要配置三个参数,分别用来控制两个LED亮灭,传输周围环境光照强度。首先在程序中定义好这三个变量。
定义好这些变量之后,我们需要配置一下文件中的接收和发送数据。打开大佬的.h文件,可以看到里面定义了许多类型的发送和接收变量。这里的发送接收是针对单片机来说的,而不是手机。
我们需要单片机发送一个周围环境的光照强度,数据类型为浮点型。需要接收两个LED亮灭控制变量,数据类型为int型。我们在对应的位置配置好对应的变量数量,如下3 l" a0 |& r: Q$ p' F
4.3 获取返回值 在使用手机APP控制LED亮灭时,单片机需要接收到手机发送来的数值。接收程序如下) Z( e/ @4 |6 l- Z9 T+ y% e
具体哪个值对应哪个参数,这些需要在手机端配置,放在下面介绍。 . J4 |9 }/ q Q: Y4 }8 h, T9 j" a/ M 4.4 发送光照强度 单片机需要不断地向APP端发送周围环境光照强度数据,程序如下8 Y5 M2 I; f- |4 g8 m, H
需要注意的是,蓝牙发送数据时如果需要一次发送多个数据,一定要在两次发送之间加10ms延时,否则会造成发送失败。9 I: |9 ]5 {5 N6 Y+ Y3 |: R * R9 r# o4 ^# ~* I' V& ` + {# W% Q9 M2 j' L' ` 4.5 控制程序7 t# K% [0 L8 ~; }8 d- j9 v7 u6 p 包含两部分内容,一部分是通过BH1750获取周围环境光照强度,另一部分是LED亮灭控制函数。程序如下& p# Q9 {- l v/ r7 c
4.6 手机端页面设计 根据项目要求,需要有两个LED开关,一个显示周围环境光照强度的文本框,还有一个波形显示框。 B, T2 n8 L0 k& g # |+ t' l- o6 n, K7 k9 z; P# r1 G, @ 4.6.1 新建调试工程 打开蓝牙调试助手,选择中间的“专业调试”,然后点击加号新建调试工程。' f' {+ q! a2 [+ e# c6 H 8 @( W/ A8 y$ V ![]() 新建调试工程 ! o7 f+ D A1 f" Z3 D% t2 Z: B- k. {* W+ A 4.6.2 设置通信变量1 m- J$ L( K: c/ M8 L, p* v" w# y 我们新建完调试工程后,需要先进行通信设置。实际就是将我们手机APP与单片机通信时需要的变量配置好。5 ~+ B! ^3 y O0 ?$ W' G" q @4 X 首先选中新建的调试工程,选择“通信设置” . t) t* {5 g, W, \% Q$ C, T5 k 0 b/ ]2 A! z7 d& m) P! v ![]() 通信设置 5 U: t" U2 `- p/ N0 z- `: v' I- E' C; J$ \- z9 [ 进入之后可以看到如下页面 ![]() 通信设置页面 9 a B" X( ]1 O w$ h( G* M5 e e! ~* a" n$ ]) P3 w / x7 W$ \# r5 _* B6 F# w# C 这里的发送接收,只针对手机APPA而言的。7 D3 s! G2 P$ ?. h2 z5 g/ Z P& z6 \5 q5 V' F( I, N7 V 我们需要新建一个接收变量和两个发送变量。接收变量为float型,发送变量为int型。这里的顺序对应我们单片机接收时,变量在接收数组中的位置。 ( ?; {9 e, b6 |/ [1 w4 \8 \ ![]() 发送变量 ![]() 接收变量 3 y4 |- ]" }7 m* v$ {+ P设置完收发变量后还需要设置一下通信模式。点击最右边的通信模式。选择“仅操作控件时发送”即可。如下图 8 z+ P5 |0 `- j1 k5 P. J ![]() 通信模式设置 7 X, F, G% [; j- S3 i至此,通信设置完成。7 K* t5 q; f/ G8 o) G8 [, u 4.6.3 编辑控件/ l0 a/ o: y/ ?% P( P 选中新建的调试工程,选择“编辑控件”,即可进入编辑页面。 ' s4 C, r+ V) u% X3 B+ \- c- Y ![]() 编辑控件 - u; W. _, S" U1 ~ X! f% C: t$ e7 g+ ]! _$ g- c( T 4.6.4 添加LED控制开关: T- I; [# r' O 进入编辑控件页面后,点击加号,添加一个开关。添加时会弹出页面让我们设置开关的信息4 K: v6 X/ f" V2 }$ d 2 N9 s2 s6 k: A$ Z! N. ] ![]() 添加开关 8 o8 E t# I9 u) P* u$ U2 u! d' z0 z |! Z% p1 {5 I$ ]- c 第一栏是选择该变量是接收变量还是发送变量,第二栏是选择变量类型。最后一栏是选择关联的变量。关联的变量就是我们在通信设置中添加的变量。 选择完成后需要设置开关参数,设置打开和关闭时对应的值* }" O1 L& d" O1 B# N* u$ k8 o 3 a. j% Y( h1 |7 Y+ ~ ![]() 设置参数 ) l, e( O/ F0 S2 Q h% ]8 C0 `1 W- y& o& N 4.6.5 添加光照强度显示控件 光照强度显示控件我们选择文本,操作与添加LED开关类似,注意链接好我们添加的光照强度变量即可,这里就不再做详细介绍了。# _ c0 y- ^) s, b4 U M 项目要求能够显示周围环境光照强度变化曲线。这里我们用Y-T一维曲线图来显示。添加之后链接我们添加的光照强度变量,设置好范围即可,这里不再展示。 * h4 K% e- r: T8 c7 Y# T+ @' ] 五、成果展示 首先用蓝牙调试器搜索我们的HC-05进行配对。配对完成后,在专业调试中找到我们新建的调试工程。点击右侧的开始按钮,选择我们的蓝牙,就可以开始操作啦。 : h( I; A8 A/ w" q; x+ o9 ` ![]() 成果展示 6 g9 N0 E, t! j& R2 y: r6 P! A, O: h- z8 |- A3 y 点击开关可以控制LED的亮灭。文本框显示当前周围环境光照强度。最下面显示当前周围环境光照强度变化曲线。博主最近手边没有烙铁,买来的BH1750没有焊接排针,所以没有连接。因此,显示的光照强度值为0。 & _9 j- L9 K3 w+ u6 r d 转载自:二土电子 如有侵权请联系删除, @) t5 g7 u9 D/ P. c( Q( a 4 m$ f% {; E0 s' J- E1 c9 ?7 Z |
Keil下的STM32N6之RAM运行工程配置说明
【STM32MP257-DK】01开发板开箱、ST MPU 生态资源使用、环境搭建以及镜像更新
兔哥的初代M33【002】-H503Nucleo 内部flash操作
兔哥的杂谈【002】——如何性价比更高地去编译STM32
汇编浮点库qfplib移植STM32F769I-DISCO开发板与硬件浮点运算性能测试对比
FreeRTOS学习笔记2
【NUCLEO-H533RE评测】+05 调试PWM
基于STM32在线升级OTA经验分享
基于STM32 hardfault问题分析经验分享
【NUCLEO-C0评测】硬件OLED显示
学习学习
AT-Command 开发HC05确实方便呀