前言
经过两天时间的摸索,终于实现了一款简易的蓝牙APP,蓝牙模块使用的是HC-05,APP是用易安卓开发的,代码全是中文,很快上手。如果是想做低功耗蓝牙APP,可以参考这个
BLE蓝牙APP开发
一、前期准备
1、安装E4A开发工具
下载链接
如果需要更改APP功能的人请下载,软件不大,只有3百多兆
2、蓝牙模块HC-05
使用APP前,先使用手机蓝牙完成配对
3、USB转串口模块
用来给蓝牙模块供电和输出数据到串口助手显示
二、视频演示
简易蓝牙演示视频
三、图文解说
APP界面:
点击“开始搜索”按钮就会将附近的蓝牙添加到列表框中,点击列表框连接对应的蓝牙,注意:只有配对过的蓝牙才能连接成功。点击“已连接”按钮就会断开连接,按钮标题更改为未连接。
串口助手界面:
波特率设置为9600,串口助手接收到来自手机APP端的数据,也能发送数据到APP端。
实物图:
使用USB转串口模块与蓝牙模块相接,接法:RX–>TX TX–>RX
四、蓝牙APP源码
变量 设备地址 为 文本型
事件 主窗口.创建完毕()
'安卓6.0以上的系统需要动态申请权限,否则app可能无法正常运行
如果 权限操作1.取系统版本号()>=23 则
权限操作1.申请全部权限()
结束 如果
初始化蓝牙()
结束 事件
事件 权限操作1.申请完毕(权限数组 为 文本型(),申请结果 为 整数型())
'可以把需要特殊权限的代码写在此处,当申请权限成功后再执行相关代码
结束 事件
过程 初始化蓝牙()
如果 蓝牙1.是否存在() = 假 则
信息框("信息","本机找不到蓝牙设备,程序将退出!","确定")
结束程序()
结束 如果
如果 蓝牙1.是否已开启() = 假 则
蓝牙1.开启蓝牙()
否则
蓝牙1.置工作模式(2)
结束 如果
结束 过程
事件 蓝牙1.蓝牙设置完毕(设置结果 为 整数型)
如果 设置结果 = 1 则
蓝牙1.置工作模式(2)
结束 如果
结束 事件
事件 图片框_返回.被单击()
返回桌面()
结束 事件
事件 退出标签.被单击()
蓝牙1.断开连接() '退出处理,释放资源,结束内部处理线程
结束程序()
结束 事件
事件 搜索按钮.被单击()
如果 搜索按钮.标题 = "开始搜索" 则
位置传感器1.开始监测() '在新版的安卓系统中,必须开启GPS定位才能搜索到蓝牙设备
列表框1.清空项目()
蓝牙1.搜索设备() '搜索设备
时钟1.时钟周期 = 10*1000 '10S
搜索按钮.标题 = "停止搜索"
否则
蓝牙1.停止搜索()
时钟1.时钟周期 = 0
搜索按钮.标题 = "开始搜索"
结束 如果
结束 事件
事件 时钟1.周期事件()
蓝牙1.停止搜索()
搜索按钮.标题 = "开始搜索"
时钟1.时钟周期 = 0
结束 事件
事件 蓝牙1.发现设备(设备名称 为 文本型,设备地址 为 文本型,是否已配对 为 逻辑型)
列表框1.添加项目("名称:" & 设备名称 & "\n地址:" & 设备地址)
列表框1.置项目标记(列表框1.取项目数()-1,设备地址)
结束 事件
事件 列表框1.表项被单击(项目索引 为 整数型)
设备地址 = 列表框1.取项目标记(项目索引)
蓝牙1.连接设备(设备地址)'连接设备
弹出提示("正在连接" & 设备地址)
结束 事件
事件 蓝牙1.连接完毕(连接结果 为 逻辑型,设备名称 为 文本型,设备地址 为 文本型,连接模式 为 整数型)
如果 连接结果 = 真 则
头部标签.标题 = "已连接:" & 设备名称
连接状态.标题 = "已连接"
连接状态.背景颜色 = 绿色
弹出提示("连接成功")
否则
弹出提示("连接失败")
连接状态.标题 = "未连接"
连接状态.背景颜色 = 红色
头部标签.标题 = "简易蓝牙"
结束 如果
结束 事件
事件 蓝牙1.收到数据(数据 为 字节型(),设备名称 为 文本型,设备地址 为 文本型)
接收框.内容 = 接收框.内容 & "\n收<-" & 字节到文本(数据,"GBK")
'接收框.内容 = 接收框.内容 & 字节到文本(数据,"GBK")
接收框.置光标位置(取文本长度(接收框.内容))
'=====================以下是接收单片机发送过来的16进制HEX数据的方法=======================
' 变量 计次 为 整数型
' 判断循环首 计次 < 取数组成员数(数据)
' 接收框.内容 = 接收框.内容 & " " & 到十六进制(数据(计次))
' 计次 = 计次 + 1
' 判断循环尾
结束 事件
事件 发送按钮.被单击()
'如果 发送框.内容 <> "" 则
如果 取文本长度(发送框.内容) > 0 则
接收框.内容 = 接收框.内容 & "\n发->" & 发送框.内容
如果 连接状态.标题 = "已连接" 则
蓝牙1.发送数据(文本到字节(发送框.内容,"GBK")) '发送消息
结束 如果
否则
'信息框("信息","消息内容不能为空!","确定")
结束 如果
接收框.置光标位置(取文本长度(接收框.内容))
结束 事件
事件 连接状态.被单击()
如果 连接状态.背景颜色 = 绿色 则
蓝牙1.断开连接()
连接状态.标题 = "正在断开"
否则
连接状态.标题 = "正在连接"
蓝牙1.连接设备(设备地址)
弹出提示("正在连接" & 设备地址)
结束 如果
结束 事件
事件 蓝牙1.连接断开()
连接状态.标题 = "未连接"
连接状态.背景颜色 = 红色
头部标签.标题 = "简易蓝牙"
弹出提示("已断开")
结束 事件
事件 清空按钮.被单击()
接收框.内容 = 空
结束 事件
事件 按钮上.被单击()
如果 连接状态.标题 = "已连接" 则
蓝牙1.发送数据(文本到字节("上","GBK")) '发送消息
结束 如果
接收框.内容 = 接收框.内容 & "\n发->" & "上"
接收框.置光标位置(取文本长度(接收框.内容))
结束 事件
事件 按钮下.被单击()
如果 连接状态.标题 = "已连接" 则
蓝牙1.发送数据(文本到字节("下","GBK")) '发送消息
结束 如果
接收框.内容 = 接收框.内容 & "\n发->" & "下"
接收框.置光标位置(取文本长度(接收框.内容))
结束 事件
事件 按钮左.被单击()
如果 连接状态.标题 = "已连接" 则
蓝牙1.发送数据(文本到字节("左","GBK")) '发送消息
结束 如果
接收框.内容 = 接收框.内容 & "\n发->" & "左"
接收框.置光标位置(取文本长度(接收框.内容))
结束 事件
事件 按钮右.被单击()
如果 连接状态.标题 = "已连接" 则
蓝牙1.发送数据(文本到字节("右","GBK")) '发送消息
结束 如果
接收框.内容 = 接收框.内容 & "\n发->" & "右"
接收框.置光标位置(取文本长度(接收框.内容))
结束 事件
五、界面布局
六、源码下载
需要源码的可以自行下载。
下载链接
下载操作:
七、E4A软件使用心得
1、养成随手保存的习惯,软件容易崩
2、为防止按下TAB键造成软件奔溃,在设置选项中拦截TAB键,再重启
3、菜单栏中“文件”选项卡里“打开例程”有很多学习例程,可以作为参考
4、工具栏中“手册”可以查看软件的介绍和编程的语法
5、蓝牙APP闪退或者搜索不到设备时,把APP的定位权限打开
6、手机打开USB调试模式,再用USB和电脑连接。这样运行代码后会自动将软件安装在手机上,停止运行就会把软件从手机卸载。
7、模拟器里面不能打开蓝牙,且模拟器和手机只能接一个
总结
后续可以用自制的蓝牙APP实现对单片机的远程控制功能。虽说使用E4A开发一款APP比较简单,但也只能是我们这些业余的人用来娱乐一下。