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

2019-03-254.2万
精华项目
AI 快速预览详细 收起
本文介绍了如何使用[Mind+]和App Inventor实现主控板与手机的蓝牙通讯。首先介绍了蓝牙通讯的基础知识,包括蓝牙2.0和低功耗蓝牙4.0的区别。接着详细讲解了如何设置BLE-Link蓝牙模块,使其作为从机,并通过App Inventor制作一个手机app来控制主控板。通过具体的编程步骤和示例代码,实现了手机app发送消息给主控板,并返回显示的功能。此外,还展示了如何通过app控制主控板上的LED灯。
做项目时我们经常会遇到蓝牙的问题,例如使用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扩展板   

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



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

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


示意图:
[Mind+]使用图形化编程实现主控板与手机蓝牙App Inventor通讯图5


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

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

编程界面:
[Mind+]使用图形化编程实现主控板与手机蓝牙App Inventor通讯图3

手机app界面:

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

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

3、对主控板进行编程:



我们要实现将手机app发送的消息返回给手机app,因此就是从串口把收到的数据再通过串口输出即可,程序如下图:
[Mind+]使用图形化编程实现主控板与手机蓝牙App Inventor通讯图11
程序上传到uno之后,连接BLE-Link与Uno板(BLE-Link的TX接uno的D0,RX接uno的D1,5V接VCC,GND接GND),手机app搜素连接BLE-Link,Link灯亮,发送hello,情况如下:
[Mind+]使用图形化编程实现主控板与手机蓝牙App Inventor通讯图13

[Mind+]使用图形化编程实现主控板与手机蓝牙App Inventor通讯图12
蓝牙app控制主控板案例:
接下来我们要使用app进行控制,例如按下app上的A键让板载的D13号口的L灯亮,按下B键让灯灭掉。
首先使用如下程序,上传完毕后,按下A键和B键发现app上显示了65和66。
[Mind+]使用图形化编程实现主控板与手机蓝牙App Inventor通讯图21
注意因为BLE-Link占用的串口和上传程序是一个串口,因此在每次上传的时候需要拔下D0上的线,否则会报错。
[Mind+]使用图形化编程实现主控板与手机蓝牙App Inventor通讯图16[Mind+]使用图形化编程实现主控板与手机蓝牙App Inventor通讯图17
根据输入的消息收到的数进行判断即可使用控制硬件了,使用如下程序:
[Mind+]使用图形化编程实现主控板与手机蓝牙App Inventor通讯图20

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

Tips:

为什么发送hello会出现一串数字呢?我们就看一下ASCII字符编码表,发现这5个数字对应的是5个字符的十进制编码,因为数据在收发的过程中都是以101010形式的二进制传输的,接收到的时候如果不做转换就是数字了。
[Mind+]使用图形化编程实现主控板与手机蓝牙App Inventor通讯图14
因此我们如果要显示字符的形式,那么我们就进行一下转换,Mind+的“运算符”中有对应的模块转成ASCII字符,修改程序如下:
[Mind+]使用图形化编程实现主控板与手机蓝牙App Inventor通讯图15


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

再次发送hello,这次正常显示了数据,至于为什么换行了,就是程序发送的情况了,串口发送是每次一个字符的,所以执行下来就换行了5次。
[Mind+]使用图形化编程实现主控板与手机蓝牙App Inventor通讯图18[Mind+]使用图形化编程实现主控板与手机蓝牙App Inventor通讯图19


未完待续。。。





创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(10)
在北京吃烧烤的虫子
在北京吃烧烤的虫子
掌控板能不能用?
DFByclJNnuE
DFByclJNnuE
请问用蓝牙,只能控制开灯,不能控制关灯?
DFSJ0OEOGvH
DFSJ0OEOGvH
你发的aia文件失效了,还有吗
Forgotten
Forgotten
作者
回复DFSJ0OEOGvH
没有失效,那个链接上右键选另存为就好了
DFSJ0OEOGvH
DFSJ0OEOGvH
大哥在吗
UPa8yoCW
UPa8yoCW
这样的话 WIFI模块是不是也可以嘞
UPa8yoCW
UPa8yoCW回复Forgotten
那WIFI模块的是怎样操作的 ?
Forgotten
Forgotten
作者
回复UPa8yoCW
操作方法不太一样
乱霙
乱霙
那如何通过mind+编写向APP发送数据的程序?
青出于蓝
青出于蓝回复乱霙
我想BLE是可以向串口原始输出数据的,用模块就可以啦
TallMan
TallMan
牛人
冬虫夏草
冬虫夏草
牛人 牛贴 赞一个!
laai
laai
好帖,直接接到V7扩展板上也是可以的吧
Forgotten
Forgotten
作者
回复laai
ble-link可以直接插到V7扩展板,上传程序的时候把扩展板开个拨到PROG,上传完毕后拔下就行
gray6666
gray6666
BLE的补丁终于做好了,搞一个试试
- 没有更多了 -