查看: 4175|回复: 6

[高级教程] [Mind+]使用图形化编程实现主控板与手机蓝牙App Inventor通讯

[复制链接]
本帖最后由 Forgotten 于 2019-4-9 10:52 编辑

做项目时我们经常会遇到蓝牙的问题,例如使用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扩展板   

截图201903241800365652.png 截图201903241801403292.png



我们首先了解一下基础知识。

BLE-Link通讯的接口是串口,因此只要是支持串口的主控板均支持,不管是Arduino还是microbit又或是掌控,同样的板或者不同的板之间,只要支持串口,板子连接一个BLE-Link就可以实现通讯,因此在本教程中不区分板子,以使用最为广泛的arduino uno板进行通讯为例。
(注:尽管microbit、esp32等板子自带了蓝牙,但是由于占用空间大,或是使用不稳定,因此外接一个蓝牙模块也是一个不错的选择)


示意图:
截图201903241848106936.png


接下来我们进入实操环节:
实现效果:手机app发送一个消息给主控板,主控板收到消息后把这个消息返回给手机app显示。

1、手机app准备:
我使用appinventor制作了一个手机app方便进行调试,可以直接下载附件apk文件在安卓手机上进行安装,也可以在appinventor里面打开我的aia文件进行修改编辑。
app inventor 2:mit开发的安卓手机端图形化编程软件,目前国内已经有中文服务器了,可以在线编程,手机直接扫描二维码或者使用ai伴侣即可运行,比较方便,推荐两个网址任选:广州电教馆服务器17coding,基本使用功能可以参考17coding的教程。
appinventor的aia文件点击下载
安卓端app软件点击下载

编程界面:
截图201903241836587665.png

手机app界面:

截图201903241838291264.png
2、BLE-Link准备:
首先需要将BLE-Link设置为从机,这样手机才能搜索到,还可以改个名字方便识别。
使用usb线连接BLE-Link上的usb口,打开Mind+上传模式,选择BLE-Link对应的端口,波特率选择115200,打开串口监视器,如下图:
截图201903241909271800.png
截图201903241855319687.png
选择“没有结束符”,输入+++ 发送,此时会显示 Enter AT Mode,极为进入了BLE-Link设置模式
截图201903241857528176.png
接下来将“没有结束符”切换成“回车加换行”,依次发送以下三条命令:
AT+SETTING=DEFAULT
AT+NAME=BLE-Link1
AT+RESTART
截图201903241902112145.png
注:第一条是恢复出厂设置成从机,第二条是将此模块名字设置为BLE-Link1,第三条是重启模块使设置生效。更多AT命令见wiki
接下来我们将BLE-Link插到io扩展板上,并使用四根杜邦线引出5V RX TX GND

截图201903241909402727.png

3、对主控板进行编程:



我们要实现将手机app发送的消息返回给手机app,因此就是从串口把收到的数据再通过串口输出即可,程序如下图:
截图201903241916221072.png
程序上传到uno之后,连接BLE-Link与Uno板(BLE-Link的TX接uno的D0,RX接uno的D1,5V接VCC,GND接GND),手机app搜素连接BLE-Link,Link灯亮,发送hello,情况如下:
截图201903241922556878.png

截图201903241922026799.png
蓝牙app控制主控板案例:
接下来我们要使用app进行控制,例如按下app上的A键让板载的D13号口的L灯亮,按下B键让灯灭掉。
首先使用如下程序,上传完毕后,按下A键和B键发现app上显示了65和66。
截图201904071151388582.png
注意因为BLE-Link占用的串口和上传程序是一个串口,因此在每次上传的时候需要拔下D0上的线,否则会报错。
截图201903241935077588.png 截图201903241935454096.png
根据输入的消息收到的数进行判断即可使用控制硬件了,使用如下程序:
截图201904071150225002.png

上传完毕后,按下app上的A和B键即可控制led灯了。

Tips:

为什么发送hello会出现一串数字呢?我们就看一下ASCII字符编码表,发现这5个数字对应的是5个字符的十进制编码,因为数据在收发的过程中都是以101010形式的二进制传输的,接收到的时候如果不做转换就是数字了。
截图201903241925447463.png
因此我们如果要显示字符的形式,那么我们就进行一下转换,Mind+的“运算符”中有对应的模块转成ASCII字符,修改程序如下:
截图201903241931405856.png


再次上传,注意断开蓝牙与主控板的连接。

再次发送hello,这次正常显示了数据,至于为什么换行了,就是程序发送的情况了,串口发送是每次一个字符的,所以执行下来就换行了5次。
截图201903241936521460.png 截图201903241937197201.png


未完待续。。。





gray6666  高级技匠

发表于 2019-3-26 09:11:53

BLE的补丁终于做好了,搞一个试试
回复 支持 反对

使用道具 举报

laai  见习技师

发表于 2019-4-3 08:39:20

好帖,直接接到V7扩展板上也是可以的吧
回复 支持 反对

使用道具 举报

Forgotten  版主
 楼主|

发表于 2019-4-6 15:51:14

laai 发表于 2019-4-3 08:39
好帖,直接接到V7扩展板上也是可以的吧

ble-link可以直接插到V7扩展板,上传程序的时候把扩展板开个拨到PROG,上传完毕后拔下就行
回复 支持 反对

使用道具 举报

冬虫夏草  见习技师

发表于 2019-4-10 10:10:44

牛人 牛贴 赞一个!
回复 支持 反对

使用道具 举报

TallMan  见习技师

发表于 2019-7-10 14:40:42

牛人
回复 支持 反对

使用道具 举报

乱霙  学徒

发表于 2019-7-19 00:34:24

那如何通过mind+编写向APP发送数据的程序?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail