Forgotten 发表于 2019-3-25 12:46:49

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

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



蓝牙app控制主控板案例:
接下来我们要使用app进行控制,例如按下app上的A键让板载的D13号口的L灯亮,按下B键让灯灭掉。
首先使用如下程序,上传完毕后,按下A键和B键发现app上显示了65和66。

注意因为BLE-Link占用的串口和上传程序是一个串口,因此在每次上传的时候需要拔下D0上的线,否则会报错。

根据输入的消息收到的数进行判断即可使用控制硬件了,使用如下程序:


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

Tips:

为什么发送hello会出现一串数字呢?我们就看一下ASCII字符编码表,发现这5个数字对应的是5个字符的十进制编码,因为数据在收发的过程中都是以101010形式的二进制传输的,接收到的时候如果不做转换就是数字了。

因此我们如果要显示字符的形式,那么我们就进行一下转换,Mind+的“运算符”中有对应的模块转成ASCII字符,修改程序如下:



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

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



未完待续。。。





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发送数据的程序?

青出于蓝 发表于 2019-12-28 19:59:34

乱霙 发表于 2019-7-19 00:34
那如何通过mind+编写向APP发送数据的程序?

我想BLE是可以向串口原始输出数据的,用模块就可以啦

UPa8yoCW 发表于 2020-1-11 13:57:24

这样的话 WIFI模块是不是也可以嘞

Forgotten 发表于 2020-1-11 21:11:00

UPa8yoCW 发表于 2020-1-11 13:57
这样的话 WIFI模块是不是也可以嘞

操作方法不太一样

UPa8yoCW 发表于 2020-1-20 21:21:13

Forgotten 发表于 2020-1-11 21:11
操作方法不太一样

{:5_131:}那WIFI模块的是怎样操作的 ?

DFSJ0OEOGvH 发表于 2021-1-27 20:55:33

Forgotten 发表于 2019-3-25 12:46
做项目时我们经常会遇到蓝牙的问题,例如使用appinventor制作一个app控制板子,或者将板子的数据通过蓝牙传 ...

大哥在吗

DFSJ0OEOGvH 发表于 2021-1-27 21:10:24

Forgotten 发表于 2019-3-25 12:46
做项目时我们经常会遇到蓝牙的问题,例如使用appinventor制作一个app控制板子,或者将板子的数据通过蓝牙传 ...

你发的aia文件失效了,还有吗

Forgotten 发表于 2021-1-29 12:03:47

DFSJ0OEOGvH 发表于 2021-1-27 21:10
你发的aia文件失效了,还有吗

没有失效,那个链接上右键选另存为就好了

DFByclJNnuE 发表于 2021-2-28 20:33:54

请问用蓝牙,只能控制开灯,不能控制关灯?
页: [1]
查看完整版本: [Mind+]使用图形化编程实现主控板与手机蓝牙App Inventor通讯