WiFi遥控器的手机APP制作

制作一个简易的WIFI控制器,通过手机发送信息控制硬件模块,使用易语言编程,源码基本公开

一、环境导语

由于没有 java 的基础,使用 Android Studio 编写安卓手机apk非常的困难,并且我发现使用 Android Studio 会占用极大的内存(已解决),运行虚拟机会导致程序崩溃。所以此手机app改用较为简单的中文编程语言易语言编写,采用 E4A 进行编写。

二、E4A 编程代码

1. 主窗口

布局

WiFi遥控器的手机APP制作
主窗口布局

代码

变量 已切换 为 逻辑型

事件 开关1.状态被改变(状态 为 逻辑型)
	如果 编辑框1.内容="" 或 编辑框2.内容="" 则
		信息框("Tao Space","连接服务器失败","确定")
		开关1.状态 = 假
	否则
		已切换 = 假
		客户1.连接服务器(编辑框1.内容,编辑框2.内容,2000) 
		保存对象("客户1",客户1)
		公用模块.IP = 编辑框1.内容
		公用模块.端口 = 编辑框2.内容
	结束 如果
结束 事件

事件 客户1.连接完毕(结果 为 逻辑型)
	如果 结果 = 真 则
		弹出提示("连接成功")
		如果 已切换 = 假 则
			切换窗口(创建 模式窗口)
		结束 如果
		已切换 = 真
	否则 
		信息框("Tao Space","连接服务器失败","确定")
		开关1.状态=假
	结束 如果
结束 事件

事件 标签3.被单击()
	 打开指定网址("https://www.tao-space.top/")
结束 事件

事件 标签4.被单击()
	打开指定网址("https://www.tao-space.top/")
结束 事件

2. 模式窗口

布局

WiFi遥控器的手机APP制作
模式窗口布局

代码

事件 按钮1.被单击()
	切换窗口(创建 通信窗口普通模式)
结束 事件

事件 按钮2.被单击()
	切换窗口(创建 通信窗口控速模式)
结束 事件

事件 模式窗口.按下某键(返回键 为 整数型,传址 屏蔽 为 逻辑型)
	切换窗口(创建 主窗口)
结束 事件

3. 通信窗口普通模式

布局

WiFi遥控器的手机APP制作
通信窗口普通模式布局

代码

变量 客户1 为 客户

事件 通信窗口普通模式.创建完毕()
	客户1 = 读取对象("客户1") '读取在主窗口中保存的客户组件
结束 事件

事件 按钮1.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("1","GBK"))
结束 事件
事件 按钮1.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0","GBK"))
结束 事件


事件 按钮3.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("2","GBK"))
结束 事件
事件 按钮3.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0","GBK"))
结束 事件


事件 按钮2.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("3","GBK"))
结束 事件
事件 按钮2.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0","GBK"))
结束 事件


事件 按钮4.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("4","GBK"))
结束 事件
事件 按钮4.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0","GBK"))
结束 事件


事件 按钮8.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("5","GBK"))
结束 事件
事件 按钮8.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0","GBK"))
结束 事件


事件 按钮5.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("6","GBK"))
结束 事件
事件 按钮5.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0","GBK"))
结束 事件


事件 按钮6.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("7","GBK"))
结束 事件
事件 按钮6.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0","GBK"))
结束 事件


事件 按钮7.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("8","GBK"))
结束 事件
事件 按钮7.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0","GBK"))
结束 事件


事件 按钮9.被单击()
	客户1.发送数据(文本到字节("0","GBK"))
结束 事件


事件 客户1.连接断开()
	按钮10.标题 = "重新连接"
	标签1.标题 = "设备已断开"
结束 事件

事件 按钮10.被单击()
	如果 按钮10.标题 = "断开连接" 则
		客户1.断开连接()
		按钮10.标题 = "重新连接"
		标签1.标题 = "设备已断开"
	否则
		客户1.连接服务器(公用模块.IP,公用模块.端口,2000)
	结束 如果
结束 事件

事件 客户1.连接完毕(结果 为 逻辑型)
	如果 结果 = 真 则
		按钮10.标题 = "断开连接"
		标签1.标题 = "设备已连接"
	结束 如果
结束 事件

事件 通信窗口普通模式.按下某键(返回键 为 整数型,传址 屏蔽 为 逻辑型)
	切换窗口(创建 模式窗口)
结束 事件

4. 通信窗口控速模式

布局

WiFi遥控器的手机APP制作
通信窗口控速模式布局

代码

变量 客户1 为 客户
变量 位置 为 整数型
事件 通信窗口控速模式.创建完毕()
	客户1 = 读取对象("客户1") '读取在主窗口中保存的客户组件
结束 事件

事件 按钮1.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("5" & "," & 公用模块.位置,"GBK"))
结束 事件
事件 按钮1.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0,0","GBK"))
结束 事件


事件 按钮3.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("6" & "," & 公用模块.位置,"GBK"))
结束 事件
事件 按钮3.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0,0","GBK"))
结束 事件


事件 按钮2.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("1" & "," & 公用模块.位置,"GBK"))
结束 事件
事件 按钮2.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0,0","GBK"))
结束 事件


事件 按钮4.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("3" & "," & 公用模块.位置,"GBK"))
结束 事件
事件 按钮4.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0,0","GBK"))
结束 事件


事件 按钮8.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("2" & "," & 公用模块.位置,"GBK"))
结束 事件
事件 按钮8.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0,0","GBK"))
结束 事件


事件 按钮9.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("8" & "," & 公用模块.位置,"GBK"))
结束 事件
事件 按钮9.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0,0","GBK"))
结束 事件


事件 按钮6.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("4" & "," & 公用模块.位置,"GBK"))
结束 事件
事件 按钮6.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0,0","GBK"))
结束 事件


事件 按钮7.被按下(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("7" & "," & 公用模块.位置,"GBK"))
结束 事件
事件 按钮7.被弹起(横坐标 为 整数型,纵坐标 为 整数型)
	客户1.发送数据(文本到字节("0,0","GBK"))
结束 事件


事件 按钮5.被单击()
	客户1.发送数据(文本到字节("0,0","GBK"))
结束 事件

事件 水平滑块条1.位置被改变( 位置 为 整数型)
	公用模块.位置 = 位置
结束 事件

事件 客户1.连接断开()
	按钮10.标题 = "重新连接"
	标签1.标题 = "设备已断开"
结束 事件

事件 按钮10.被单击()
	如果 按钮10.标题 = "断开连接" 则
		客户1.断开连接()
		按钮10.标题 = "重新连接"
		标签1.标题 = "设备已断开"
	否则
		客户1.连接服务器(公用模块.IP,公用模块.端口,2000)
	结束 如果
结束 事件

事件 客户1.连接完毕(结果 为 逻辑型)
	如果 结果 = 真 则
		按钮10.标题 = "断开连接"
		标签1.标题 = "设备已连接"
	结束 如果
结束 事件

事件 通信窗口控速模式.按下某键(返回键 为 整数型,传址 屏蔽 为 逻辑型)
	切换窗口(创建 模式窗口)
结束 事件

5. 公用模块

代码

静态 变量 IP 为 文本型  
静态 变量 端口 为 文本型
静态 变量  位置 为 整数型

三、功能介绍

WiFi遥控器的手机APP制作

Wifi控制器:

此界面为登录界面,首先需要保证被控端与被控端连接相同的WiFi网络,同时被控端要开启TCP服务器模式。在客户端输入IP与端口后点击按键即可连接。

WiFi遥控器的手机APP制作

模式选择:

此界面为模式选择,详细说明请看下方介绍。

WiFi遥控器的手机APP制作

普通(方向)模式:

此界面为普通模式,此模式只能控制车的行走状态,即按下执行,松手停止,详情请看普通模式数据对照表。

WiFi遥控器的手机APP制作

控速模式:

此界面是控速模式,是在普通模式的基础上加了对速度的控制。由于设计到单片机占空比的调节,此模式较为困难。详情请看高级模式数据对照表。

普通(方向)模式数据对照表

012345678
方向模式数据对照表对照表

高级(控速)模式数据对照表

0,01,x2,x3,x4,x5,x6,x7,x8,x
控速模式数据对照表对照表

控速模式中的速度值为x,x为上图控速模式中图上滑动条的值,其范围是0~100.

四、成果展示

本代码生成的作品如下(附调试助手):

编译成果下载地址:https://url70.ctfile.com/d/17643570-45161870-96e659(提取码:9105)
网络调试助手下载:https://url70.ctfile.com/d/17643570-45161873-8c55dc(提取码:9105)

五、总结

总体来说,易语言编程只能够完成一些比较简单的操作,适合急需制作APP的初学者,使用E4A开发基本可以独立而快速的实现APP的开发,但不推荐主学易语言编程(既鸡肋又难用,不推荐购买VIP)而且会出现各种各样奇怪的BUG,如果有 Java 的基础的同学还是推荐学习 Android Studio 编写apk程序。