实战microPython(10)-蓝牙模块的使用

实战microPython(10)-蓝牙模块的使用

                                                                       David Zou 2018-12-27

本文讲解蓝牙模块的使用,以及通过uPyBoard来操作蓝牙模块并实现手机和uPyboard互动。

正在学习和使用uPyBoard开发的小伙伴可能一直会有一种遗憾,就是uPyBoard虽然可以使用microPython开发,而且已经带有非常丰富的设备库,但是,却没有无线连接功能,尤其是对于时下最流行的手机控制一切的玩法,是不是就无能为力了呢?NO,我承认有些开发板天生具备无线功能,但没有一款板子可以包含所有你想到的功能。由于成本原因,功能越丰富的开发板价格越高,而且会有很多功能一直都没有机会使用到,这不免会造成浪费。因此,我们需要学会按照自身需要扩充开发板的功能就可以了。
那么,如何扩展功能呢?答案就是上次我们提到的通讯端口(接口),其中三大基础串行通讯端口:UART, SPI, I2C可以包含绝大多数的外扩功能模块。如之前已经接触过的,16路舵机驱动模块(I2C),OLED显示屏模块(SPI/I2C)等。而今天要扩展的蓝牙模块就需要使用上次讲过的UART串口来连接了。
手机通过蓝牙遥控设备示意图
当uPyBoard扩展了蓝牙模块后,就可以通过手机的蓝牙向uPyBoard板发送命令,uPyBoard接收到命令后执行相应的动作。当然,手机上必须要有相应的APP程序。
当前,最常见的蓝牙模块是HC-05和HC-06:
在这里插入图片描述
HC-05的蓝牙模块支持主/从模式,价格贵一些,HC-06的模块只支持从模式,价格稍微便宜些。所谓主模式和从模式,其实就是主模式可以主动搜索其他可见的蓝牙模块,并从中选取要连接的蓝牙设备,而从模式只能等待主模式的蓝牙设备连接。虽然好像主模式功能更好些,但是对于我们嵌入式的应用,在没有显示和输入的情况下,主模式是无法发挥其作用的,因此从模式才是最适合我们使用的工作模式,毕竟手机是可以在主模式下找到我们的设备并连接的。另外还有一点,HC-05模块本身默认为主模式,要想改变模式非常麻烦。综上所述,我这里推荐便宜又好用的HC-06蓝牙模块。大家要注意看上面两个模块的区别,或在购买前向店主问清楚。
HC-06模块只有从方式,因此,接口连接也极为简单:
在这里插入图片描述
只有4个引脚,RX,TX,GND,+5V,前两个,我想大家应该知道是UART串口的收发引脚。不知道的可以看之前的UART串口使用教程。后两个引脚就是电源引脚了,模块是5V供电。
我们依然使用上次的实验,实际上用蓝牙模块将上次实验中的HC340串口板替换掉即可:
在这里插入图片描述

蓝牙模块HC-06的配置:

蓝牙通讯是一种非常复杂的无线通讯协议,比之UART串口协议要复杂的多,因此,要想让多个蓝牙设备之间相互通讯其通讯参数也很多,同样的,必须要让大家都遵循同样一种规则发送和接收讯息,才能保证相互之间能够顺利的交流。
蓝牙模块的设置也是通过UART串口发特殊的命令来实现的,这套特殊的设置命令被称为AT指令集,这是一套被广泛应用于通讯设备的指令集,其特点是以字符“AT”为开头,以换行符为结尾的命令字符串。就像我们上次自定义的指令一样。这样的指令直接由蓝牙模块本身识别并处理,并不会通过蓝牙向外部传递。所以,我们在应用时自定义的指令要避免和AT指令集相混淆。
蓝牙模块本身由比较多的设置命令,但所幸的是作为从机的HC-06的设置指令非常简单,一下是HC-06的AT指令:

指令回应说明
ATOK用于确认通讯
AT+VERSIONOKlinvorV1.8查看模块版本
AT+NAMExxxxOKsetname设定蓝牙名称
AT+PINxxxxOKsetPIN设定蓝牙配对密码(4位数字)
AT+BAUD1OK1200设定UART通讯波特率为1200
AT+BAUD2OK2400设定UART通讯波特率为2400
AT+BAUD3OK4800设定UART通讯波特率为4800
AT+BAUD4OK9600设定UART通讯波特率为9600
AT+BAUD5OK19200设定UART通讯波特率为19200
AT+BAUD6OK38400设定UART通讯波特率为38400
AT+BAUD7OK57600设定UART通讯波特率为57600
AT+BAUD8OK115200设定UART通讯波特率为115200
AT+BAUD9OK230400设定UART通讯波特率为230400
AT+BAUDAOK460800设定UART通讯波特率为460800
AT+BAUDBOK921600设定UART通讯波特率为921600
AT+BAUDCOK1382400设定UART通讯波特率为1382400

可以看到,HC-06的设置指令其实只有4条。HC-06使用UART串口和控制器通讯,默认波特率为9600bps(参见上次串口的使用教程)。如果想修改为其他速率,可使用相应的AT命令设置。
直接通过UART串口发“AT”命令,将收到“OK”作为回应,表明蓝牙模块和控制器的通讯正常。我们经常使用这条命令判断蓝牙模块的连接是否正确,且能否正常工作。
在无线连接方面,蓝牙需要一个识别名称,在主机端的搜索中,可以被发现并识别。默认是HC-06。
另一方面,无线连接时,也需要密码。蓝牙上称为PIN码,是4为数字,默认为1234

手机APP准备:
在手机端,我们需要一个APP程序来发送自己定义的指令。这个程序应该由我们编制,但显然编制手机APP程序已然超出教程的范围。手机的软件开发,是更加复杂的系统规范,需要读者花费极大的耐心去学习。不过也由入门级和简单的实现方案,以后有时间给大家介绍吧。今天,我们先使用现成的蓝牙测试软件。这类软件不只一种,可以在安卓手机的应用商店中搜索,我这里用的是一个叫“蓝牙串口”的小程序,试了几个,觉得这个还可以。图标是这个样子的:
在这里插入图片描述
(关于手机APP,因为我无法保证安全,我就不做搬运工了,大家自行在手机应用商店查找吧,大同小异。)

uPyBoard连接实验:

首先我们要先在microPython板这边将蓝牙模块HC-06连上,并能通过UART端口和其通讯,通过发送AT指令收到其回应,这样才能确定uPyBoard和蓝牙模块HC-06的连接是成功的。
安照前面的连接图,将蓝牙模块连接到uPyBaord板上。连线时一定要仔细,加电前反复确认。确认连接无误后,将uPyBoard连接到电脑,此时蓝牙模块HC-06也会上电,其上的LED灯快速闪动。
在这里插入图片描述
打开控制台软件HexTerminal,在下方的输入窗口复制粘贴如下代码:

import pyb
from pyb import UART

#HC-06模块连接到UART1
uart = UART(1, 9600);#设置UART1的通讯速率为9600
pyb.delay(1000);

#测试AT指令
uart.write('AT');#通过UART1向HC-06发送AT命令
pyb.delay(1000);#延时1秒
uart.read(uart.any());#检查回应并接收

看过上次教程(UART的使用)的朋友,应该能够看懂。初始化UART1后,通过UART1向HC-06发送了AT命令字串。并等待1秒后,去检查UART1收到的内容,我们可以从HexTarminal上面的窗口中看到已经收到回应的字符串:OK。截图如下:
在这里插入图片描述
这说明,uPyboard和HC-06模块的连接正确且能够正常通讯了。HC-06模块的作用就是将UART发来的所有非AT命令的内容通过蓝牙发送给与其配对的设备,而将蓝牙接收的内容通过UART发送给uPyBoard
我们可以进一步测试其他AT指令,用来设置HC-06。不过,最常用的无非是检测蓝牙模块是否可用,修改蓝牙设备名称以及修改PIN码。下面我写了两个功能函数用来实现检测蓝牙模块是否可用和修改蓝牙名称,供大家参考:

import pyb
from pyb import UART

#HC-06模块连接到UART1
uart = UART(1, 9600);#设置UART1的通讯速率为9600
pyb.delay(1000);

#设置BLE设备的名称
def setATBleName(name):
	uart.write('AT+NAME'+name);
	pyb.delay(1000);
	str = uart.read(uart.any());
	# print(str);
	return str;

#检测HC-06是否存在
def isATBleOk():
	uart.write('AT');
	pyb.delay(1000);
	str = uart.read(uart.any());
	# print(str);
	return (str == b'OK');

#注意,要在使用HC-06前先检查模块是否可用
#调用函数测试蓝牙模块是否可用
isATBleOk();

#只有isATBleOk()返回True的情况下,才能进行HC-06其他操作。
setATBleName('MyBLE');

isATBleOK()用来检测蓝牙模块是否连接正常且可用,依据的方法就是前面的直接发送AT指令并收到回应。所以,在系统上电后,使用蓝牙模块前需要调用此函数确认蓝牙模块的正常。否则后面的所有操作都是白瞎。
setATBleName()用来修改蓝牙设备名称,一般情况下不用修改,默认是HC-06。我这里测试修改为MyBLE了。实验结果如下:
在这里插入图片描述
第一个True是isATBleOK()返回的,表面HC-06可用。下面的OKsetname是setATBleName()返回的,说明设备名称修改成功。
现在将上次通过UART串口实现控制LED的程序移植过来,得到如下代码:

import pyb
from pyb import UART
from pyb import LED

#HC-06模块连接到UART1
uart = UART(1, 9600);#设置UART1的通讯速率为9600
pyb.delay(1000);

led1 = pyb.LED(1);
led2 = pyb.LED(2);

uart.write('Please enter led command:\n\r');
while True:
	if (uart.any()):
		str = uart.readline();
		print(str);
		cmd = str.decode('utf-8');
		if (cmd == "led1=on"):
			print("LED1 On.");
			led1.on();
		elif (cmd == "led1=off"):
			print("LED1 Off.");
			led1.off();
		elif (cmd == "led2=on"):
			print("LED2 On.");
			led2.on();
		elif (cmd == "led2=off"):
			print("LED2 Off.");
			led2.off();
		else:
			print("Unknow commad");

打开我们手机的蓝牙,在搜索到的设备列表里就可以找到“MyBLE”(如果你没有通过AT指令更改过的话默认“HC-06”)。关于手机连接蓝牙的操作,因为每个人的手机型号不同,差异很大,我这里无法详述,请大家在网上自行搜索。选中后配对,要求PIN码时输入对应PIN码(如果没更改过默认为1234)。
在这里插入图片描述
再打开手机上的蓝牙串口APP,由于我们的蓝牙模块是属于SPP(Serial Port Profile)的蓝牙设备,HC-06支持是SPP的协议,点击左上角的“连接”:
在这里插入图片描述
设备列表中会有之前配对的蓝牙设备,我们选中它,进行连接。连接成功后会有个提示,并返回到聊天的那个页面:
在这里插入图片描述
好了,回到电脑上将之前的程序用HexTerminal发动到uPyBoard中先运行,程序首先会通过UART1向外发送一个信息:“Please enter led command:”,之后程序主循环会一直等待数据传输进来,如果之前手机蓝牙的操作没有问题,就可以在手机屏幕上看到我们输出的信息,不过遗憾的是,信息显示成多少段落,这是我们无法控制的事,这个APP软件我没有发现可以调整时间参数的地方。
不必理会他,我们可以在下方直接输入我们的自定义命令,如led1=on并发送试试。这里提供一个省事的办法。这个APP有个功能,可以预建一个消息列表,这样就能直接发送一条命令而不需要反复输入了。具体在右上角那3个点的菜单:
在这里插入图片描述
选择“首选项”,并在首选项中,选择“消息管理器”:
在这里插入图片描述
点击右上角“+”号新建消息,并将我们的自定义命令输入:
在这里插入图片描述在这里插入图片描述
将需要的命令全部输入完成:
在这里插入图片描述
退回到聊天窗口,再次点击右上角的三个点菜单,这回我们选择“消息”:
在这里插入图片描述
就可以看到刚才预置的命令了:
在这里插入图片描述
选择命令可以看到效果了。另外这个APP还有个“开关”界面应该可以直接设置开关按钮对应发送的消息,这样就能直接点击开关按键控制LED灯了。
手机端APP的实验结果截图如下:
在这里插入图片描述
电脑端的HexTerminal中会收到手机蓝牙发送过来的命令,并执行:
在这里插入图片描述
我想大家也能看到uPyBoard上LED在手机的控制下产生的效果吧。至此,我们已经具备了使用手机控制uPyBoard的一切条件,接下来就发挥你的想象吧。
本教程源码下载:
链接:https://pan.baidu.com/s/1cIIuIfUjBktfMdQ0fXsZyg
提取码:xl7w
在这里插入图片描述
祝各位玩得愉快!搜索并关注#公#众#号: MakerDIY-Park,获取更多资料。
在这里插入图片描述

  • 9
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Python 蓝牙模块实战是指通过使用Python语言中的蓝牙模块来进行实际操作和应用。韦东山是著名的Python开发者和教育家,他在Python蓝牙模块使用和应用方面有丰富的经验和知识。 在Python中,我们可以使用第三方库如pybluez来实现与蓝牙设备的通信。通过这个模块,我们可以通过Python代码实现蓝牙设备的搜索、连接、发送和接收数据等功能。 首先,我们需要安装pybluez库,可以使用pip命令进行安装。安装完成后,我们可以导入pybluez库,并使用相关函数进行蓝牙设备的搜索和连接。我们可以通过搜索函数找到附近的蓝牙设备,并获取设备的地址和名称等信息。然后,我们可以使用连接函数与指定的蓝牙设备建立连接。 一旦连接建立成功,我们就可以使用发送和接收函数来进行数据的交互。我们可以向蓝牙设备发送指定的数据,并在设备端接收并进行处理。类似地,我们也可以在设备端发送数据,然后在Python使用接收函数进行获取和处理。 Python蓝牙模块实战可以应用于各种领域,如物联网、远程控制、传感器数据采集等。例如,我们可以通过Python代码实现与蓝牙智能家居设备的通信,对设备进行远程控制和监测。另外,我们也可以通过Python蓝牙模块实现与车载设备的通信,实现远程解锁、启动和关锁等功能。 总而言之,Python蓝牙模块实战是基于Python语言的蓝牙通信实际应用,通过使用pybluez库等第三方模块,实现蓝牙设备的搜索、连接和数据传输等功能。韦东山作为Python开发专家,对于Python蓝牙模块的实际应用和开发有丰富的经验和知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值