arduino+App Inventor+mixly=纯图形化编程自制APP玩转bluno蓝牙4.0(BLE)
点击查看最新的基于Scratch的蓝牙通用控制教程接上篇:
arduino+App Inventor+mixly=纯图形化编程实现手机蓝牙2.0无线遥控
(出处: 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命令将设备设置为从机模式(出厂默认为此模式,一般不用设置)
编程:
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的定时器用来定时扫描是否有接收到主控板发过来的数据。使用一个对话框给用户提示一些信息。
界面设计完成之后需要进行编程(逻辑设计):
由于后面与bluno通讯均需要使用地址,因此首先初始化2个全局文本变量:
ble_service_uuid为蓝牙服务的地址,由bluno固件定义,不可修改, 固定为0000dfb0-0000-1000-8000-00805f9b34fb
ble_characteristic_uuid为设备通讯地址,由bluno固件定义,不可修改,固定为0000dfb1-0000-1000-8000-00805f9b34fb
接下来为程序开始时打开蓝牙获取权限并扫描周围蓝牙设备:
蓝牙打开后接下来需要打开设备列表给用户选择
如果点击按钮时按钮显示为“连接Bluno“说明当前蓝牙是断开的,则停止扫描周围蓝牙设备,并弹出一个选择框显示当前搜到的周围的蓝牙设备列表。
如果点击按钮时按钮显示为“断开Bluno“说明当前蓝牙已连接,则断开当前连接的蓝牙。
当用户点击列表选择了需要的设备后,就要连接这个设备了,选择列表的第1到17项为设备的MAC地址,连接这个地址的设备。
建立蓝牙连接之后我们要做的就是两个事情了
1、接收显示bluno发送过来的数据
2、发送数据给bluno设备
首先接收数据,需要使用定时器扫描是否有接收到蓝牙数据,如果有数据就读取数据并处理(我们这个应用里面只需要显示即可)。
当计时器到达时间后就判断如果当前蓝牙已连接就接收蓝牙数据。我们设置的计时器时间为500ms,因此每500ms会扫描一次是否接收到数据,此数据若太小会导致发送的数据丢包。
接下来如果接收到了数据,则将接收到的数据(即stringValue)添加到接收框中显示。
这样就实现了接收bluno发过来的数据了。
然后我们处理发送数据给bluno。
在这个应用里面使用两个按钮控制bluno板载的LED灯,所以我们只需要在两个按钮按下时发送不同的字符串即可。
定义一个过程或者说函数,用来发送数据,当蓝牙已连接的时候先关闭接收数据定时器,然后发送数据,当数据发送完毕后再启用定时器。
当点击打开按钮时,发送OPEN.,当点击关闭按钮时,发送CLOSE.,最后以一个点作为数据结束的标注,方便bluno接收到数据之后解析。可以自己修改要发送的数据。
最后,我们不要忘了根据蓝牙是否连接设置按钮的文字显示以及定时器的开关:
至此,app制作完毕,可以下载到手机运行了。
mixly端程序设计:
程序很简单,Bluno的蓝牙通讯也是串口,因此使用串口通讯的命令即可。
设置波特率为115200,声明两个变量,一个用来存储接收到的蓝牙数据,根据蓝牙数据打开或者关闭13号引脚的LED灯,一个用来存储系统运行时间达到每秒钟发送一次数据的目的。
最终效果如下:
点击app端两个按钮控制板载LED亮和灭,同时app上显示A0的数据。
以上三个文件见本贴附件或云盘
若有问题可在QQ群交流:319059620
试了一下,可以连上蓝牙4.0,但是接收不到数据,不知是怎么回事?
夜半凌晨灯火明,这就是快乐创客 感谢大神半夜辛苦写教程,写的灰常全,解决了我当前最大的问题。感激感激感激:hug: 安卓机器人 发表于 2018-3-4 10:06
夜半凌晨灯火明,这就是快乐创客
你懂的{:5_125:} DL张 发表于 2018-3-4 12:01
感谢大神半夜辛苦写教程,写的灰常全,解决了我当前最大的问题。感激感激感激 ...
哈哈 老早想写了一直拖着 请教如何导入蓝牙4.0固件? 记录下 各位大神!!也没有人会蓝牙和蓝牙通信的,比如说(用一个arduino插上蓝牙HC-05模块)连接(另外一个arduino插上蓝牙HC-05模块),如何编程,跪求各位大神!! micro 发表于 2018-9-29 11:52
试了一下,可以连上蓝牙4.0,但是接收不到数据,不知是怎么回事?
我也是这样的问题,很困惑。 大师,大事不妙哇,一加载咱的蓝牙的扩展固件后,就生成不了app了。。。。。。最近inventor更新了一下好像 漫路修远 发表于 2019-8-20 18:36
大师,大事不妙哇,一加载咱的蓝牙的扩展固件后,就生成不了app了。。。。。。最近inventor更新了一下好像 ...
对对,我的也是 漫路修远 发表于 2019-8-20 18:36
大师,大事不妙哇,一加载咱的蓝牙的扩展固件后,就生成不了app了。。。。。。最近inventor更新了一下好像 ...
但我们可以用老版本的MIT的APP INVENTOR
我差点以为我赖以生存的蓝牙现在用不了了 micro 发表于 2018-9-29 11:52
试了一下,可以连上蓝牙4.0,但是接收不到数据,不知是怎么回事?
我也遇到了,找卖蓝牙模块的技术要一下,蓝牙的
service_uuid
characteristic_uuid
更换一下 就可以了。
感谢版主提供这么好的教程。 太有用了,大佬请受我一拜!!!!! 大佬可以加一下VX吗?遇到点问题想请教 感谢能用
页:
[1]