基于E4A的蓝牙APP

  • Post author:
  • Post category:其他





前言

经过两天时间的摸索,终于实现了一款简易的蓝牙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比较简单,但也只能是我们这些业余的人用来娱乐一下。



版权声明:本文为NICHUN12345原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。