本文转自:DFRobot创客社区
原文链接:
[Mind+]使用图形化编程实现主控板与手机蓝牙通讯-Mind+论坛-DF创客社区mc.dfrobot.com.cn本帖最后由 Forgotten 于 2019-3-25 12:58 编辑
做项目时我们经常会遇到蓝牙的问题,例如使用appinventor制作一个app控制板子,或者将板子的数据通过蓝牙传到手机上。
遂决定研究一下手机与主控板的蓝牙通讯。
材料选择:
1、我们选择的是蓝牙通讯,蓝牙通讯的好处是可以很方便的跟手机进行通讯,缺点是点对点通讯(最新的蓝牙会支持多点通讯,不在我们讨论范围内),传输速度比较低(无法传视频图像等)。
2、蓝牙有不同的代数,有不同的功能(类比最开始手机都是大哥大,后面有2G、3G、4G、5G等等),我们当前最常见的是蓝牙2.0(bluetooth)和低功耗蓝牙4.0(BLE,Bluetooth Low Energy),但是两者都可以实现通讯功能。
4、由于BLE无需密码配对,两个设备靠近就可以,安卓和苹果都支持,因此我选择兼容性更好也是更方便的BLE进行操作。一般我们常见的HC-05,HC-06是蓝牙2.0,使用方法略有不同(appinventor界面的程序不同),本教程我们选择DFRobot出品的BLE-Link蓝牙模块作为样例,同时为了接线方便兼容各种不同的主控板,我们需要一个转接模块。
链接:BLE-Link蓝牙模块xbee io扩展板
本篇我们首先了解一下基础知识。
BLE-Link通讯的接口是串口,因此只要是支持串口的主控板均支持,不管是Arduino还是microbit又或是掌控,同样的板或者不同的板之间,只要支持串口,板子连接一个BLE-Link就可以实现通讯,因此在本教程中不区分板子,以使用最为广泛的arduino uno板进行通讯为例。
(注:尽管microbit、esp32等板子自带了蓝牙,但是由于占用空间大,或是使用不稳定,因此外接一个蓝牙模块也是一个不错的选择)
示意图:
接下来我们进入实操环节:
实现效果:手机app发送一个消息给主控板,主控板收到消息后把这个消息返回给手机app显示。
1、手机app准备:
我使用appinventor制作了一个手机app方便进行调试,可以直接下载附件apk文件在安卓手机上进行安装,也可以在appinventor里面打开我的aia文件进行修改编辑。
app inventor 2:mit开发的安卓手机端图形化编程软件,目前国内已经有中文服务器了,可以在线编程,手机直接扫描二维码或者使用ai伴侣即可运行,比较方便,推荐两个网址任选:广州电教馆服务器,17coding,基本使用功能可以参考17coding的教程。
appinventor的aia文件点击下载
安卓端app软件点击下载
编程界面:
手机app界面:
2、BLE-Link准备:
首先需要将BLE-Link设置为从机,这样手机才能搜索到,还可以改个名字方便识别。
使用usb线连接BLE-Link上的usb口,打开Mind+上传模式,选择BLE-Link对应的端口,波特率选择115200,打开串口监视器,如下图:
选择“没有结束符”,输入+++ 发送,此时会显示 Enter AT Mode,极为进入了BLE-Link设置模式
接下来将“没有结束符”切换成“回车加换行”,依次发送以下三条命令:
AT+SETTING=DEFAULT
AT+NAME=BLE-Link1
AT+RESTART
注:第一条是恢复出厂设置成从机,第二条是将此模块名字设置为BLE-Link1,第三条是重启模块使设置生效。更多AT命令见wiki。
接下来我们将BLE-Link插到io扩展板上,并使用四根杜邦线引出5V RX TX GND
3、对主控板进行编程:
我们要实现将手机app发送的消息返回给手机app,因此就是从串口把收到的数据再通过串口输出即可,程序如下图:
程序上传到uno之后,连接BLE-Link与Uno板(BLE-Link的TX接uno的D0,RX接uno的D1,5V接VCC,GND接GND),手机app搜素连接BLE-Link,Link灯亮,发送hello,情况如下:
发现返回了5个数字,为什么会这样呢?我们就看一下ASCII字符编码表,发现这5个数字对应的是5个字符的十进制编码,因为数据在收发的过程中都是以101010形式的二进制传输的,接收到的时候如果不做转换就是数字了。
因此我们如果要显示字符的形式,那么我们就进行一下转换,Mind+的“运算符”中有对应的模块转成ASCII字符,修改程序如下:
再次上传,注意因为BLE-Link占用的串口和上传程序是一个串口,因此在每次上传的时候需要拔下D0上的线,否则会报错。
再次发送hello,这次正常显示了数据,至于为什么换行了,就是程序发送的情况了,串口发送是每次一个字符的,所以执行下来就换行了5次。
未完待续。。。