查看: 13798|回复: 16

[学习资料] arduino+App Inventor+mixly=纯图形化编程实现手机蓝牙2.0无线遥控

[复制链接]
本帖最后由 Forgotten 于 2017-4-9 23:41 编辑

最近很多同学表示想用手机蓝牙+Arduino实现无线遥控,无奈自己会mixly不会安卓编程,网上下载现成得又不够自由,于是我写了下面这个教程,分享一些经验

功能:使用手机端软件控制板载LED灯
一、硬件清单:Arduino控制器+蓝牙调试模块+蓝牙2.0模块+usb线
54_P_1467180364515.jpg 蓝牙串口.jpg 蓝牙2.0.jpg 396_P_1385532748779.jpg

1、主控板选择arduino 得就行,还可以选择uno主控板+扩展板v7.1,我身边有这个romeo就用这个了,他自带了蓝牙模块的接口用起来方便,而且这个主控板可以驱动电机,所以为下一步做蓝牙遥控车也是很好用得
2、串口调试模块主要为了调试蓝牙模块用的
3、蓝牙2.0模块:app inventor里面得蓝牙功能对应得是蓝牙2.0因此选择这款,如果你用的是bluno系列即蓝牙4.0得那么此篇教程不适用
4、usb线没什么好说得了,方口,坚固耐用

二、软件部分简介:
mixly:北师大团队开发的图形化arduino编程软件,使用方便,特别适合初学者入门使用,功能也比较强大,基本使用方法可以参考mixly专区其他使用教程。

app inventor 2:mit开发的安卓手机端图形化编程软件,目前国内已经有中文服务器了,可以在线编程,手机直接扫描二维码或者使用ai伴侣即可运行,比较方便,推荐两个网址任选:广州电教馆服务器17coding,基本使用功能可以参考17coding的教程


三、使用步骤:
1、安卓手机端appinventor编程:
a、打开appinventor新建一个项目,添加两个”activity启动器“,一个命名为“启动蓝牙配对界面”并在组件属性种的Action填入:android.settings.BLUETOOTH_SETTINGS,另一个命名为“蓝牙权限获取”并在组件属性种的Action填入:android.bluetooth.adapter.action.REQUEST_ENABLE。
此步骤的作用为一个为打开蓝牙配对界面以搜索配对蓝牙设备,另一个为获取打开的蓝牙权限
b、拖入一个蓝牙客户端,用于与arduino通讯。拖入一个按钮,用于打开蓝牙配对界面。拖入一个列表选择框,用于选择需要连接的蓝牙设备。拖入两个标签用于显示蓝牙状态。拖入一个按钮用以断开蓝牙。拖入两个按钮用于发送开灯命令和关灯命令以控制arduino上的led灯。界面完成如下:

布局.jpg

c、组件设计完毕,接下来点击右上角的逻辑设计进行程序的编写,程序只有这么多,比较简单,接下来分别进行说明:
组件.jpg
d、首先分析前三句程序:
程序1.jpg
①:当screen1即程序刚开始运行的时候,因为需要使用蓝牙,因此“调用蓝牙权限获取”,此句调用后若蓝牙未开启则会出现如下界面
。接下来将”断开连接按钮“的”启用“属性设置为”false“,即由于刚开始运行时蓝牙设备并未连接,因此”断开连接“按钮需要设置为不能使用。
权限Screenshot_2017-04-09-22-04-14.png
②接下来,当按下”配对蓝牙“按钮的时候,即需要打开手机的蓝牙界面,搜索并输入密码进行连接,因此执行开始设置的activity,即按钮点击之后会打开手机的蓝牙配对界面,此时搜索到蓝牙模块点击连接,输入密码(默认为 1234),蓝牙设备就进入”已配对设备列表“中了,如图:

Screenshot_2017-04-09-21-55-40.png

③蓝牙已成为已配对设备后就可以打开列表选择需要连接的蓝牙设备进行连接了,因此第三句的作用即把已配对列表显示出来供用户选择,
Screenshot_2017-04-09-22-10-00.png

PS:此两步为蓝牙使用标准流程,即:配对→连接,配对只在新设备连接时用一次,连接是每次打开软件都需要操作的。如果蓝牙设备已经在“已配对列表中”则可以直接按第二个按钮直接连接蓝牙,而不需要再按第一个按钮了。

e、接下来,当用户点击了列表中的选项后,就需要连接蓝牙了,首先断开原来连接的蓝牙设备,接下来连接用户选择的蓝牙设备了,此处有两个参数,”地址“:arduino设备上的蓝牙模块对应的mac地址,也就是上一步操作后的”选中项“,”唯一编号“:00001101-0000-1000-8000-00805F9B34FB,此处的唯一编号即UUID,因为我们使用的是蓝牙串口与arduino通讯,因此使用这个编号,此编号不可以变。
UUID是Universally Unique Identifier缩写,通用唯一识别码的意思。对于蓝牙设备,每个服务都有一个与它对应的UUID(唯一的)参考资料
连接蓝牙这个动作会返回连接成功还是失败,成功即为true,失败即为false,因此此处使用一个如果判断来判断蓝牙连接成功或者失败,如果连接成功就显示”已连接“,同时让”断开连接“按钮可以使用,否则如果连接失败就显示”未连接“同时让”断开连接“按钮不能使用。
连接QQ截图20170409220821.jpg
f、接下来介绍三个按钮的功能:
①断开连接按钮点击后断开连接,同时设置一下蓝牙状态和按钮禁用
②开灯按钮点击后发送文本”OPEN.",关灯按钮点击后发送文本”CLOSE.",即点击两个按钮分别发送不同的字符,那么我们arduino程序就可以根据接收到的文本信息判断是需要进行开灯还是关灯操作,后面加一个点“.”的作用为标识符,表示字符串结束,方便我们arduino程序里面快速判断控制字符已结束,可以换成别的,只要mixly程序中与之对应即可
程序3.jpg
g、app inventor程序编辑完毕即可打包apk下载到手机进行安装了。


2、arduino端mixly编程:
mixly端程序比较简单,因为蓝牙模块就是串口通讯,因此我们只用设置蓝牙串口然后读取串口数据进行判断即可。
程序解析:
初始化中设置串口波特率为115200,因为我们蓝牙模块设置的通讯波特率为115200,如果你设置的是其他的则填成对应的。同时声明一个字符串变量存储读取到的数据。
主程序中判断串口是否有数据,如果有数据则读取字符串直到“.“,也就是我们app inventor中每个字符串结尾的标识,读取到的字符串存储到字符串变量中。
接下来判断字符串操作13号引脚输出高或者低,即点亮灯或者熄灭灯。
QQ截图20170409223728.jpg
程序编写完成上传到arduino控制板中,注意上传的时候需要拔下蓝牙模块,上传完毕后再插上蓝牙模块,此时模块上的指示灯快速闪烁即为等待连接状态,打开手机端软件选择此模块配对并连接,指示灯慢速闪烁即为已连接,然后点击开灯关灯尝试控制板载的L灯。
IMG_20170409_224434.jpg

若无法控制,可能为蓝牙模块设置有问题,可以拔下蓝牙模块,按下一步骤进行设置

3、蓝牙模块设置:
需要设置蓝牙模块波特率为115200,从机,任意连接,以及可以选择设置名称和密码
操作方法:DF-BluetoothV3蓝牙模块使用教程
使用AT命令将蓝牙模块需要设置为:
AT+UART=115200,0,0
AT+ROLE=0
AT+CMODE=1
AT+NEME=DF-BluetoothV3
AT+PASSWORD=1234

设置完可以再次尝试是否可以控制。

4、如果无法控制改怎么办?
①把蓝牙模块插到蓝牙调试模块上,打开mixly中的串口监视器,波特率设置为115200,用手机软件连接蓝牙模块并点击开灯关灯按钮,查看串口监视器显示数据是否为如下图所示,若不是,检查蓝牙模块的设置和appinventor中的程序


QQ截图20170409230736.jpg

②将蓝牙模块拔下板子,usb线连接板子,打开mixly中的串口监视器,波特率设置为115200,输入 OPEN.  或 CLOSE.    ,看能否控制板子上的led灯,若不能控制检查mixly程序
QQ截图20170409231034.jpg


软件及程序.zip

1.44 MB, 下载次数: 275, 下载积分: 创造力 -1

安卓机器人  初级技神

发表于 2017-4-10 15:50:59

详细,可操作性强
回复 支持 反对

使用道具 举报

xiaohe9527  高级技师

发表于 2017-6-22 14:29:57

很有借鉴意义的
回复 支持 反对

使用道具 举报

xiaohe9527  高级技师

发表于 2017-6-23 11:05:59

好难啊,看了很久,也不清楚,我能不能网上买个便宜点的蓝牙2.0,你说appinveter是蓝牙2.0的,那么你用了DF-BluetoothV3蓝牙串口模块是3.0,到底行不行啊?
回复 支持 反对

使用道具 举报

Forgotten  版主
 楼主|

发表于 2017-6-23 17:15:20

xiaohe9527 发表于 2017-6-23 11:05
好难啊,看了很久,也不清楚,我能不能网上买个便宜点的蓝牙2.0,你说appinveter是蓝牙2.0的,那么你用了DF ...

2.0,3.0都可以直接在appinventor里面用
网上买的蓝牙2.0的也可以这样用
回复 支持 反对

使用道具 举报

xiaohe9527  高级技师

发表于 2017-6-23 20:27:34

Forgotten 发表于 2017-6-23 17:15
2.0,3.0都可以直接在appinventor里面用
网上买的蓝牙2.0的也可以这样用

我已经 买了,蓝牙10几块一个,又买了一个usb转seril的,希望能成功
回复 支持 反对

使用道具 举报

chen7973  学徒

发表于 2017-6-24 09:39:20

谢谢分享,回头试试!!
回复 支持 反对

使用道具 举报

ABC3141592  学徒

发表于 2017-8-8 16:12:33

mixly怎么给手机发送信息呢?
回复 支持 反对

使用道具 举报

Forgotten  版主
 楼主|

发表于 2017-8-8 23:14:14

ABC3141592 发表于 2017-8-8 16:12
mixly怎么给手机发送信息呢?

mixly只是一个编程软件呀,mixly给手机发信息这个说法很奇怪
回复 支持 反对

使用道具 举报

zpcwj  学徒

发表于 2017-9-29 15:20:16

你好,我先请教一下如何把Arduino的串口数据通过App Inventor在手机上绘制出来?
回复 支持 反对

使用道具 举报

Forgotten  版主
 楼主|

发表于 2017-9-30 10:08:42

zpcwj 发表于 2017-9-29 15:20
你好,我先请教一下如何把Arduino的串口数据通过App Inventor在手机上绘制出来? ...

inventor里面通过画布画线,数据读取自蓝牙串口数据
回复 支持 反对

使用道具 举报

wang.qi  学徒

发表于 2017-10-14 11:00:28

请问在Mixly中,蓝牙模块的库在哪里添加呢?谢谢!
回复 支持 反对

使用道具 举报

Forgotten  版主
 楼主|

发表于 2017-10-16 22:43:24

wang.qi 发表于 2017-10-14 11:00
请问在Mixly中,蓝牙模块的库在哪里添加呢?谢谢!

蓝牙就是串口通信,因此不需要库
回复 支持 反对

使用道具 举报

1014ljj  学徒

发表于 2017-10-19 18:36:29

看看有用不
回复 支持 反对

使用道具 举报

何国英  学徒

发表于 2017-12-19 22:45:08

我想用app的滑块来控制led灯的亮度,怎么样才能做到呢?
回复 支持 反对

使用道具 举报

安卓机器人  初级技神

发表于 2018-2-18 23:13:59

何国英 发表于 2017-12-19 22:45
我想用app的滑块来控制led灯的亮度,怎么样才能做到呢?

大致思路是:滑块操作的的数据通过手机蓝牙 传给 ARDUINO上的蓝牙模块,在ARDUINO 编程时搞个函数来处理接收的这个手机数据给连接有PWM 引脚的LED灯
回复 支持 反对

使用道具 举报

豪仁Howren 吴  学徒

发表于 2018-6-6 22:54:40

各位大神!!也没有人会蓝牙和蓝牙通信的,比如说(用一个arduino插上蓝牙HC-05模块)连接(另外一个arduino插上蓝牙HC-05模块),如何编程,跪求谢谢各位大神!!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail