查看: 3466|回复: 7

[项目分享] arduino+App Inventor+mixly=纯图形化编程自制APP玩转bluno蓝牙4.0(BLE)

[复制链接]
本帖最后由 Forgotten 于 2018-3-4 01:43 编辑

接上篇:
Arduino+App Inventor+mixly=纯图形化编程实现手机蓝牙2.0无线遥控
http://mc.dfrobot.com.cn/forum.p ... 4225&fromuid=724121
(出处: DF创客社区 - 分享创造的喜悦)


bluno系列产品(bluno、beetle ble、romeo ble、ble link等等)使用appinventor自带蓝牙编程的app无法实现跟手机的通讯,那是因为bluno系列产品使用的是蓝牙4.0的协议即BLE(蓝牙低功耗),我们需要使用BLE的插件才能实现app inventor编程与bluno通讯。

因此使用一个最简单的应用记录使用方法:
应用作用:使用app inventor制作一个app,使用mixly图形编程软件给bluno写一个程序,实现使用app端两个按钮控制板载LED亮和灭,同时bluno端每秒钟发送一次模拟口0的数据传到app上显示。

硬件:
bluno系列产品(bluno、beetle ble、romeo ble、ble link等等),根据wiki使用AT命令将设备设置为从机模式(出厂默认为此模式,一般不用设置)
1.png

编程:
app inventor端界面设计:
appinventor的基础使用见上一篇帖子,这里不做赘述。以下部分为程序分步介绍,可直接在appinventor中导入此项目 blunoApp.aia
由于bluno为BLE通讯,因此需要导入一个插件(extension)文件:edu.mit.appinventor.ble.BluetoothLE.aix

接下来进行界面设计:使用一个按钮用来控制连接或断开蓝牙。
使用两个按钮触发控制开灯和关灯。
使用一个标签用来显示主控板发过来的数据。
使用一个列表框列出连接蓝牙时当前搜索到的所有蓝牙设备,注意在组件属性最后面的”可见性“取消选中。
接着添加一个BLE的插件用来增加BLE控制功能。
使用一个Activity启动器添加Action为:android.bluetooth.adapter.action.REQUEST_ENABLE ,用来打开手机蓝牙。
使用一个计时间隔为500ms的定时器用来定时扫描是否有接收到主控板发过来的数据。使用一个对话框给用户提示一些信息。
2.png

界面设计完成之后需要进行编程(逻辑设计):
由于后面与bluno通讯均需要使用地址,因此首先初始化2个全局文本变量:
ble_service_uuid为蓝牙服务的地址,由bluno固件定义,不可修改,       固定为  0000dfb0-0000-1000-8000-00805f9b34fb
ble_characteristic_uuid为设备通讯地址,由bluno固件定义,不可修改,固定为  0000dfb1-0000-1000-8000-00805f9b34fb
3.png


接下来为程序开始时打开蓝牙获取权限并扫描周围蓝牙设备:
4.png
蓝牙打开后接下来需要打开设备列表给用户选择
如果点击按钮时按钮显示为“连接Bluno“说明当前蓝牙是断开的,则停止扫描周围蓝牙设备,并弹出一个选择框显示当前搜到的周围的蓝牙设备列表。
如果点击按钮时按钮显示为“断开Bluno“说明当前蓝牙已连接,则断开当前连接的蓝牙。
5.png
当用户点击列表选择了需要的设备后,就要连接这个设备了,选择列表的第1到17项为设备的MAC地址,连接这个地址的设备。
6.png

建立蓝牙连接之后我们要做的就是两个事情了
1、接收显示bluno发送过来的数据
2、发送数据给bluno设备

首先接收数据,需要使用定时器扫描是否有接收到蓝牙数据,如果有数据就读取数据并处理(我们这个应用里面只需要显示即可)。

当计时器到达时间后就判断如果当前蓝牙已连接就接收蓝牙数据。我们设置的计时器时间为500ms,因此每500ms会扫描一次是否接收到数据,此数据若太小会导致发送的数据丢包。
接下来如果接收到了数据,则将接收到的数据(即stringValue)添加到接收框中显示。
7.png
这样就实现了接收bluno发过来的数据了。

然后我们处理发送数据给bluno。
在这个应用里面使用两个按钮控制bluno板载的LED灯,所以我们只需要在两个按钮按下时发送不同的字符串即可。

定义一个过程或者说函数,用来发送数据,当蓝牙已连接的时候先关闭接收数据定时器,然后发送数据,当数据发送完毕后再启用定时器。
当点击打开按钮时,发送OPEN.  ,当点击关闭按钮时,发送CLOSE.  ,最后以一个点作为数据结束的标注,方便bluno接收到数据之后解析。可以自己修改要发送的数据。
8.png

最后,我们不要忘了根据蓝牙是否连接设置按钮的文字显示以及定时器的开关:
9.png

至此,app制作完毕,可以下载到手机运行了。

mixly端程序设计:
程序很简单,Bluno的蓝牙通讯也是串口,因此使用串口通讯的命令即可。
设置波特率为115200,声明两个变量,一个用来存储接收到的蓝牙数据,根据蓝牙数据打开或者关闭13号引脚的LED灯,一个用来存储系统运行时间达到每秒钟发送一次数据的目的。
10.png

最终效果如下:
点击app端两个按钮控制板载LED亮和灭,同时app上显示A0的数据。
11.png

以上三个文件见本贴附件或云盘

若有问题可在QQ群交流:319059620







bluno appinventor mixly 20180304.zip

168.17 KB, 下载次数: 25, 下载积分: 创造力 -1

安卓机器人  初级技神

发表于 2018-3-4 10:06:54

夜半凌晨灯火明,这就是快乐创客
回复 支持 反对

使用道具 举报

DL张  学徒

发表于 2018-3-4 12:01:54

感谢大神半夜辛苦写教程,写的灰常全,解决了我当前最大的问题。感激感激感激
回复 支持 反对

使用道具 举报

Forgotten  版主
 楼主|

发表于 2018-3-4 15:49:43

安卓机器人 发表于 2018-3-4 10:06
夜半凌晨灯火明,这就是快乐创客

你懂的
回复 支持 反对

使用道具 举报

Forgotten  版主
 楼主|

发表于 2018-3-4 15:50:06

DL张 发表于 2018-3-4 12:01
感谢大神半夜辛苦写教程,写的灰常全,解决了我当前最大的问题。感激感激感激 ...

哈哈 老早想写了一直拖着
回复 支持 反对

使用道具 举报

gray6666  中级技匠

发表于 2018-3-8 11:14:24

请教如何导入蓝牙4.0固件?
回复 支持 反对

使用道具 举报

CK  学徒

发表于 2018-3-25 17:05:48

记录下
回复 支持 反对

使用道具 举报

豪仁Howren 吴  学徒

发表于 2018-6-6 22:52:51

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

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail