29920| 14
|
[教程] [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次。 未完待续。。。 |
Forgotten 发表于 2019-3-25 12:46 大哥在吗 |
Forgotten 发表于 2019-3-25 12:46 你发的aia文件失效了,还有吗 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed